Dataproc Serverless Runtime1.2版本不匹配引发服务配置错误求助
解决Dataproc Serverless 1.2中Spark-BigQuery连接器的ServiceConfigurationError错误
错误原因
这个ServiceConfigurationError的本质是类加载冲突:Dataproc Serverless runtime中的Spark DataSourceRegister接口,与你打包的业务jar里BigQuery连接器依赖的同名接口,因版本或类加载器差异被判定为不同类,导致BigQueryRelationProvider无法被识别为该接口的实现类。常见触发因素:
- Scala编译版本与runtime的Scala版本不匹配
- 业务jar中打包了Dataproc已提供的Spark依赖,引发版本冲突
- BigQuery连接器的传递依赖与runtime的Spark版本存在隐性冲突
解决步骤
1. 对齐Scala编译版本
Dataproc Serverless 1.2的Spark 3.5.1基于Scala 2.12.18,必须在build.sbt顶部明确指定该版本,避免编译时使用不兼容的Scala版本:
scalaVersion := "2.12.18"
2. 排除BigQuery连接器中的冲突依赖
spark-bigquery-with-dependencies默认包含Spark和Scala依赖,而这些已经由Dataproc runtime提供,需要在依赖声明中排除:
val sparkBigQueryConnector = "com.google.cloud.spark" %% "spark-bigquery-with-dependencies" % sparkBigQueryConnectorVersion excludeAll( ExclusionRule(organization = "org.apache.spark"), ExclusionRule(organization = "org.scala-lang") )
3. 打包时剔除Provided依赖
如果使用sbt assembly打包,需配置插件排除provided范围的Spark依赖,避免将核心Spark类打进业务jar:
// 引入assembly插件(若未引入) addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.2.0") // 配置assembly规则 assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false) assemblyMergeStrategy in assembly := { case PathList("META-INF", xs @ _*) => MergeStrategy.discard case x => MergeStrategy.first }
4. 清理Airflow配置中的冗余依赖
检查jar_file_uris配置,确保仅包含你的业务jar,不要额外引入Spark或BigQuery相关的jar,避免多重依赖冲突。
5. 确认版本兼容性
再次核对版本对应关系(你当前选择的版本是符合官方要求的,可做二次验证):
- Dataproc Serverless 1.2 → Spark 3.5.1
- Spark 3.5.1对应BigQuery连接器版本:0.36.4
- Scala版本必须为2.12.x(禁止使用2.13.x)
内容的提问来源于stack exchange,提问作者Mujtaba Faizi
相关产品推荐
相关产品推荐

