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

使用Spark Runner运行Apache Beam Go SDK grades示例报NoSuchMethodError

问题根因

该报错是典型的Jackson依赖版本冲突:

  • Spark 2.4.5集群默认内置的Jackson版本为2.9.x及更低,TypeBindings.emptyBindings()方法是Jackson 2.10.0版本才新增的API
  • 你使用的Apache Beam版本依赖Jackson 2.10.0+,运行时Spark优先加载集群内置的低版本Jackson包,导致找不到对应方法
可行解决方案

按操作成本从低到高排序:

方案1:调整Spark类加载优先级

启动Spark作业服务器时开启用户依赖优先加载规则,让Beam带的高版本Jackson优先被加载,修改启动命令如下:

./gradlew :runners:spark:2:job-server:runShadow -PsparkMasterUrl=spark://localhost:7077 -PsparkArgs="--conf spark.driver.userClassPathFirst=true --conf spark.executor.userClassPathFirst=true"

该方案无需修改代码,90%以上同类型冲突都可以通过该配置解决。

方案2:Shade重定位Jackson依赖

如果方案1因为集群权限等限制无法生效,可以修改Beam源码中Spark 2.x Runner的构建配置,把Jackson依赖打包到独立命名空间避免冲突:

  1. 找到runners/spark/2/build.gradle文件,在shadowJar配置块中新增重定位规则:
shadowJar {
    // 原有配置保留,新增下面规则
    relocate 'com.fasterxml.jackson', 'shaded.com.fasterxml.jackson'
}
  1. 重新编译构建Spark Runner作业服务器,再按原有命令启动即可

方案3:匹配Beam和Spark的依赖版本

降级使用Beam 2.24.0及更早版本,该版本区间的Beam默认依赖Jackson 2.9.x,和Spark 2.4.5内置的Jackson版本完全兼容,无API冲突。

验证步骤

任选上述方案调整后,重新启动Spark作业服务器,再执行grades -runner=spark -endpoint=localhost:8099 -job_name=gradetest命令即可正常运行,Python编写的Beam作业也会同步恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:18:04