Spark-Submit使用Venv打包环境运行报错:找不到Python程序及模块缺失
解决Spark集群中使用venv-pack打包环境时PYSPARK_PYTHON路径错误的问题
问题回顾
使用bitnami/spark镜像搭建的Spark集群,通过venv-pack打包了包含fuzzy-c-means库的Python 3.7虚拟环境,执行spark-submit时遇到两个问题:
- 设置
PYSPARK_PYTHON=./environment/bin/python时,报错Cannot run program "./environment/bin/python": error=2, No such file or directory - 移除
PYSPARK_PYTHON设置后,代码能运行但提示找不到fcmeans模块
解决方案
1. 重新打包可重定位的虚拟环境
venv-pack默认打包的虚拟环境包含绝对路径依赖,在不同镜像/环境中运行时会出现路径不匹配问题。重新打包时添加--relocatable参数,让虚拟环境支持路径重定位:
venv-pack --relocatable -o environment.tar.gz
2. 修改Spark提交命令,正确指定Python路径
使用Spark配置参数明确指定driver和executor使用的Python路径,替代直接设置系统环境变量:
spark-submit \ --archives ./environment.tar.gz#environment \ --conf spark.pyspark.python=./environment/bin/python \ --conf spark.pyspark.driver.python=./environment/bin/python \ ./app.py
3. 验证集群节点依赖(可选)
如果仍出现执行错误,检查bitnami/spark镜像是否安装了Python 3.7所需的系统依赖库(如libpython3.7),可通过在镜像中执行以下命令安装:
apt-get update && apt-get install -y libpython3.7
原因说明
- 未添加
--relocatable参数打包的虚拟环境,其内部Python二进制文件和库路径为打包环境的绝对路径,在Spark集群节点(bitnami/spark镜像)中无法匹配,导致路径找不到错误。 - 不设置
PYSPARK_PYTHON时,Spark使用集群默认的Python环境,该环境未安装fuzzy-c-means库,因此出现模块缺失错误。
内容的提问来源于stack exchange,提问作者Hiago Reis
相关产品推荐
相关产品推荐

