我刚刚将我的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。
在spark 2.3.0中引入了引发异常的类org.apache.spark.network.util.NettyMemoryMetrics,。
降级我的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)发布于 2018-03-07 12:58:38
看起来你使用的是一个“太旧”的netty 4版本。也许你的类路径上有多个?在类路径上有netty 4.x和3.x应该不成问题。
发布于 2019-02-20 14:13:11
为了便于工作,我想在答案中添加更多细节,只需运行mvn dependency:tree -Dverbose -Dincludes=io.netty:netty-all,它将返回使用io.netty及其版本的所有依赖项。在我的例子中,罪魁祸首是Hive Jdbc 2.1.0,它的netty-all版本低于spark 2.3.1使用的版本,所以类路径忽略了加载spark的netty,因为它已经从hive-jdbc加载了。
因此,修复方法是从pom.xml中的配置单元Jdbc中排除依赖项。
https://stackoverflow.com/questions/49137397
复制相似问题