카테고리 없음

Zeppelin Spark interpreter - yarn client / cluster 모드 실행, pyspark추가

케키키케 2024. 11. 5. 20:52

Spark interpreter 설정

 

 

1. spark-interpreter.jar 가 잘 있는지 확인하자

${ZEPPELIN_HOME}/interpreter/spark/ 하위에 spark-interpreter-0.11.1.jar가 있어야 한다.

ls -al로 조회해보면 사이즈가 0일 수 있다.

껍데기만 있을 수도 있으니 꼭 확인할 것!

 

 

2. Spark interpreter 설정

${ZEPPELIN_HOME}/conf/interpreter.json을 연다.

spark 설정에서 아래 세가지 설정을 해준다.

- SPARK_HOME : 스파크 경로 지정(로컬에 이미 구성되어 있어야 함)

- spark.master : yarn

- spark.sumit.deployMode : client 혹은 cluster 입력

 

* Client VS Cluster

- Client : Spark Driver가 Local에 실행되며, 실제 작업은 Yarn container에서 실행됨.

Spark Driver는 main() 메소드가 실행되는 프로세스이며, Client 장비에서 디버깅이 쉽지만 Cluster와 Network연결이 끊어지는 경우 작업이 실패할 수 있다.

- Cluster : Yarn container 에서 실행. Driver가 죽어도 다른 Yarn container에서 실행될 수 있기 때문에 프로덕션 환경에서 많이 사용한다.

 

interpreter 설정은 config를 직접 열어 수정해도 되고, Zeppelin UI에서도 설정이 가능하다. 

설정 후 꼭 restart 해주기~

 

3. Cluster 모드 실행 이슈

Cluster 모드로 실행하는 경우, 아래와 같이 오류가 발생했다.

Caused by : java.io.IOException: Fail to launch interpreter process ...

interpreter process가 로컬에 제대로 실행되지 않았다.

yarn applciation이 실행되려다가 바로 죽어버렸다. yarn node에 접속해서 yarn log를 보니 unRegister interpreter라고 나온다.

interpreter process가 제대로 실행되지 못하여 yarn application 작업이 실행되지 못한 것으로 예상되었다.

그리고 Zeppelin log에서 Process is launched: ~하고 나오는 interpterter launch command를 보면 엉뚱한 IP가 찍혀있었다. 

어디에도 해답이 나오지 않았다. 스스로 찾는 수 밖에..

일단 로컬 IP에서 interpreter process가 뜨게 해보자는 마음으로 설정을 뒤져보다가, zeppelin-env.shZEPPELIN_LOCAL_IP 설정이 있었다.

기본적으로는 지정되지 않으며, 지정하지 않는 경우 thrift server ip가 랜덤하게 할당된다고 한다. 이 IP를 local IP로 변경해주니 local에 inpreter process가 잠깐 떴다가 yarn application이 실행되고 process가 종료되는 것으로 확인했다.

 

4. Interpreter 실행 시간 

zeppelin-site.xml 에 설정

 

zeppelin.interpreter.lifecyclemanager.timeout.threshold 

1h

 

 

 

5. spark interpreter pyspark 추가

interpreter 설정 - spark - PYSPARK_PYTHON과 PYSPARK_DRIVER_PYTHON을 아래와 같이 설정한다.

/usr/bin/python3

 

만약 python이 없다면 

1. 설치 : sudo apt install python3

2. 설치 후 버전 확인 : python3 --version

3. 위치 확인 : which python

3에서 나온 경로를 위 설정에 입력하면 됨