2017-12-15 3 views
6

Jupyter Notebook과 Anaconda에서 Spark를 작동 시키려고 며칠을 보냈습니다. Jupyter Notebook과 Anaconda에서 작동하도록 Spark 구성

PATH="/my/path/to/anaconda3/bin:$PATH" 

export JAVA_HOME="/my/path/to/jdk" 
export PYTHON_PATH="/my/path/to/anaconda3/bin/python" 
export PYSPARK_PYTHON="/my/path/to/anaconda3/bin/python" 

export PATH=$PATH:/my/path/to/spark-2.1.0-bin-hadoop2.7/bin 
export PYSPARK_DRIVER_PYTHON=jupyter 
export PYSPARK_DRIVER_PYTHON_OPTS="notebook" pyspark 
export SPARK_HOME=/my/path/to/spark-2.1.0-bin-hadoop2.7 
alias pyspark="pyspark --conf spark.local.dir=/home/puifais --num-executors 30 --driver-memory 128g --executor-memory 6g --packages com.databricks:spark-csv_2.11:1.5.0" 

내가 /my/path/to/spark-2.1.0-bin-hadoop2.7/bin/spark-shell을 입력

, 내 명령 행 쉘에서 잘 스파크를 시작할 수 있습니다 : 여기처럼 내 .bash_profile에 보이는거야. 그리고 출력 sc은 비어 있지 않습니다. 잘 작동하는 것 같습니다.

pyspark을 입력하면 내 Jupyter 노트북을 정상적으로 시작합니다. 나는 새로운 Python3 노트북을 만들 때이 오류가 나타납니다 내 Jupyter 노트북에서

[IPKernelApp] WARNING | Unknown error in handling PYTHONSTARTUP file /my/path/to/spark-2.1.0-bin-hadoop2.7/python/pyspark/shell.py: 

그리고 sc가 비어 있습니다.

아무도이 상황을 해결할 수 있습니까?


오류를 끝내려면 콜론 뒤에 아무 것도 없습니다. 나는이 post를 사용하여 내 자신의 시작 파일을 만들려고하고 당신이 거기 찾아 갈 필요가 없습니다 그래서 내가 여기에 인용 : 다음과 같이

내가 짧은 초기화 스크립트를 init_spark.py 생성 :

내가 이런 짓을 할 때 오류가 다음되었다

from pyspark import SparkConf, SparkContext 
conf = SparkConf().setMaster("yarn-client") 
sc = SparkContext(conf = conf) 

는와 ~/.ipython/profile_default/시작/디렉토리에 배치 :

[IPKernelApp] WARNING | Unknown error in handling PYTHONSTARTUP file /my/path/to/spark-2.1.0-bin-hadoop2.7/python/pyspark/shell.py: 
[IPKernelApp] WARNING | Unknown error in handling startup files: 
+0

경고 텍스트의 나머지 부분은 무엇으로 PI를 계산하려고 새로운 Python3 노트북을 만들? 그 줄 끝에 콜론이 있습니다. 그 뒤에 오는 것이 있습니까? – darthbith

+0

아니요! 그것은 비어 있습니다. 쉼표 뒤에 아무 것도 없습니다. – puifais

+0

'alias' 줄을 삭제하거나 그 중 일부 옵션을 삭제하면 어떨까요? 오류가 변경됩니까? – darthbith

답변

2

CONDA가 제대로 도움을 많이 관리 할 수 ​​있습니다 : 예를 들어, 우리가 여전히 CSV 파일을 읽기 위해 외부 스파크 CSV 패키지를 사용했다 스파크 1.6.0, 내 각각의 커널 파일의 마지막 줄입니다 종속성의 ...

스파크를 설치하십시오./opt/spark에 spark이 설치되었다고 가정하면 ~ /.bashrc에 :

export SPARK_HOME=/opt/spark 
export PATH=$SPARK_HOME/bin:$PATH 

는 스파크에서 떨어져 필요한 모든 종속성에 CONDA 환경을 만들기 :

$ jupyter notebook 
:

conda create -n findspark-jupyter-openjdk8-py3 -c conda-forge python=3.5 jupyter=1.0 notebook=5.0 openjdk=8.0.144 findspark=1.1.0 

환경

$ source activate findspark-jupyter-openjdk8-py3 

시작 Jupyter 노트북 서버를 활성화

브라우저에서

이 (this에서 차용) 다음 스크립트

import findspark 
findspark.init() 
import pyspark 
import random 
sc = pyspark.SparkContext(appName="Pi") 
num_samples = 100000000 
def inside(p):  
    x, y = random.random(), random.random() 
    return x*x + y*y < 1 
count = sc.parallelize(range(0, num_samples)).filter(inside).count() 
pi = 4 * count/num_samples 
print(pi) 
sc.stop() 
11

글쎄, 정말 PYSPARK_DRIVER_PYTHON=jupyter 설정과 같은 방법 엉터리 해킹을보고 나에게 고통을 준다, 그들은 분명히 같은 추악한 결과로 이어질는 사실에도 불구하고, "솔루션"에 승진 및 표준 관행이 될 지금 경향이있다 pyspark을 입력하고 PySpark 셸 대신 Jupyter 노트북을 작성하고, try to use spark-submit with the above settings과 같이 다운 스트림에 숨어있는 아직 눈에 보이지 않는 문제가 생겨서 ...

(오해하지 마십시오. 잘못하지 마십시오. 나는 너를 비난하지 않는다. 나는이 "해결책"이 제시되고 받아 들여지고 upvoted ...이었던 곳에서 수십개의 게시물을 여기에서 보았다.

다른 언어 (여기 PySpark)를 사용하기 위해 Jupyter 노트북을 사용자 정의하는 유일한 방법은 Jupyter kernels입니다.

가장 먼저 할 일은 jupyter kernelspec list 명령을 실행하여 컴퓨터에서 이미 사용 가능한 커널 목록을 얻는 것입니다. 여기 내 경우에는 결과 (우분투)입니다 :

$ jupyter kernelspec list 
Available kernels: 
    python2  /usr/lib/python2.7/site-packages/ipykernel/resources 
    caffe   /usr/local/share/jupyter/kernels/caffe 
    ir   /usr/local/share/jupyter/kernels/ir 
    pyspark  /usr/local/share/jupyter/kernels/pyspark 
    pyspark2  /usr/local/share/jupyter/kernels/pyspark2 
    tensorflow /usr/local/share/jupyter/kernels/tensorflow 

첫 번째 커널, python2은 IPython와 함께 오는 "기본"입니다 (이것은에있는 단 하나 개의 존재의 좋은 기회가 당신의 체계); 나머지는 Python 커널 2 개 (caffe & tensorflow), R (ir) 1 개, Spark 1.6 및 Spark 2.0 용 PySpark 커널 2 개가 각각 있습니다.

위 목록의 항목은 디렉토리이며 각 항목에는 kernel.json이라는 하나의 단일 파일이 있습니다.

{ 
"display_name": "PySpark (Spark 2.0)", 
"language": "python", 
"argv": [ 
    "/opt/intel/intelpython27/bin/python2", 
    "-m", 
    "ipykernel", 
    "-f", 
    "{connection_file}" 
], 
"env": { 
    "SPARK_HOME": "/home/ctsats/spark-2.0.0-bin-hadoop2.6", 
    "PYTHONPATH": "/home/ctsats/spark-2.0.0-bin-hadoop2.6/python:/home/ctsats/spark-2.0.0-bin-hadoop2.6/python/lib/py4j-0.10.1-src.zip", 
    "PYTHONSTARTUP": "/home/ctsats/spark-2.0.0-bin-hadoop2.6/python/pyspark/shell.py", 
    "PYSPARK_PYTHON": "/opt/intel/intelpython27/bin/python2" 
} 
} 

가 나는 등 /my/path/to 내 세부 사항을 변경 귀찮게하지 않은, 당신은 우리의 경우 약간의 차이 (I 인텔 파이썬을 사용하여이 있다는 것을 볼 이미 수의 내 pyspark2 커널이 파일의 내용을 살펴 보자 2.7, Anaconda Python 3이 아님).하지만 잘하면 (BBW, connection_file에 대해 걱정하지 마십시오. 하나도 사용하지 않습니다.)

위의 커널에 필요한 변경 사항 (경로 만)을 수동으로 수행하고 .../jupyter/kernels 디렉토리의 새 하위 폴더에 저장하는 것이 가장 쉬운 방법입니다 (그런 식으로 실행하면 표시되어야 함). 다시 jupyter kernelspec list 명령). 수정할 수있는 좋은 방법이 아니다, 그러나

:이 방법은 또한 해킹 생각한다면, 글쎄, 난 당신과 동의,하지만 Jupyter documentation (12 페이지)에서 권장 하나입니다 커널 스펙. 한 가지 방법은 을 사용하여 kernel.json 파일을 찾은 다음 수정합니다. kernels/python3/kernel.json, 손으로.

이미 .../jupyter/kernels 폴더가없는 경우, 당신은 여전히 ​​jupyter kernelspec install을 사용하여 새 커널을 설치할 수 있습니다 - 그것을 시도하지 않은,하지만 this SO answer를 보라.

마지막으로, 배쉬 프로파일에서 모든 PySpark 관련 환경 변수를 제거하는 것을 잊지 마십시오 (단 SPARK_HOME 만 남겨 두어야 함). 그리고 그 확인, 당신은 pyspark를 입력 할 때, 당신은 ... Jupyter 노트북과 그것이 있어야 같은 PySpark 껍질로 자신을 발견, 그리고

UPDATE (주석 후) : 당신은 - 명령 전달하려는 경우 PyFark에 라인 인자를 넣으려면 env 아래에 PYSPARK_SUBMIT_ARGS 설정을 추가해야합니다.

"PYSPARK_SUBMIT_ARGS": "--master local --packages com.databricks:spark-csv_2.10:1.4.0 pyspark-shell" 
+1

이 모든 것을 "더 쉽게"만들 수있는 옵션 중 하나는 Apache Toree 프로젝트 –

+0

@ cricket_007을 사용하는 것이므로 실제로들은 적이 있지만 지금까지 시도하지 않은 시간입니다. – desertnaut

+0

@desertnaut 필자는'''Saprk 2.2.1'''과''Python 3.6''으로 pyspark 커널을 설정하고 예제를 따라갔습니다. 터미널에서 jupyter 노트북을 시작할 때 pyspark 커널을 지정하는 방법을 알려주시겠습니까 –

관련 문제