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

Dataproc Serverless重复运行Spark作业失败问题求助

问题分析与解决

核心原因

这个错误是序列化版本不兼容导致的:AvroDataToCatalyst类的本地版本(你的作业依赖)和Dataproc Serverless环境中加载的类版本serialVersionUID不一致,触发了类校验失败。

通常是以下两种场景:

  • 作业打包时引入的Spark Avro依赖版本,和Dataproc Serverless集群默认安装的Spark Avro版本不匹配
  • 作业提交时未正确处理依赖冲突,导致环境加载了多个版本的Avro相关类

解决方案

1. 对齐Spark Avro依赖版本与Dataproc Serverless环境

确认你使用的Dataproc Serverless对应的Spark版本,确保作业中引入的spark-avro依赖版本完全一致:

  • Maven示例(pom.xml):
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-avro_2.12</artifactId>
    <version>3.3.0</version> <!-- 替换为Dataproc环境的Spark对应版本 -->
    <scope>provided</scope> <!-- 标记为provided,避免打包进jar,直接使用环境自带类 -->
</dependency>
  • Gradle示例:
implementation 'org.apache.spark:spark-avro_2.12:3.3.0'
providedRuntime 'org.apache.spark:spark-avro_2.12:3.3.0'

2. 强制排除冲突依赖

如果项目中其他依赖间接引入了不同版本的Spark Avro,在构建配置中排除冲突:
Maven示例:

<dependency>
    <!-- 替换为你的具体依赖 -->
    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-avro_2.12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 提交作业时指定依赖优先级

在Dataproc Serverless提交作业的命令中,添加参数强制使用环境自带的Spark Avro,避免加载作业包中的冲突类:

gcloud dataproc batches submit spark \
    --project=your-project-id \
    --region=your-region \
    --jars=your-job.jar \
    --properties spark.driver.userClassPathFirst=false,spark.executor.userClassPathFirst=false

4. 清理作业打包产物

重新打包前清理构建缓存(如mvn clean或gradle clean),避免旧版本的依赖类被打包进最终jar包。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:21:02