Jupyter에서 Scala로 Spark 사용하는 방법
📅 March 22, 2017
•⏱️2 min read
이 글은 평소에 Jupyter Notebook 에 익숙해져있는 분들께 유용할 듯 합니다. Zeppelin Notebook을 설정하는 방법은 이전 포스팅을 참고하시면 됩니다.
Apache Toree
Apache Toree 는 Jupyter 커널을 통해 Spark에 접속하도록 해주는 아파치 오픈소스 프로젝트입니다. 기존의 IPython Notebook은 파이썬에 제한되어 있었지만 Jupyter Kernel을 통해 다른 언어까지 확장 가능하도록 바뀌었습니다 (왼쪽 그림 참조).
여기에서 더 나아가 Apache Toree는 Toree Kernel 을 통해 바로 Spark Driver에 연결함으로써, Jupyter에서 Scala 언어로 Spark Driver/Context를 사용할 수 있게 만들었습니다.
Toree가 Zeppelin과 다른 점은 Jupyter protocol 을 사용할 수 있다는 점 입니다. 이미 수많은 생태계가 구축되어 있는 Jupyter에서 Spark가 잘 돌아간다면 굳이 Zeppelin을 쓸 필요가 있을까요 (시각화가 어마어마한 강점이긴 합니다).
GitHub: https://github.com/apache/incubator-toree
Jupyter Notebook에 Toree 설치하기
Jupyter 노트북 커널 설정하는 방법은 Jupyter Notebook 다중커널 설정하기를, Scala와 Spark을 설치하는 방법은 OS X에서 Homebrew로 Spark, Zeppelin 설치하기를 참고하시기 바랍니다.
Toree는 아직 pre 버전만 존재하기 때문에 --pre
옵션을 붙여주시거나 파이썬 패키지를 통해 설치해주시면 됩니다.
설치가 완료되면 jupyter kernel에 toree kernel을 설치해주는 과정이 필요한데 명령어를 통해 이 과정을 자동으로 진행합니다.
$ pip install https://dist.apache.org/repos/dist/dev/incubator/toree/0.2.0/snapshots/dev1/toree-pip/toree-0.2.0.dev1.tar.gz
$ jupyter toree install
혹시 FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/spark/python/lib'
이런 오류가 난다면, Spark 경로 환경변수를 읽지 못하는 문제입니다. Homebrew 를 통해 설치하셨다면 다음과 같이 환경변수를 등록해주시면 됩니다.
$ export SPARK_HOME=/usr/local/Cellar/apache-spark/2.1.0/libexec
잘 동작하는지 테스트를 해보자
잘 설치되었다면 new
했을 때 Apache-Toree Scala
가 보이실 겁니다.
잘 동작하는지 간단한 WordCounter 예제를 실행시켜 보시면 잘 동작하는 것을 확인할 수 있습니다.
Docker를 통해 Jupyter 설정하는 방법
나는 이 모든 것이 귀찮다! 라면 Docker를 통해 노트북을 실행키는 방법이 있습니다.
https://hub.docker.com/r/jupyter/all-spark-notebook/
$ docker pull jupyter/all-spark-notebook
$ docker run -it --rm -p 8888:8888 jupyter/all-spark-notebook
실행 후 8888번 포트로 접속하면 노트북을 실행할 수 있습니다.