Google PubSub в Apache Spark 2.2.1 - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь использовать Google Cloud PubSub в приложении Spark. Для простоты скажем, что это приложение является оболочкой Spark. Попытка создать экземпляр Publisher выдает NoClassDefFoundError, что, скорее всего, является результатом конфликтов версий зависимостей. Однако при такой простой настройке (только Spark и зависимость Google Cloud PubSub) я не могу понять, как решить эту проблему.

bash-4.4# spark-shell --packages com.google.cloud:google-cloud-pubsub:1.105.0
Ivy Default Cache set to: /root/.ivy2/cache
The jars for the packages stored in: /root/.ivy2/jars
:: loading settings :: url = jar:file:/opt/spark-2.2.1-bin-hadoop2.7/jars/ivy-2.4.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
com.google.cloud#google-cloud-pubsub added as a dependency
:: resolving dependencies :: org.apache.spark#spark-submit-parent;1.0
    confs: [default]
    found com.google.cloud#google-cloud-pubsub;1.105.0 in central
    found io.grpc#grpc-api;1.28.1 in central
    ...
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.2.1
      /_/

Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_212)
Type in expressions to have them evaluated.
Type :help for more information.

scala> com.google.cloud.pubsub.v1.Publisher.newBuilder("topic").build
java.lang.NoClassDefFoundError: com/google/api/gax/grpc/InstantiatingGrpcChannelProvider
  at com.google.cloud.pubsub.v1.stub.PublisherStubSettings.defaultGrpcTransportProviderBuilder(PublisherStubSettings.java:225)
  at com.google.cloud.pubsub.v1.TopicAdminSettings.defaultGrpcTransportProviderBuilder(TopicAdminSettings.java:169)
  at com.google.cloud.pubsub.v1.Publisher$Builder.<init>(Publisher.java:674)
  at com.google.cloud.pubsub.v1.Publisher$Builder.<init>(Publisher.java:625)
  at com.google.cloud.pubsub.v1.Publisher.newBuilder(Publisher.java:621)
  ... 48 elided
Caused by: java.lang.ClassNotFoundException: com.google.api.gax.grpc.InstantiatingGrpcChannelProvider
  at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 53 more

Есть ли способ заставить это работать? Я мог бы изменить версию зависимости pubsub, но не версию Spark.

1 Ответ

0 голосов
/ 17 июня 2020

Это связано с конфликтом зависимостей Google Guava, который, как известно, существует при использовании Spark + Google Libraries. Обходной путь (с Maven) использует плагин maven-shade.

...