apache-spark - Spark 独立和虚拟环境

标签 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 转载和 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源代码,但是跟不上--py-files的流程在它是 zip 文件的情况下的参数。 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/

最佳答案

--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虽然你正在做的事情应该已经奏效了。

关于apache-spark - Spark 独立和虚拟环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48777592/

相关文章:

java - 较新依赖项中的 Maven 不同包名

python - 在 Spark 数据集上应用函数

scala - 如何将未编译的 Spark Scala/spark-shell 代码作为 Dataproc 作业运行?

python - PySpark 2.4.5 : IllegalArgumentException when using PandasUDF

python - 属性错误 : 'RDD' object has no attribute 'show'

apache-spark - Spark数据框添加新列问题 - 结构化流

apache-spark - Spark中未捕获的异常处理

apache-spark - Apache Spark : impact of repartitioning, 对连接进行排序和缓存

python - 如何在AWS-Glue脚本中编写用户定义函数?

python - 是否有任何功能可以定位 PySpark 数据框列中的所有事件?