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

从IntelliJ直连Spark Master遇InvalidClassException问题求助

问题:IntelliJ直连Spark Standalone Master报错序列化版本不兼容

代码示例

def main(args: Array[String]) = {
    println("***hello spark-test***")
    val spark = SparkSession
      .builder()
      .master("spark://172.22.208.1:7077")
      .appName("Spark-Test Application")
      .getOrCreate()
    import spark.implicits._
    val rawData = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    val rdd = spark.sparkContext.parallelize(rawData)
    val df = rdd.toDF()
    val result = df.filter($"value" % 2 === 1).count()
    println(s"***Result odd numbers count: $result ***")
    spark.stop()
  }

报错现象

应用日志卡在连接Master环节:

22/12/29 12:38:55 INFO StandaloneAppClient$ClientEndpoint: Connecting to master spark://172.22.208.1:7077...
22/12/29 12:38:55 INFO TransportClientFactory: Successfully created connection to /172.22.208.1:7077 after 38 ms (0 ms spent in bootstraps)
22/12/29 12:39:15 INFO StandaloneAppClient$ClientEndpoint: Connecting to master spark://172.22.208.1:7077...

Driver日志抛出序列化错误:

22/12/29 12:39:35 ERROR TransportRequestHandler: Error while invoking RpcHandler#receive() for one-way message.
java.io.InvalidClassException: scala.collection.immutable.ArraySeq; local class incompatible: stream classdesc serialVersionUID = -8615987390676041167, local class serialVersionUID = 2701977568115426262

环境信息

  • Spark集群版本:spark-3.3.0-hadoop3-scala2.13
  • IntelliJ本地Scala版本:v2.13.5
  • 备注:移除代码中的master("spark://172.22.208.1:7077")后,打包用spark-submit提交可正常运行

解决方案

1. 对齐本地与集群的Scala版本

Spark 3.3.0对应Scala 2.13系列的2.13.8(可通过集群执行scala -version或官方文档确认),你本地用的2.13.5和集群版本不一致,导致ArraySeq的序列化ID不匹配。

  • 操作步骤:
    • 在IntelliJ中修改项目的Scala SDK为2.13.8
    • 更新项目构建文件(build.sbt/pom.xml)中的Scala版本到2.13.8,重新编译

2. 直接引用集群的Spark依赖包

本地maven/gradle下载的Spark依赖可能和集群端的库存在细微差异,直接使用集群的jar包可避免版本不一致问题。

  • 操作步骤:
    • 在IntelliJ项目中移除原有Spark依赖,添加集群$SPARK_HOME/jars目录下的所有jar包作为项目依赖

3. 用spark-submit参数指定Master(推荐)

本地开发时,代码中不硬编码master参数,通过运行配置传递参数,避免本地环境与集群的依赖冲突。

  • 操作步骤:
    • 代码中保留.appName,移除.master("spark://...")
    • 在IntelliJ的Run Configuration中,设置Program arguments为--master spark://172.22.208.1:7077
    • 或者直接编译jar包,用spark-submit命令提交:
      spark-submit --master spark://172.22.208.1:7077 --class your.package.MainClass your-jar-file.jar
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:43:50