zeppelin으로 spark 연동시 주의 사항을 2가지 설명한다.




1. zeppelin과 spark/scala 버전 이슈



zeppelin 0.6.2를 사용하고 있는데, 


https://zeppelin.apache.org/download.html 에 따르면, 


scala 2.11 & spark 2.0 버젼과


scala 2.10 & spark 1.6 버전을 살 수 있다고 한다. 



  • Note: From Zeppelin version 0.6.2, Spark interpreter in binary package is compatible with Spark 2.0 & Scala 2.11 and Spark 1.6(or previous) & Scala 2.10. You can use even different version of Spark at the same time if you set different SPARK_HOME in interpreter setting page.



기본 버전이 아니면, zeppelin에서 아래와 같은 에러가 발생할 수 있다.

예를 들어, Scala 2.11에 Spark 1.6과 같은 버전을 쓰려고 할때. 에러가 발생한다. 



java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object;


java.lang.NoSuchMethodError: scala.runtime.ObjectRef.create(Ljava/lang/Object;)Lscala/runtime/ObjectRef;




이럴 때는 문서에 있는데로, conf/zeppelin-env.sh에 SPARK_HOME=/usr/local/spark 에 추가하면 더 이상 해당 에러는 발생하지 않는다. 






2. zeppelin과 spark cluster 연동하기


zeppelin은 spark master 1대만 동작하도록 설정되어 있다.


spark 슬레이브를 여러 대로 해서(물론 config/slave 수정 필요) ./sbin/start-slave.sh <옵션> 실행해서 클러스터 모드를 만든다. 




참고로 아래와 같은 이슈가 만난다면 버전 이슈이고, 기존 데몬 다 내리고, 디렉토리 몽땅 지워야 한다. (버전 진짜 중요.)


java.lang.RuntimeException: java.io.InvalidClassException: org.apache.spark.rpc.netty.RequestMessage; local class incompatible: stream classdesc serialVersionUID = -5447855329526097695, local class serialVersionUID = -2221986757032131007


memory, cpu의 설정이 정말 중요하다. 노드당 사용할 메모리가 적절히 않으면, master는 대기할 하드웨어 자원이 나타날 때까지 기다린다.




zepelin에서 cluster mode로 설정한다. 


zeppelin의 scala interpreter->master 설정 -> local[*] 


이를 다음처럼 바뀌어야 한다. 


master spark://서버이름:7077


standalone은 간단하지만, mesos 모드거나 얀을 쓴다면 아래를 참고한다.


https://zeppelin.apache.org/docs/0.7.0-SNAPSHOT/install/spark_cluster_mode.html






3. zeppelin 실행 안되는 현상


zeppelin이 실행이 안되면, refresh 한다. 세션이 끊어지거나, zeppelin이 재시작된 경우에는 동작이 되지 않는다.


또는 아래와 같은 에러가 발생하면, zeppelin또는 spark을 재시작한다. 



The currently active SparkContext was created at:


(No active SparkContext.)




그리고, 실행은 되는데, pending이라면, spark 모니터링 서버를 살펴본다. 



http://서버이름:28080/


제대로 slave와 동작하는 지 확인해야 한다. 다양한 원인이 있을 수 있다. spark의 메모리나 CPU 설정 잘못하면, pending 상태로 남겨진다.


zeppelin의 이슈는 아니지만, spark설정을 제대로 해야하는 부분이 존재한다. 




4. 무거운 연산


무거운 연산은 zeppelin을 죽인다. 노트북으로서 좋은데, 진짜 대용량 데이터를 가지고 하기에는 아직은 버겹다..

Posted by '김용환'
,