Apache Spark 和 gRPC

Posted

技术标签:

【中文标题】Apache Spark 和 gRPC【英文标题】:Apache Spark and gRPC 【发布时间】:2016-02-26 16:11:29 【问题描述】:

我正在编写一个使用 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),但不知何故它仍然不起作用。我该如何解决这个问题?

【问题讨论】:

您是否尝试过强制使用较低的 Netty 版本(Spark 所需的版本)?也许你会很幸运,gRPC 不会使用它编译的版本中的任何新方法...... 我试过这个。不幸的是,看起来,一些方法改变了签名,所以它不起作用 【参考方案1】:

这类事情的一般解决方案是重定位阴影。请参阅 protobuf 依赖项类似问题的答案:https://groups.google.com/forum/#!topic/grpc-io/ABwMhW9bU34

【讨论】:

【参考方案2】:

我认为问题在于 spark 使用 netty 4.0.x 和 gRPC 4.1.0 。

【讨论】:

是的,你是对的。但是我可以同时使用两个版本吗?我在github.com/googlegenomics/spark-examples 上找到了一个示例,他们以某种方式使用 Spark 和 gRPC,我尝试对 Gradle 做同样的事情,但我没有设法让它工作......

以上是关于Apache Spark 和 gRPC的主要内容,如果未能解决你的问题,请参考以下文章

如何选择Apache Spark和Apache Flink?

Apache Sqoop 和 Spark

Apache Spark开发介绍

apache storm apache spark哪个更火

类型不匹配;找到:org.apache.spark.sql.DataFrame 需要:org.apache.spark.rdd.RDD

Apache Spark 内存管理详解