2017-06-27 3 views
0

私は、マスターとスレーブのワーカーと一緒にApache Sparkを実行しているDockerコンテナを持っています。ホストマシン上のJupyterノートブックからジョブを送信しようとしています。以下を参照してください:ローカルJupyterノートブックからDockerコンテナのSparkマスタにPySparkジョブを実行するにはどうすればいいですか?

# Init 
!pip install findspark 
import findspark 
findspark.init() 


# Context setup 
from pyspark import SparkConf, SparkContext 
# Docker container is exposing port 7077 
conf = SparkConf().setAppName('test').setMaster('spark://localhost:7077') 
sc = SparkContext(conf=conf) 
sc 

# Execute step 
import random 
num_samples = 1000 
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) 

実行ステップは次のエラーを示しています

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe. 
: org.apache.spark.SparkException: 
    Job aborted due to stage failure: Task 1 in stage 0.0 failed 4 times, most recent failure: Lost task 1.3 in stage 0.0 (TID 6, 172.17.0.2, executor 0): 

    java.io.IOException: Cannot run program "/Users/omar/anaconda3/bin/python": error=2, No such file or directory 

それはそれは指定されたスパークマスターに送信する必要がありますときに、コマンドがローカルスパークジョブを実行しようとしているように私には見えます前の手順でこれはジュピターのノートブックでは不可能ですか?

私のコンテナはhttps://hub.docker.com/r/p7hb/docker-spark/に基づいていますが、/usr/bin/python3.6の下にPython 3.6がインストールされています。

答えて

0

私はSparkContextを作成する前に、次のをしなければならなかった:

import os 
# Path on master/worker where Python is installed 
os.environ['PYSPARK_PYTHON'] = '/usr/bin/python3.6' 

いくつかの研究では、経由して、私は/usr/local/spark/conf/spark-env.shにこれを追加する必要があることを示した:

export PYSPARK_PYTHON='/usr/bin/python3.6' 

しかし、それはないですワーキング。

関連する問題