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

自托管Spark集群用--packages加载gcs-connector访问GCS报错求解

问题根因

该java.lang.NoSuchMethodError报错本质是Guava依赖版本冲突:

  • Spark 3.1.2内置的Guava版本为11.x/14.x这类低版本,而gcs-connector hadoop3-2.2.2依赖的Guava版本为27.1+,高版本的Preconditions类新增了带long类型参数的checkArgument重载方法,低版本Guava不存在该方法,运行时优先加载Spark内置的低版本Guava就会抛出对应错误。
  • 用本地--jars指定预下载的jar可正常运行的原因是:官方预编译的gcs-connector发行包是shaded版本,已经把自身依赖的Guava等三方包重命名打包到内部,不会和Spark内置的依赖冲突;而通过--packages拉取的Maven公共仓库的com.google.cloud.bigdataoss:gcs-connector是未shade的版本,会主动拉取公共依赖的Guava,和Spark内置版本冲突。

解决方案

方案1:优先加载用户提交的依赖(推荐)

提交作业时新增以下两个配置参数,让Spark优先加载你通过--packages引入的高版本Guava,避免调用内置的低版本:

--conf spark.driver.userClassPathFirst=true
--conf spark.executor.userClassPathFirst=true

完整提交示例参考:

spark-submit \
  --packages org.apache.spark:spark-avro_2.12:3.1.2,com.google.cloud.bigdataoss:gcs-connector:hadoop3-2.2.2 \
  --conf spark.hadoop.fs.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem \
  --conf spark.hadoop.fs.AbstractFileSystem.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS \
  --conf spark.driver.userClassPathFirst=true \
  --conf spark.executor.userClassPathFirst=true \
  你的作业主类/作业jar路径

注意:如果集群有其他自定义依赖冲突,该配置可能引发其他兼容问题,可优先尝试方案2


方案2:直接拉取shaded版本的gcs-connector

Maven仓库也提供已经完成shade处理的gcs-connector版本,直接指定带shaded分类器的依赖即可,不需要修改类加载优先级:
把--packages里的gcs-connector依赖替换为:
com.google.cloud.bigdataoss:gcs-connector:hadoop3-2.2.2:shaded
完整提交示例:

spark-submit \
  --packages org.apache.spark:spark-avro_2.12:3.1.2,com.google.cloud.bigdataoss:gcs-connector:hadoop3-2.2.2:shaded \
  --conf spark.hadoop.fs.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem \
  --conf spark.hadoop.fs.AbstractFileSystem.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS \
  你的作业主类/作业jar路径

方案3:手动排除冲突的Guava依赖

如果前面两种方案都不适用,可以在提交时显式排除gcs-connector传递依赖的Guava,同时单独引入兼容的高版本Guava:

spark-submit \
  --packages org.apache.spark:spark-avro_2.12:3.1.2,com.google.guava:guava:27.1-jre,\
  com.google.cloud.bigdataoss:gcs-connector:hadoop3-2.2.2 \
  --exclude-packages com.google.guava:guava \
  --conf spark.hadoop.fs.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem \
  --conf spark.hadoop.fs.AbstractFileSystem.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS \
  你的作业主类/作业jar路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:09:04