Apache Spark и gRPC

Я пишу приложение, использующее Apache Spark. Для общения с клиентом я хотел бы использовать gRPC.

В моем файле сборки Gradle я использую

dependencies {
  compile('org.apache.spark:spark-core_2.11:1.5.2')
  compile 'org.apache.spark:spark-sql_2.11:1.5.2'
  compile 'io.grpc:grpc-all:0.13.1'
  ...
}

При отключении gRPC все работает нормально. Однако при использовании gRPC я могу создать сборку, но не выполнить ее, так как пакеты используют разные версии netty. Похоже, что Spark использует netty-all, который содержит те же методы (но с потенциально другими сигнатурами), что и gRPC.

Я пробовал затенение (используя com.github.johnrengelman.shadow), но почему-то все равно не работает. Как я могу подойти к этой проблеме?


person navige    schedule 26.02.2016    source источник
comment
Вы пытались установить более низкую версию Netty (та, которую требует Spark)? Возможно, вам повезет, и gRPC не будет использовать новый метод в той версии, с которой он был скомпилирован...   -  person Tzach Zohar    schedule 26.02.2016
comment
Я попробовал это. К сожалению, судя по всему, некоторые методы изменили сигнатуру и поэтому не сработали.   -  person navige    schedule 26.02.2016


Ответы (2)


Общее решение для такого рода вещей — затенение с перемещением. См. ответ на аналогичную проблему с зависимостями protobuf: https://groups.google.com/forum/#!topic/grpc-io/ABwMhW9bU34

person nmittler    schedule 02.03.2016

Я думаю, проблема в том, что spark использует netty 4.0.x и gRPC 4.1.0.

person Norman Maurer    schedule 26.02.2016
comment
Да, ты прав. Но можно ли использовать обе версии одновременно? Я нашел на github.com/googlegenomics/spark-examples пример, где они каким-то образом используют Spark и gRPC и я пытались сделать то же самое с Gradle, но мне не удалось заставить его работать... - person navige; 26.02.2016