환경
- spark 1.3.0 버전 기준임.
- hadoop 2.3.0 기준
Standalone vs YARN
deploy 방법에는 Standalone 과 YARN 모드가 있다. MESOS는 안해봐서 패스. YARN으로 복수개의 스파크 잡을 스케쥴링 하거나 동시에 실행할 수 있어 프러덕션환경에서는 YARN이 필수라고 볼 수 있겠고 테스트 용도라면 Standalone이 설정하기 쉽다.
예를 들면, Standalone은 실행중일때 다른 스파크 잡이 들어오면 무시되지만, YARN은 그 잡을 스케쥴링 해서 수행하고 있는 잡이 끝나면 실행해 준다. 스파크 클러스터의 사용자가 많아지고 잡이 많아지면 YARN은 필수 되겠다.
Standalone mode
- master가 될 컴퓨터에 spark 1.3.0 버전을 다운받아서 압축을 푼다
- conf/spark-env.sh 에
SPARK_MASTER_IP
에 master ip 기입SPARK_LOCAL_IP
에 자신의 ip 기입. 이것은 spark-env.sh보다는 환경변수에 해주는 것이 좋다. IP는 노드마다 다를테니까.
- conf/slaves 에 slave ip 혹은 호스트 명을 기입 - 한줄에 하나씩
- spark 폴더 전체를 다른 slave에 복사. 앞서 설명한 bash script를 사용하면 쉽다.
- master에서 .sbin/start-all.sh 실행
- http://
:8080/ 에 접속하면 spark web ui를 볼 수 있다.
YARN
yarn이 편한것은 굳이 spark를 hadoop cluster에 설치하지 않아도 되는 것이다. 그 이유는 yarn에 어플을 submit할때 피룡한 모든 jar를 던져 주기 때문.
해서, spark 다른 버전 여러개를 동시에 yarn 상에서 구동해 볼 수 도 있겠다.
master가 될 컴퓨터에 spark 1.3.0 버전을 다운받아서 압축을 푼다.- spark-submit을 사용할 컴에 스파크를 다운 받아 압축을 풀고
HADOOP_CONF_DIR
환경변수 설정이 작업을 모든 컴에서 반복.- spark-submit 을 불러주면 된다.
spark-shell --master yarn-client
을 실행해서 해보면 잘 동작하는지 확인 할 수 있다.
job submit은 spark-submit --class --master yarn-cluster xxxx.jar
이런식..
spark on EMR
cluster모드로 이용하면 exception이 발생했을때 디버깅이 여러모로 번거로운데 팁을 정리해 본다.
EMR log이용 해서 디버깅
EMR 상에서 spark job을 실행시키면 yarn의 arregation-log option이 default로 꺼져 있는데 그래서 log를 보기가 쉽지가 않다. 하지만, EMR의 하둡은 AWS상으로 로그를 남기는 기능이 있어서 더 쉽게 spark job의 로그를 확인할 수 있다. 단, EMR cluster를 실행할때 LogUri를 걸어주기만 하면 끝이다. 그러면 EMR 4.0 에서는 <bucket_path>/<cluster_id>/container/<application_id>
하위에 spark로그들이 쌓이므로 이것을 확인하면 디버깅이 가능하다.
j-3NJPE2Q3IR2T/containers/application_1450245879642_0002/container_1450245879642_0002_01_000001
위의 예는
단점은, 로그가 s3로 싱크가 되려면 10분정도의 시간이 걸리기 때문에 불편하다. 그래서 아래에서 lynx 를 이용하는 부분을 추가했다.
EMR에서 lynx를 이용해서 디버깅
특정 스파크 잡이 실패하면 보통 아래 처럼 로그가 뜬다. 그러면 아래의 tracking url을 이용해서 shell 기반 브라우져인 lynx를 이용해서 들어가면 로그를 바로 확인할 수 있다. 1.5.0의 경우는 shell에서 lynx http://ip-xxx.us-west-2.compute.internal:20888/proxy/application_1450245879642_0004
들어간후 executors 링크를 타고 들어가 driver의 stderr로그를 보면 대부분 해결된다.
1 | 07:12:27 INFO yarn.Client: |
enabling spark event log
conf/spark-defaults.conf 를 아래처럼.
1 | spark.eventLog.enabled true |
이렇게 하고 spark job을 실행하면 위에서 설정한 hdfs에 spark event log가 쌓이게 된다. 이 이벤트 로그는 spark의 history server를 통해서 볼 수 있다. sbin/start-history-server.sh
를 통해서 실행하면 되는데 그전에 로그 파일들이 어디에 있는지 지정을 해줘야 한다. 그것은 아래와 같은 환경 변수로 할 수 있다.
export SPARK_HISTORY_OPTS=" -Dspark.history.fs.logDirectory=hdfs://xxx/sparklog"
그후 histgory server를 실행하면, 실행한 컴의 http://
history
- 15/8/18 fix wrong info about yarn cluster
- 15/12/15 adding debugging tip on EMR spark