Spark独立和虚拟环境

时间:2018-02-13 23:55:59

标签: apache-spark pyspark

将spark集群配置为spark-standalone,我们正在尝试配置spark-submit作业以利用pipenv管理的虚拟环境。

该项目具有以下结构:

project/
|-- .venv/
   |--bin/python
   |--lib/python3.6/site-packages
|-- src/
   |-- app.py

当前尝试涉及压缩虚拟环境(zip -r site.zip .venv)以包含python可执行文件和所有站点包,并将其传递给执行程序。

目前提供spark-submit命令:

PYSPARK_DRIVER_PYTHON=./.venv/bin/python \ spark-submit --py-files site.zip src/app.py

我们的想法是--py-files参数应该将site.zip解压缩到执行程序的工作目录中,.venv应该使用.venv/bin/python和site-packages进行复制在python路径上。显然不是这种情况,因为我们收到错误:

org.apache.spark.SparkException: Job aborted due to stage failure: 
Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 
0.3 in stage 0.0 (TID 3, [executor-node-uri], executor 0): 
java.io.IOException: Cannot run program "./.venv/bin/python": 
error=2, No such file or directory

我的问题是:我们对--py-files的理解是否正确?我尝试浏览spark源代码,但在它是zip文件的情况下无法跟随--py-files参数的流程。在spark-submit中有很多关于YARN模式和运输conda环境的教程,但在spark独立版上却没有太多内容;这甚至可能吗?

附录::这些是我正在学习的YARN教程: https://henning.kropponline.de/2016/09/17/running-pyspark-with-virtualenv/

http://quasiben.github.io/blog/2016/4/15/conda-spark/

1 个答案:

答案 0 :(得分:0)

-py-files选项不会解压缩您提供的zip文件。 python可以使用zip文件中的软件包的原因是因为python直接支持zip。但是,如果Python二进制文件本身以这种方式打包,那么Spark将无法找到它。

相反,要实现此目的,您应该使用(详细记录的)--archives选项,该选项会将您提供的归档文件解压缩到您指定的目录:

PYSPARK_DRIVER_PYTHON=./.venv/bin/python \
spark-submit \
--archives site.zip#.venv \
src/app.py

怪异的#语法用于指定输出目录documented here

编辑:还有一本关于使用venv-pack来实现here相同功能的教程,尽管您正在做的事情应该已经可以工作。