web-dev-qa-db-ja.com

Spark 2.3.0 nettyバージョンの問題:NoSuchMethod io.netty.buffer.PooledByteBufAllocator.metric()

sparkプロジェクトを2.2.1から2.3.0にアップグレードして、以下のバージョン例外を見つけました。spark-cassandra-connector.2.0.7とcassandra-driver-coreに依存していますspark 2.3.0は3.9.xを使用しますが、nets 4.xに依存するdatastaxからの.3.4.0。

例外を発生させるクラス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)
6
rodders

「古すぎる」netty 4バージョンを使用しているようです。多分あなたはあなたのクラスパスに複数を持っていますか?クラスパスにnetty 4.xと3.xがあっても問題ありません。

15
Norman Maurer

作業を簡単にするために、回答にさらに詳細を追加したいと思います。mvn dependency:tree -Dverbose -Dincludes=io.netty:netty-allを実行するだけで、io.nettyとそのバージョンを使用してすべての依存関係が返されます。私の場合、犯人はHive Jdbc 2.1.0で、spark 2.3.1で使用されているバージョンよりもnetty-allのバージョンが低いため、クラスパスはスパークの正味のロードを省略しています。 Hive-jdbcからロードされます。

したがって、修正はpom.xmlのHive-Jdbcから依存関係を除外することです

3
Vicky