2017-07-19 12 views
1

私のpython app on yarn/sparkはrequirements.txtファイルを認識せず、ワーカーノードにvirtualenvを作成し、引き続きグローバル環境を使用します。これを解決するための助けがあれば大いに感謝します。virtualenvを使用して糸/ sparkクラスタモードでPythonを実行

スパークバージョン:

/usr/bin/spark-submit --master yarn --deploy-mode client --conf spark.pyspark.virtualenv.enabled=true --conf spark.pyspark.virtualenv.type=native --conf spark.pyspark.virtualenv.requirements=/mnt/py_env/requirements-test.txt --conf spark.pyspark.virtualenv.bin.path=/mnt/anaconda2/bin/virtualenv --conf spark.pyspark.python=/mnt/py_env/test/bin/python /home/hadoop/python/spark_virtualenv.py 

私の要件-test.txtというファイル:

2.0.1

は私がノードに再作成する仮想環境内からpip freeze > requirements-test.txtを実行した後、スクリプトを提出します

dill==0.2.7.1 
Lifetimes==0.8.0.0 
numpy==1.13.1 
pandas==0.20.3 
python-dateutil==2.6.1 
pytz==2017.2 
scipy==0.19.1 
six==1.10.0 

マイ/home/hadoop/python/spark_virtualenv.py

from pyspark import SparkContext 
#import lifetimes 
if __name__ == "__main__": 
    sc = SparkContext(appName="Simple App") 
    import numpy as np 
    sc.parallelize(range(1,10)).map(lambda x : np.__version__).collect() 
    print "//////////// works! //////////" 
    #print lifetimes.__version__ 
    print np.__file__ 

出力から、私はそれはまだ仮想環境内の1つだけ私のグローバルnumpyのパッケージをインポートしていないことを参照してください。

//////////// works! ////////// 
/mnt/anaconda2/lib/python2.7/site-packages/numpy/__init__.pyc 

PS:私はanaconda2私クラスタ

のすべてのノードにインストールされています

もう一つのポイントは:私のオプションは--deploy-mode clusterに変更された火花が、提出した場合、出力は異なります。

//////////// works! ////////// 
/usr/local/lib64/python2.7/site-packages/numpy/__init__.pyc 

答えて

0

アナコンダはそれを行うための好ましい方法があるかもしれませんコンバを介して、しかし、考えて1つの考え方utils.py、estimated.py、などの行にパッケージのすべてのファイルを追加することです:

SparkContext.addPyFile( "/完全/関節/パス/ file.py" )

関連する問題