PySpark无法识别Python环境路径,请求解决文件不存在错误
解决PySpark提交任务时找不到打包Python环境路径的问题
问题场景
按照Spark官方文档打包Python环境并上传至HDFS,提交任务时通过--archives参数指定环境包,但任务执行时提示无法找到/opt/miniconda3/envs/ei/bin/python3路径,报错No such file or directory。
核心原因
使用--archives hdfs:///.../ei.tar.gz#miniconda3参数时,Spark会将压缩包解压至executor节点的当前工作目录下的miniconda3文件夹,而非系统的/opt目录。原配置中指定的绝对路径/opt/miniconda3/envs/ei/bin/python3在executor节点上不存在,导致报错。
解决方案
1. 修改Python环境路径为相对路径
调整spark.pyspark.python配置,指向解压后的相对路径:
- 在
run_job.sh中,将spark.pyspark.python的配置改为./miniconda3/envs/ei/bin/python3(或使用Spark占位符{miniconda3}/envs/ei/bin/python3) - client模式下,driver运行在本地机器,
spark.pyspark.driver.python可保留本地已有的环境路径(如/opt/miniconda3/envs/ei/bin/python3)
修改后的run_job.sh关键部分:
spark3-submit -v \ --master yarn \ --deploy-mode client \ # ...其他配置项... --conf spark.pyspark.python=./miniconda3/envs/ei/bin/python3 \ --conf spark.pyspark.driver.python=/opt/miniconda3/envs/ei/bin/python3 \ --archives hdfs:///user/svc-edl_ei_dld/outfront/pythonLibraries/ei.tar.gz#miniconda3 \ # ...其他参数...
2. 验证环境包的目录结构
确保打包的ei.tar.gz解压后,内部路径为miniconda3/envs/ei/bin/python3:
- 打包时需进入
/opt目录执行命令:tar -czf ei.tar.gz miniconda3,避免压缩包内出现多余的opt层级
3. 同步调整job.sh中的环境变量
若driver端也需要使用打包的环境(例如cluster模式),需修改job.sh中的PYSPARK_PYTHON:
export PYSPARK_PYTHON=./miniconda3/envs/ei/bin/python3 export PYSPARK_DRIVER_PYTHON=/opt/miniconda3/envs/ei/bin/python3 # client模式保留本地路径
内容的提问来源于stack exchange,提问作者Suhas Nayak
相关产品推荐
相关产品推荐

