【问题标题】:Running python in yarn/spark cluster mode using virtualenv使用 virtualenv 在 yarn/spark 集群模式下运行 python
【发布时间】:2017-08-09 02:33:53
【问题描述】:

我在 yarn/spark 上的 python 应用程序无法识别在工作节点上创建 virtualenv 的 requirements.txt 文件,并继续使用全局环境。任何解决此问题的帮助将不胜感激。

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

我的 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

还有一点:如果我的 spark-submit 选项更改为 --deploy-mode cluster,那么输出会有所不同:

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

【问题讨论】:

    标签: apache-spark pyspark virtualenv hadoop-yarn


    【解决方案1】:

    Anaconda 可能有一种通过 Conda 执行此操作的首选方式,但一种想法是添加生命周期 utils.py、estimate.py 等,并使用以下行从包中的所有文件中添加:

    SparkContext.addPyFile("/fully/articulated/path/file.py")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多