Dataproc连接Cloud Bigtable:已做Jar包Shading仍存依赖冲突
Dataproc上Spark读写Cloud Bigtable的依赖问题困境
初始问题与处理
在Dataproc上运行Spark应用读写Cloud Bigtable时,首次遇到如下异常:
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument
查阅相关文档后确认是依赖冲突问题,于是在build.sbt中添加Jar包Shading规则:
assembly / assemblyShadeRules := Seq( ShadeRule.rename("com.google.common.**" -> "repackaged.com.google.common.@1").inAll, ShadeRule.rename("com.google.protobuf.**" -> "repackaged.com.google.protobuf.@1").inAll, ShadeRule.rename("io.grpc.**" -> "repackaged.io.grpc.@1").inAll )
新出现的错误
添加Shading规则后,出现了新的异常:
repackaged.io.grpc.ManagedChannelProvider$ProviderNotFoundException: No functional channel service provider found. Try adding a dependency on the grpc-okhttp, grpc-netty, or grpc-netty-shaded artifact at repackaged.io.grpc.ManagedChannelProvider.provider(ManagedChannelProvider.java:45) at repackaged.io.grpc.ManagedChannelBuilder.forAddress(ManagedChannelBuilder.java:39) at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createSingleChannel(InstantiatingGrpcChannelProvider.java:353) at com.google.api.gax.grpc.ChannelPool.<init>(ChannelPool.java:107) at com.google.api.gax.grpc.ChannelPool.create(ChannelPool.java:85) at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createChannel(InstantiatingGrpcChannelProvider.java:237) at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.getTransportChannel(InstantiatingGrpcChannelProvider.java:231) at com.google.api.gax.rpc.ClientContext.create(ClientContext.java:201) at com.google.cloud.bigtable.data.v2.stub.EnhancedBigtableStub.create(EnhancedBigtableStub.java:175) at com.google.cloud.bigtable.data.v2.BigtableDataClient.create(BigtableDataClient.java:165) at com.groupon.crm.BigtableClient$.getDataClient(BigtableClient.scala:59) ... 44 elided
无效的解决尝试
根据错误提示,在build.sbt中添加了grpc-netty依赖:
libraryDependencies += "io.grpc" % "grpc-netty" % "1.49.2"
但问题依旧存在。
环境详情
Dataproc配置
"software_config": { "image_version": "1.5-debian10", "properties": { "dataproc:dataproc.logging.stackdriver.job.driver.enable": "true", "dataproc:dataproc.logging.stackdriver.enable": "true", "dataproc:jobs.file-backed-output.enable": "true", "dataproc:dataproc.logging.stackdriver.job.yarn.container.enable": "true", "capacity-scheduler:yarn.scheduler.capacity.resource-calculator" : "org.apache.hadoop.yarn.util.resource.DominantResourceCalculator", "hive:hive.server2.materializedviews.cache.at.startup": "false", "spark:spark.jars":"XXXX" }, "optional_components": ["ZEPPELIN","ANACONDA","JUPYTER"] }
Spark作业依赖
val sparkVersion = "2.4.0" libraryDependencies += "org.apache.spark" %% "spark-core" % sparkVersion % "provided" libraryDependencies += "org.apache.spark" %% "spark-sql" % sparkVersion % "provided" libraryDependencies += "org.apache.spark" %% "spark-hive" % sparkVersion % "provided" libraryDependencies += "com.google.cloud" % "google-cloud-bigtable" % "2.23.1" libraryDependencies += "com.google.auth" % "google-auth-library-oauth2-http" % "1.17.0" libraryDependencies += "io.grpc" % "grpc-netty" % "1.49.2"
内容的提问来源于stack exchange,提问作者shril
相关产品推荐
相关产品推荐

