Kon*_*ell 5 apache-spark pyspark
将 Spark 集群配置为 Spark-standalone 后,我们尝试配置 Spark-Submit 作业以利用 Pipenv 管理的虚拟环境。
该项目具有以下结构:
project/
|-- .venv/
|--bin/python
|--lib/python3.6/site-packages
|-- src/
|-- app.py
Run Code Online (Sandbox Code Playgroud)
当前的尝试涉及压缩虚拟环境 ( 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 路径上可用的 site-packages 进行重现。显然情况并非如此,因为我们收到了错误:
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
Run Code Online (Sandbox Code Playgroud)
我的问题是:我们的理解--py-files
正确吗?我尝试浏览spark源代码,但无法遵循--py-files
我尝试浏览 Spark 源代码,但在它是 zip 文件的情况下有很多关于 YARN 模式和 Spark-Submit 中的 Conda 环境的教程,但关于 Spark Standalone 的教程不多;这可能吗?
附录::这些是我学习的 YARN 教程: https://henning.kropponline.de/2016/09/17/running-pyspark-with-virtualenv/
--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
Run Code Online (Sandbox Code Playgroud)
相当奇怪的#
语法用于指定输出目录,记录在此处。
编辑:这里还有一个关于使用venv-pack
来实现相同功能的教程,尽管您正在做的事情应该已经可以工作了。
归档时间: |
|
查看次数: |
2316 次 |
最近记录: |