Jupyter에서 Scala로 Spark 사용하는 방법

​ ​

이 글은 평소에 Jupyter Notebook 에 익숙해져있는 분들께 유용할 듯 합니다. Zeppelin Notebook을 설정하는 방법은 이전 포스팅을 참고하시면 됩니다.

​ ​

Apache Toree

Jupyter-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을 쓸 필요가 있을까요 (시각화가 어마어마한 강점이긴 합니다). Zeppelin도 결국 Jupyter와 같은 플랫폼이 되기를 희망할거라 생각합니다.

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

​ ​

잘 동작하는지 테스트를 해보자

Toree-Kernel

잘 설치되었다면 new 했을 때 Apache-Toree Scala가 보이실 겁니다. 잘 동작하는지 간단한 WordCounter 예제를 실행시켜 보시면 잘 동작하는 것을 확인할 수 있습니다.

Toree-Tuto

​ ​

Docker를 통해 Jupyter 설정하는 방법

나는 이 모든 것이 귀찮다! 라면 Docker를 통해 노트북을 실행시키면 됩니다. 제가 Docker를 통해 Notebook을 사용하지 않는 이유는 딱 한 가지 입니다. Spark만 쓰고 싶었는데 기타 등등이 많이 설치되어 있어서 컨테이너 메모리가 무려 4기가 나 됩니다… 그래도 쓰겠다 싶으신 분들은 아래 링크를 참고하시면 됩니다.

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번 포트로 접속하면 노트북을 실행할 수 있습니다.

​ ​