PySpark运行报No such file or directory及TaskSetManager错误排查
核心异常信息:
java.io.IOException: Cannot run program "/home/anaconda3/bin/python3": error=2, No such file or directory异常触发后日志依次输出TaskSetManager错误、stage 0.0任务重试1次后作业中止、最终抛出Py4JJavaError提示调用
showString方法失败。
报错截图:
问题根因
日志中所有任务失败、Java网关报错均为上层连锁异常,核心触发原因是PySpark执行进程无法加载到指定路径的Python解释器,常见触发场景包括:
- PySpark配置中硬编码的Python路径
/home/anaconda3/bin/python3与Anaconda实际安装路径不匹配:比如Anaconda安装在个人用户目录下(如/home/xxx/anaconda3)、重装Anaconda后路径变更但未同步更新Spark配置,都会导致路径不存在。 - 集群模式下仅Driver节点安装了Anaconda环境,Worker节点无对应路径的Python解释器,Executor启动执行任务时调用Python直接触发IO异常。
- 目标路径下的
python3为失效软链接,指向已被删除的旧版本环境文件。
修复方案
- 确认可用Python解释器的真实绝对路径
终端执行以下命令,若使用conda虚拟环境需先激活对应环境再执行:
拿到路径后执行which python3ls 输出的路径,确认文件真实存在、可正常执行,排除软链接失效问题。 - 为PySpark指定正确的Python解释器路径
- 临时生效(单脚本、notebook交互式场景):在初始化SparkSession前添加环境变量配置,示例:
import os # 替换为上一步查到的真实Python路径 os.environ["PYSPARK_PYTHON"] = "/your/real/python3/path" os.environ["PYSPARK_DRIVER_PYTHON"] = "/your/real/python3/path" from pyspark.sql import SparkSession spark = SparkSession.builder.master("local[*]").appName("test").getOrCreate() - 永久生效:找到Spark配置目录下的
spark-env.sh文件(无该文件则从同目录的spark-env.sh.template模板复制生成),添加如下两行配置,集群场景下所有节点需同步修改保持路径一致:export PYSPARK_PYTHON=/your/real/python3/path export PYSPARK_DRIVER_PYTHON=/your/real/python3/path
- 临时生效(单脚本、notebook交互式场景):在初始化SparkSession前添加环境变量配置,示例:
- 集群场景额外注意:所有Worker节点必须在配置指定的同路径下存在可执行的Python解释器;如果无法统一全节点安装路径,可使用conda-pack打包已配置好的conda环境,分发到所有Worker节点后指定解压后的Python路径即可。
- 配置完成后重启PySpark任务,重新执行
df.show()即可正常运行,根因修复后所有连锁的任务失败、Py4J异常都会自动消除。
内容的提问来源于stack exchange,提问作者QDex
相关产品推荐
相关产品推荐


