Что не так с google-cloud-storage конфликтами зависимостей Guava, которые кажутся невозможными для решения? - PullRequest
1 голос
/ 23 октября 2019

Я пытался решить эту проблему слишком много раз и до сих пор не могу решить ее, кажется, что проблемы углубляются и что это огромная проблема в библиотеке.

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"

Последние возможные версии.

Надеюсь, кто-то может пролить свет на это, потому что это действительно странно, что никто не может решить?

1 Ответ

1 голос
/ 23 октября 2019

Это хорошо известная проблема в Hadoop, когда такие зависимости, как guava, не заштрихованы. Поэтому, когда вы зависите от Guava (намного более поздней версии, чем Hadoop), вы вместо этого получаете версию из jar Hadoop, которая намного старше и не имеет метода.

Решение состоит в том, чтобы затенять Guava (и любые другие зависимости). ) внутри вашей работы баночка.

...