Yarn集群模式下Spark任务无法导入prophet模块求助
解决Spark Yarn集群模式下找不到prophet模块的问题
出现该错误的核心原因是Yarn集群的Executor节点未安装prophet库——本地运行正常是因为开发环境已配置依赖,但集群节点与本地环境不共享依赖。以下是几种可行的解决办法:
方法1:给所有集群节点安装prophet
直接在Yarn集群的每个Worker节点上安装与本地版本一致的prophet库:
- 先在本地查看当前prophet版本:
pip show prophet - 登录每个Worker节点,执行安装命令(使用pip的情况):
pip install prophet==<你本地的版本号>
若集群使用conda环境,替换为对应的conda安装命令即可。
方法2:提交任务时携带依赖包
如果无法给所有节点手动安装依赖,可将prophet及其依赖打包,在提交任务时传给Executor:
子方法2.1:打包wheel包提交
- 在本地下载prophet及其所有依赖的wheel包:
# 导出本地依赖到requirements.txt pip freeze > requirements.txt # 下载所有依赖到deps目录 pip download -r requirements.txt -d ./deps - 修改spark-submit命令,通过
--py-files参数上传所有wheel包:spark-submit --master yarn --deploy-mode cluster --driver-memory 4g --num-executors 3 --executor-memory 3g --executor-cores 2 --queue default --py-files $(echo ./deps/*.whl | tr ' ' ',') DataPrediction.py
子方法2.2:打包conda环境提交
如果使用conda管理环境,可将整个环境打包后挂载到集群:
- 在本地打包conda环境:
conda pack -n <你的环境名> -o env.tar.gz - 把打包好的
env.tar.gz上传到HDFS:hdfs dfs -put env.tar.gz /path/to/hdfs/ - 修改spark-submit命令,挂载环境并指定Python路径:
spark-submit --master yarn --deploy-mode cluster --driver-memory 4g --num-executors 3 --executor-memory 3g --executor-cores 2 --queue default --archives hdfs:///path/to/hdfs/env.tar.gz#env --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./env/bin/python --conf spark.executorEnv.PYSPARK_PYTHON=./env/bin/python DataPrediction.py
方法3:配置Spark使用指定虚拟环境
将本地包含prophet的虚拟环境打包后上传到HDFS,通过Spark配置让Executor使用该环境的Python解释器,具体操作逻辑与方法2.2一致,核心是通过--conf参数指定Executor的Python路径。
内容的提问来源于stack exchange,提问作者Ajit Sharma
相关产品推荐
相关产品推荐

