2017-07-19 210 views
1

yarn/spark上的我的python應用程序無法識別requirements.txt文件以在工作節點上創建virtualenv,並繼續使用全局環境。任何幫助解決這個將不勝感激。使用virtualenv以紗線/火花集羣模式運行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__ 

從輸出中,我看到,它仍然是進口只是我的全球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

蟒蛇可能有做這件事的最佳方式通過Conda,但一個想法是添加使用壽命utils.py,estimate.py等所有文件包中的行:

SparkContext.addPyFile(「/完全/鉸接/路徑/ file.py」 )

相關問題