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

Spark提交Hudi程序报错:org.apache.spark.sql.adapter.Spark3Adapter类未找到

解决Spark-Submit运行Hudi Jar时的ClassNotFoundException问题

问题原因

org.apache.spark.sql.adapter.Spark3Adapter 是Hudi为适配Spark 3.x版本提供的核心类,出现找不到的异常通常是以下原因:

  • Hudi版本与Spark 3.3.1不兼容
  • sbt打包时未将Hudi的核心依赖(含适配类)纳入Jar包
  • Spark-Submit提交时未引入Hudi的适配依赖

解决方案

1. 匹配兼容的Hudi版本

Spark 3.3.1需要搭配Hudi 0.13.0及以上版本的Spark3.3专属bundle包,在build.sbt中指定正确的依赖:

val sparkVersion = "3.3.1"
val hudiVersion = "0.13.1" // 推荐使用稳定版本

libraryDependencies ++= Seq(
  // Spark依赖标记为Provided,避免与集群Spark依赖冲突
  "org.apache.spark" %% "spark-sql" % sparkVersion % Provided,
  // 引入Hudi针对Spark3.3的bundle包,包含所有适配类
  "org.apache.hudi" %% "hudi-spark3.3-bundle" % hudiVersion % Compile
)

2. 正确打包Jar包

如果使用sbt-assembly插件打包,需确保配置中排除Spark的Provided依赖,同时包含Hudi的bundle:
在project/assembly.sbt中添加插件:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.2.0")

在build.sbt中添加assembly配置(处理重复依赖):

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", xs @ _*) => MergeStrategy.discard
  case x => MergeStrategy.first
}

执行打包命令:

sbt assembly

3. Spark-Submit提交方式

如果不想将Hudi依赖打包进Jar,也可以在提交时通过--packages直接引入:

spark-submit \
  --class com.your.package.YourMainClass \
  --master spark://your-spark-master:7077 \
  --packages org.apache.hudi:hudi-spark3.3-bundle_2.12:0.13.1 \
  path/to/your-jar-file.jar

4. 验证程序代码

确保代码中使用的是Hudi针对Spark 3.x的API,比如导入正确的Hudi类:

import org.apache.hudi.DataSourceReadOptions
import org.apache.hudi.DataSourceWriteOptions
import org.apache.hudi.config.HoodieWriteConfig

避免引入针对其他Spark版本的适配类(比如Spark2的adapter)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:44:56