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

提交Shaded Jar到Dataproc作为Spark Job时遇NoClassDefFoundError问题

问题描述

将Shaded Jar提交到Dataproc作为Spark Job运行时,出现以下错误:

java.lang.NoClassDefFoundError: org/apache/beam/sdk/coders/CoderProviderRegistrar

已确认该类存在于Shaded Jar中,请求排查问题原因。
(堆栈截图显示错误调用链涉及Beam相关组件的初始化流程)

可能的原因及解决方法
  • Shading打包配置错误
    使用Maven Shade或Gradle Shadow插件打包时,若配置不当可能导致类或SPI注册文件丢失:

    • 检查插件配置,确保org.apache.beam.sdk.coders.CoderProviderRegistrar类未被过滤;
    • 必须合并META-INF/services目录下的SPI注册文件(如org.apache.beam.sdk.coders.CoderProviderRegistrar),避免打包时被覆盖。
  • 集群依赖版本冲突
    Dataproc集群预装的Beam版本与Shaded Jar中的版本不一致,类加载时优先加载集群旧版本(旧版本可能无此类):

    • 提交Job时添加--packages org.apache.beam:beam-sdks-java-core:你的版本,强制使用指定版本;
    • 在Shade配置中对Beam包进行relocate重命名(如将org.apache.beam改为com.yourcompany.beam),隔离集群自带依赖。
  • Jar包完整性问题
    本地执行jar tf your-shaded.jar | grep CoderProviderRegistrar,再次验证类是否存在于Jar中;若存在,重新上传Jar到集群,排除传输损坏可能。

  • 提交参数引发的依赖冲突
    检查Spark Job提交命令中的--jars、--classpath参数,移除可能与Beam依赖冲突的第三方Jar包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:54:58