Spark Scala代码本地(IntelliJ)正常,spark-submit执行报错原因咨询
常见Spark Submit运行Scala Jar报错原因及排查方向
我平时帮同事排查这类问题的时候,一般会从以下几个核心方向入手,你可以对照着看看:
1. 依赖缺失或版本冲突
IntelliJ本地运行时,IDE会自动帮你拉取和管理所有依赖,但打包Jar的时候如果没处理好,很容易出问题:
- 如果你打的是普通Jar(不是胖包),第三方依赖不会被包含进去,集群环境找不到这些类就会抛出
ClassNotFoundException; - 另外,如果你项目里的Spark依赖没有设置为
providedscope,打包后会把Spark核心依赖也打进去,和集群上的Spark版本冲突,引发NoSuchMethodError这类错误。
排查建议:
- 用
sbt-assembly(Scala项目常用)或者maven-shade-plugin打包含所有依赖的胖包; - 确保项目中Spark相关依赖的scope设为
provided,比如sbt里写:libraryDependencies += "org.apache.spark" %% "spark-core" % "3.3.0" % Provided
2. 路径权限或访问性问题
你代码里的outputPath很可能是问题所在:
- 如果是本地路径,集群的Worker节点根本访问不到提交机器的本地文件系统,必须用HDFS、S3这类分布式存储路径;
- 就算是分布式路径,运行spark-submit的用户可能没有该路径的读写权限,或者路径已经存在(Spark默认不允许覆盖已存在的输出目录,除非你加了
--conf spark.hadoop.validateOutputSpecs=false参数)。
排查建议:
- 把输出路径改成集群可访问的分布式路径,比如
hdfs://your-namenode:9000/user/yourname/output; - 执行
hdfs dfs -mkdir -p <outputPath的父目录>提前创建目录,并用hdfs dfs -chmod 755 <父目录>确保权限足够。
3. Spark Submit参数配置错误
很多时候报错只是因为命令参数写错了:
--class参数没写主类的全限定名(比如应该是com.yourcompany.app.SparkJobMain,而不是只写SparkJobMain);- Jar包路径用了相对路径,集群找不到这个文件,建议用绝对路径或者上传到HDFS后用
hdfs://开头的路径; - 主节点地址写错(比如
--master yarn写成了--master local,但你要在集群运行),或者资源分配不合理导致OOM(比如--executor-memory 1g太小,处理大数据时内存不足)。
示例正确命令:
spark-submit \ --class com.yourcompany.app.SparkJobMain \ --master yarn \ --deploy-mode cluster \ --executor-memory 4g \ --num-executors 4 \ hdfs://your-namenode:9000/jars/your-spark-job.jar
4. 代码中的硬编码问题
本地运行没问题,但集群跑不通,很可能是代码里写死了本地相关的内容:
- 比如硬编码了本地配置文件路径(
/Users/xxx/config.conf),集群节点上根本没有这个文件; - 或者依赖了本地的一些资源文件,没有一起打包到Jar里,也没通过
--files参数传到集群。
排查建议:
- 把硬编码的路径改成可配置的,比如通过命令行参数传入;
- 如果需要依赖配置文件,用
--files参数把文件传到集群,比如:
然后代码里用spark-submit --class ... --files /local/path/config.conf hdfs://path/to/your.jarSparkFiles.get("config.conf")获取文件路径。
5. Scala与Spark版本不兼容
Spark对Scala版本有严格要求,比如Spark 3.x系列对应Scala 2.12,Spark 2.x对应Scala 2.11。如果你的项目Scala版本和集群Spark的Scala版本不匹配,会出现类加载失败的错误。
排查建议:
- 执行
spark-submit --version查看集群的Spark和Scala版本; - 修改项目的Scala版本,保持和集群一致(比如在sbt的
build.sbt里设置scalaVersion := "2.12.15")。
内容的提问来源于stack exchange,提问作者T Chevalier
相关产品推荐
相关产品推荐

