본문 바로가기

카테고리 없음

[부록] Jupyter ( IPython ) 에서 pyspark 쓸 때 python3 쓰기

지난번에 기본 jupyter 로 까니 pyspark 이 python2 를 물고 실행되고 있었다. 

이제 파이썬 제대로 할거라서... 3로 바꿔서 잘 깔아둬야 겠다.

일단 지난번에 설치를 정상적으로 했다면 아래와 같은 명령어를 치면 내 jupyter notebook 에서 실행 가능한 kernel 이 보일것이다.

$ /app/milab_reco>$ jupyter kernelspec list                                                              
Available kernels:                                                                                                                  
  python2    /{{your_python_path}}/lib/python2.7/site-packages/ipykernel/resources                                                            
  pyspark    {{your_jupyter_path}}/kernels/pyspark 

python3 로 pyspark 을 실행시키는 것은 간단하다. kernel 의 파일만 수정해 주면 되는데 kernel.json 의 내용은 아래와 같다.


kernel.json

{
    "display_name": "pyspark3 (Spark 2.1.0)",
    "language": "python",
    "argv": [
        "{{python 3 path}}/bin/python3",
    ],
    "env": {
        ...
        "PYSPARK_PYTHON" : "{{python 3 path}}/bin/python3"
        ...
    }
}


기존의 pyspark 의 kernel 을 ( 해당 내용을 모르시는 분은 http://ggoals.tistory.com/67 참조 ) 위와 같이 수정하거나 kernel 폴더를 하나 더 생성해서 하면 된다. 

argv 의 값은 kernel 을 실행시킬때 사용할 python 의 path 값이고 PYSPARK_PYTHON 의 값은 spark-submit 시에 driver 노드와 executor 노드에서 실행시킬 python 의 경로이다.


주의점

driver node 와 executor 노드의 PYSPARK_PYTHON 에 적은 python 의 동일 경로에 python3 가 정상적으로 모두 설치 되어 있어야 한다. 필자의 경우 보통 --master yarn --deploy-mode client 로 해서 실행하는데 이렇게 할 경우 driver node ( 지금 말한 yarn client 모드에서는 jupyter 를 띄운 환경이 driver node 가 된다. )와 executor 노드에 위 path 에 spark 이 깔려 있으면 되고, yarn cluster 모드의 경우 주피터를 실행시키는 곳은 상관없고 spark master 노드 ( = driver 노드 ) 와 executor 노드에 깔려 있으면 된다. :)