Spark 2.3.0 netty版本问题:NoSuchMethod io.netty.buffer.PooledByteBufAllocator.metric()

时间:2018-03-06 18:11:32

标签: apache-spark cassandra netty

我刚刚将我的spark项目从2.2.1升级到2.3.0以找到下面的版本控制例外。我依赖于来自datastax的spark-cassandra-connector.2.0.7和cassandra-driver-core.3.4.0,而后者依赖于netty 4.x而spark 2.3.0使用3.9.x.

引发异常的类org.apache.spark.network.util.NettyMemoryMetrics已在spark 2.3.0中引入。

降级我的Cassandra依赖项是绕过异常的唯一方法吗?谢谢!

Exception in thread "main" java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.metric()Lio/netty/buffer/PooledByteBufAllocatorMetric;
at org.apache.spark.network.util.NettyMemoryMetrics.registerMetrics(NettyMemoryMetrics.java:80)
at org.apache.spark.network.util.NettyMemoryMetrics.<init>(NettyMemoryMetrics.java:76)
at org.apache.spark.network.client.TransportClientFactory.<init>(TransportClientFactory.java:109)
at org.apache.spark.network.TransportContext.createClientFactory(TransportContext.java:99)
at org.apache.spark.rpc.netty.NettyRpcEnv.<init>(NettyRpcEnv.scala:71)
at org.apache.spark.rpc.netty.NettyRpcEnvFactory.create(NettyRpcEnv.scala:461)
at org.apache.spark.rpc.RpcEnv$.create(RpcEnv.scala:57)
at org.apache.spark.SparkEnv$.create(SparkEnv.scala:249)
at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:175)
at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:256)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:423)

2 个答案:

答案 0 :(得分:12)

好像你用的是#34;太旧了#34; netty 4版。也许你的类路径上有多个?在类路径上使用netty 4.x和3.x应该没问题。

答案 1 :(得分:2)

我想在答案中添加更多细节,以简化工作,只需运行mvn dependency:tree -Dverbose -Dincludes=io.netty:netty-all,它将使用io.netty及其版本返回所有依赖项。在我的案例中,罪魁祸首是Hive Jdbc 2.1.0,其netty-all版本低于spark 2.3.1使用的版本,因此,类路径省略了已从hive-jdbc加载spark的netty的加载。

因此解决方法是从pom.xml中的Hive-Jdbc中排除依赖项