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

JDK11+Spark3.2.1执行spark-submit找不到主类报错

Spark3.2.1 + JDK11 环境下Could not find or load main class org.apache.spark.launcher.Main报错根因

这个报错和你在Maven中添加spark-launcher依赖的操作没有关联:spark-submit启动时优先加载Spark安装目录自带的launcher组件,业务jar中打入的对应依赖不会在启动阶段被加载。你确认jars目录下存在对应jar包仍触发报错,常见原因如下:

  • SPARK_HOME环境变量配置错误。spark-submit脚本启动时固定读取$SPARK_HOME/jars/*作为启动类路径,如果你在容器Dockerfile中配置的SPARK_HOME路径和Spark二进制包实际存放路径不一致,比如Spark解压在/opt/spark-3.2.1-bin-hadoop3.2但SPARK_HOME写为/opt/spark且未做软链接,脚本会到不存在的路径下扫描依赖,自然无法加载主类。
  • Spark目录权限配置错误。如果构建镜像时将Spark目录属主设为root,却用普通用户执行spark-submit,且jars目录未开启全局读权限,类加载器就无法读取目录下的jar包。这种场景下用root用户进入容器能看到jar包存在,但实际运行任务的用户没有文件访问权限。排查时直接切到运行spark-submit的用户,执行ls $SPARK_HOME/jars/spark-launcher*,如果报权限不足即可确认问题。
  • 构建镜像时意外覆盖Spark原生依赖。如果将Maven打出的业务fat jar直接拷贝到$SPARK_HOME/jars目录下,且业务jar中包含org.apache.spark.launcher包下的类文件,类加载时可能优先加载业务jar内的不匹配launcher类:Spark3.2.1默认用Scala2.12编译,如果你引入的spark-launcher是Scala2.13版本、或者和3.2.1小版本不匹配,就会触发类加载失败。
  • 自定义JRE11裁剪缺失依赖。如果构建镜像时用jlink生成了裁剪版JRE11,漏加java.logging、java.naming等Spark启动必需的JDK模块,会导致launcher主类加载过程中因依赖缺失抛出错误,容易被误判为主类本身不存在。可以用全量JDK11基础镜像做对照测试,若全量环境下提交正常即可定位为JRE裁剪问题。
  • Spark安装包本身残缺。镜像构建过程中文件拷贝中断、使用的Spark二进制包源文件损坏,都会导致spark-launcher jar包本身不完整。可以直接解压对应jar包,检查包内是否存在org/apache/spark/launcher/Main.class文件确认完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:57:31