我在yarn / spark上的python应用程序无法识别requirements.txt文件,无法在工作节点上创建virtualenv,并继续使用全局环境。任何帮助解决这个问题将非常感激。
Spark版本:2.0.1
在我想要在节点上重新创建的虚拟环境中运行pip freeze > requirements-test.txt
后提交脚本:
/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文件:
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
另一点:如果我的spark-submit选项更改为--deploy-mode cluster
,则输出结果不同:
//////////// works! //////////
/usr/local/lib64/python2.7/site-packages/numpy/__init__.pyc
答案 0 :(得分:0)
Anaconda可能有一种通过Conda这样做的首选方式,但有一种想法是使用以下行添加生命周期utils.py,estimate.py等所有文件:
SparkContext.addPyFile( “/完全/铰接/路径/ file.py”)