Spark集群模式spark-submit报Pyspark File Not Found Exception本地运行正常
解决Spark集群模式下PySpark File Not Found Exception问题
我来帮你排查这个棘手的问题——本地能正常运行但集群模式报错,还排除了权限和Pi示例的问题,咱们从集群模式的核心特性入手分析:
核心原因:集群模式下文件的访问逻辑和本地完全不同
本地模式下,Driver和Executor都在你的机器上,文件路径直接指向本地文件系统;但集群模式下,Driver可能在任意Worker节点启动,所有Worker节点都需要能访问到你的脚本/依赖文件,而Pi.py是Spark自带的示例,集群节点默认就有,所以不受影响。
下面是针对性的解决方案:
1. 确保文件在集群所有节点可访问
- 方案A:上传到分布式文件系统(如HDFS)
把你的脚本和依赖文件上传到HDFS,然后用HDFS路径提交:spark-submit hdfs:///user/your_username/your_script.py - 方案B:用
--files参数分发文件
提交时通过--files把本地文件发送到所有Worker节点的临时目录,代码里用SparkFiles.get()获取路径:
提交命令:
代码中引用:spark-submit --files /local/path/your_script.py your_main_script.pyfrom pyspark import SparkFiles file_path = SparkFiles.get("your_script.py")
2. 重新验证权限问题
你给本地文件夹加了chmod -R 777,但要注意:
- 集群Worker节点的用户(通常是
spark用户)是否能访问你提交机器的本地文件?跨节点的本地文件系统默认是隔离的,权限设置再高也没用。 - 登录到任意Worker节点,手动检查你指定的文件路径是否存在,或者尝试读取该文件,确认权限是否真的在集群节点生效。
3. 检查Spark Submit参数配置
- 如果你的代码依赖多个Python模块,用
--py-files打包成zip文件提交,确保所有依赖都能被Worker节点加载:spark-submit --py-files your_modules.zip your_main_script.py - 集群模式下避免使用相对路径,尽量用绝对的分布式路径或通过
SparkFiles获取路径。
4. 确认Driver节点的文件访问
集群模式下Driver不在你提交命令的本地机器,而是在集群内的节点启动。如果代码里硬编码了本地路径(比如/home/user/xxx.txt),Driver所在节点没有这个文件就会报错,一定要换成分布式存储路径或分发后的路径。
内容的提问来源于stack exchange,提问作者user2873311
相关产品推荐
相关产品推荐

