[尝试解决这个问题的次数太多了,但仍然无法解决这个问题,似乎问题更深了,这是库中的一个大问题。
val cloudStorage = "com.google.cloud" % "google-cloud-storage" % googleCloudV exclude ("com.google.guava", "guava")
val cloudHadoop = "com.google.cloud.bigdataoss" % "gcs-connector" % googleHadoopV exclude ("org.apache.hadoop", "hadoop-common") exclude ("org.apache.hadoop", "hadoop-mapreduce-client-core") exclude ("com.google.guava", "guava")
val guava = "com.google.guava" % "guava" % guavaV
阅读成千上万的帖子,我仍然无法使其运行在Dataproc集群中部署它,由于以下错误而崩溃。
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at com.google.cloud.storage.StorageImpl.optionMap(StorageImpl.java:1480)
at com.google.cloud.storage.StorageImpl.optionMap(StorageImpl.java:1469)
at com.google.cloud.storage.StorageImpl.optionMap(StorageImpl.java:1502)
at com.google.cloud.storage.StorageImpl.list(StorageImpl.java:326)
我也尝试过阴影...
assemblyShadeRules in assembly := Seq(
ShadeRule.rename("com.google.common.**" -> "repackaged.com.google.common.@1").inAll
)
而且,关于Guava依赖项问题,仍然没有结果。
我正在运行的GCP依赖项的版本(与Spark 2.3.0一起,是以下版本。
val googleCloudV = "1.98.0"
val googleHadoopV = "hadoop3-2.0.0"
val guavaV = "28.0-jre"
最新的版本。
希望有人可以对此有所了解,因为没人能真正解决这个问题真的很奇怪?
这是Hadoop中的一个众所周知的问题,像guava这样的依赖项没有阴影。因此,当您依赖Guava(比Hadoop高得多的版本)时,您可以从Hadoop的jar中获取该版本,而该jar更旧,并且没有该方法。
解决方案是在作业罐中遮盖番石榴(及其他依赖项)。