2017년 6월 12일 월요일

spark dynamic allocation

1. dynamic allocation 이란
spark dynamic allocation 기능은 job 실행시 executor 개수를 지정하지 않고 적절한 개수의 executor가 실행되게 하는 기능이다. 하둡 클러스터의 가용 리소스 내에서 최대 성능을 낼 수 있으므로 가능한 사용하는 것이 좋다.

2. dynamic allocation 세팅
dynamic allocation 을 사용하기 위해서는 spark-submit 실행시 옵션 추가만으로 안 될 수도 있다. 하둡 클러스터에 필요한 세팅이 안되어 있으면 job 실행 후 executor가 뜨지 않고 진행율 0%가 계속 유지된다. 클러스터의 각 노드마다 세팅을 변경하고 node manager를 재시작 해주어야 한다.
환경: hadoop 2.5.1, spark 1.6.3(prebuilt for hadoop 2.4)

2-1. spark이 설치 된 곳에서 spark-xxx-yarn-shuffle.jar 파일을 찾아서 각 노드에 복사해준다.
hadoop-2.5.1/share/hadoop/yarn 이런 디렉토리에 복사해 놓으면 classpath로 지정되어 있어서 이 jar 파일을 읽을 수 있다.

2-2. 각 노드에서 yarn-site.xml 파일 편집
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>spark_shuffle,mapreduce_shuffle</value>
</property>

<property>
  <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
  <value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>

위와 같이 편집한다.

2-3. 각 노드에서 node manager 재시작
sbin/yarn-daemon.sh stop nodemanager
sbin/yarn-daemon.sh start nodemanager

stop이 잘 안되면 kill -TERM <pid> 로 종료시키면 된다. 클러스터를 아무도 사용하지 않을 때라면 네임노드에서 전체 nodemanger를 한꺼번에 재시작 할 수도 있다. 공용 클러스터라서 중단없이 운영되기를 원한다면 한꺼번에 재시작 대신 반 정도로 나누어서 두번에 걸쳐 nodemanager를 재시작 해주면 될거다.

3. dynamic allocation 사용
spar-submit 에 --conf spark.shuffle.service.enabled=true --conf spark.dynamicAllocation.enabled=true 두 옵션을 추가하면 사용할 수 있다. 그 밖에 상세 옵션들도 필요하면 쓸 수 있고. 커맨드라인 옵션 대신 spark-defaults.conf 에 추가해서 사용할 수도 있다.


참고