zeppelin 과 spark 연동

scala 2016. 10. 28. 14:32

IPython(노트북)과 R Studio의 큰 장점을 알기 때문에 Spark과 zeppelin을 연동했다


* Hive 연동 완료

http://knight76.tistory.com/entry/apache-zepplin-062-%EC%84%A4%EC%B9%98-hive-R-%EC%97%B0%EB%8F%99




Legacy Spark 연동할 수 있도록 수정한다. 제플린의 용도는 이문수님이 Spark 써밋에서 발표한 내용을 참고한다.





데몬을 실행하면, 2개의 데몬이 실행됨을 볼 수 있다. 하나는 zeppelin 이고, 하나는 spark 이다. 따라서 간단한 spark 코드를 실행할 수 있다. 기본 내장이다. 


$ ./bin/zeppelin-daemon.sh start 


 /usr/java/default/bin/java..... org.apache.zeppelin.server.ZeppelinServer

/usr/java/default/bin/java -cp ... /usr/local/zeppelin/interpreter/spark/zeppelin-spark_2.11-0.6.2.jar 







Legacy Hadoop과 연동할 수 있도록 Spark 를 구성한다. 


현재 zepplelin은 cpu 코어를 min, max 이렇게 사용하는 구조가 아니기 때문에(dedicate),  따로 zeppelin용 spark을 구성했다. (1대의 Driver와 4대의 executor를 설치) spark에서 hadoop에 접근할 수 있도록 hadoop 설정 정보를 포함시킨다. 


dirver의 8080 페이지로 접속해서 정상적으로 동작하는지 확인한다. 



 1.6.2 Spark Master at spark://master:7077



이제 zeppelin만 잘 설정하면 된다. 참고로 zeppelin의 conf/zeppelin-site.xml에 보면, spark 인터프리터가 존재한다.


<property>

  <name>zeppelin.interpreters</name>

  <value>org.apache.zeppelin.spark.SparkInterpreter,org.apache.zeppelin.spark.PySparkInterpreter,org.apache.zeppelin.rinterpreter.RRepl,org.apache.zeppelin.rinterpreter.KnitR,org.apache.zeppelin.spark.SparkRInterpreter,org.apache.zeppelin.spark.SparkSqlInterpreter,org.apache.zeppelin.spark.DepInterpreter,org.apache.zeppelin.markdown.Markdown,org.apache.zeppelin.angular.AngularInterpreter,org.apache.zeppelin.shell.ShellInterpreter,org.apache.zeppelin.file.HDFSFileInterpreter,org.apache.zeppelin.flink.FlinkInterpreter,,org.apache.zeppelin.python.PythonInterpreter,org.apache.zeppelin.lens.LensInterpreter,org.apache.zeppelin.ignite.IgniteInterpreter,org.apache.zeppelin.ignite.IgniteSqlInterpreter,org.apache.zeppelin.cassandra.CassandraInterpreter,org.apache.zeppelin.geode.GeodeOqlInterpreter,org.apache.zeppelin.postgresql.PostgreSqlInterpreter,org.apache.zeppelin.jdbc.JDBCInterpreter,org.apache.zeppelin.kylin.KylinInterpreter,org.apache.zeppelin.elasticsearch.ElasticsearchInterpreter,org.apache.zeppelin.scalding.ScaldingInterpreter,org.apache.zeppelin.alluxio.AlluxioInterpreter,org.apache.zeppelin.hbase.HbaseInterpreter,org.apache.zeppelin.livy.LivySparkInterpreter,org.apache.zeppelin.livy.LivyPySparkInterpreter,org.apache.zeppelin.livy.LivySparkRInterpreter,org.apache.zeppelin.livy.LivySparkSQLInterpreter,org.apache.zeppelin.bigquery.BigQueryInterpreter</value>

  <description>Comma separated interpreter configurations. First interpreter become a default</description>

</property>

..




conf/interpeter.json에서 spark.cores.max와 spark.executor.memory 잘 설정한다. 그냥 두면 기본 값을 사용하니. 병목이 발생할 수 있다. 관련 내용은 https://zeppelin.apache.org/docs/latest/interpreter/spark.html에 있으니 참조한다.



      "id": "2C1FUYTWJ",

      "name": "spark",

      "group": "spark",

      "properties": {

        "spark.executor.memory": "",

        "args": "",

        "zeppelin.spark.printREPLOutput": "true",

        "spark.cores.max": "32",




bin/common.sh에서 일부 수정해서 메모리 이슈가 없도록 수정한다. 


if [[ -z "${ZEPPELIN_MEM}" ]]; then

  export ZEPPELIN_MEM="-Xms3024m -Xmx5024m -XX:MaxPermSize=512m"

fi


if [[ -z "${ZEPPELIN_INTP_MEM}" ]]; then

  export ZEPPELIN_INTP_MEM="-Xms3024m -Xmx5024m -XX:MaxPermSize=512m"

fi




배시 환경에 따라 .bashrc에 다음을 추가한다.


export http_proxy=

export SPARK_HOME=





마지막으로 재시작한다. 


$ ./bin/zeppelin-daemon.sh restart 




노트 하나를 만들어 spark 코드가 잘 동작되는지 확인한다.


val textFile = sc.textFile("hdfs:///google/log/2016/10/23/00/*")
val count = textFile.count();
println(count)





노트북 관련 좋은 데모를 소개한다.


https://github.com/uosdmlab/playdata-zeppelin-notebook

Posted by '김용환'
,