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

Spark独立集群任务资源无法分配问题排查求助

解决Spark Standalone集群Scala序列化版本不兼容问题

问题根源

从Worker节点的Executor日志可直接定位:java.io.InvalidClassException是因为Driver端与集群Worker端的Scala类序列化版本不匹配。虽然双方同属Scala 2.12分支,但小版本差异导致scala.collection.mutable.WrappedArray$ofRef的serialVersionUID不一致,Driver和Executor无法完成序列化通信,最终引发任务资源分配失败的报错。

解决方案

  1. 精确对齐Scala版本

    • 先确认集群Spark使用的Scala精确版本:登录集群节点,进入SPARK_HOME/jars目录,找到scala-library-*.jar,查看完整版本号(例如scala-library-2.12.10.jar)。
    • 修改本地Maven项目中scala-library的依赖版本,完全匹配集群版本:
      <dependency>
          <groupId>org.scala-lang</groupId>
          <artifactId>scala-library</artifactId>
          <version>集群对应Scala版本号</version>
          <scope>provided</scope> <!-- 集群已自带该库,无需打包进应用jar -->
      </dependency>
      
  2. 排查并排除依赖冲突

    • 执行Maven命令检查依赖树,确认是否有其他依赖间接引入了不同版本的Scala库:
      mvn dependency:tree | grep scala-library
      
    • 如果发现冲突,在对应的依赖中添加排除规则,例如某依赖引入了旧版Scala:
      <dependency>
          <groupId>xxx</groupId>
          <artifactId>xxx</artifactId>
          <version>xxx</version>
          <exclusions>
              <exclusion>
                  <groupId>org.scala-lang</groupId>
                  <artifactId>scala-library</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
      
  3. 重新构建并验证

    • 执行mvn clean package清理并重新构建项目,确保依赖完全生效。
    • 重新运行Driver程序,查看Worker节点的Executor日志,确认序列化异常是否消失。

额外注意事项

  • 你的spark.executor.instances设置为100,但集群只有3个Worker节点,该配置远超集群实际资源承载能力,建议根据Worker的CPU、内存情况合理调整(例如每个Worker分配2-3个Executor)。
  • 本地Driver读取C:\Files\testData\data_2.txt属于本地路径,集群Worker节点无法访问该文件。后续任务正常运行后,需将数据文件放到HDFS、NFS等集群共享存储,或通过spark-submit的--files参数将文件分发到所有Executor节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:35:40