You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark作业无法读取HDFS中Jar包问题求助

问题根源与解决方案

你遇到的核心问题是spark-submit命令中指定的Jar路径被识别为本地文件系统路径,但你的Jar实际存储在HDFS上,不管是client还是cluster模式,Spark都会尝试从本地加载Jar,自然找不到。

快速解决方案

修正你的spark-submit命令,将Jar路径改为HDFS的完整URL格式(如果已经配置HDFS默认文件系统,也可以简化为hdfs:///spark/wc.jar):

spark-submit --deploy-mode client --master yarn --class com.main.WordCount hdfs://<你的NameNode主机名>:<端口>/spark/wc.jar

比如如果NameNode在hadoop-master,端口是默认的9000,命令就是:

spark-submit --deploy-mode client --master yarn --class com.main.WordCount hdfs://hadoop-master:9000/spark/wc.jar

报错原因详解

Client部署模式报错

Warning: Local jar /spark/wc.jar does not exist, skipping.
java.lang.ClassNotFoundException: com.main.WordCount

当使用client模式时,Spark驱动程序运行在你提交命令的本地机器上,它会尝试从本地文件系统加载/spark/wc.jar。由于这个Jar实际在HDFS上,本地找不到,所以Spark跳过加载这个Jar,自然找不到主类com.main.WordCount。

Cluster部署模式报错

Exception in thread "main" java.io.FileNotFoundException: File file:/spark/wc.jar does not exist

cluster模式下,Spark驱动程序会运行在YARN的Application Master节点上。提交命令时,YARN Client会尝试把你指定的Jar从本地复制到YARN的资源管理目录,但它依然把/spark/wc.jar当成本地路径,而AM所在的节点本地并没有这个文件,因此抛出文件找不到的异常。

额外优化建议

你的代码中手动设置了setMaster("yarn"),其实可以去掉——spark-submit命令行的--master yarn参数会覆盖代码中的配置,这样代码更灵活,适配不同的部署模式。

内容的提问来源于stack exchange,提问作者Kumar Harsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:43:59