rod*_*ers 6 cassandra netty apache-spark
我刚刚将我的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)
Run Code Online (Sandbox Code Playgroud)
Nor*_*rer 14
看起来你使用的是"太旧"的netty 4版本.也许你的类路径上有多个?在类路径上使用netty 4.x和3.x应该没问题.
为了便于工作,我想在答案中添加更多详细信息,只需运行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 中的 Hive-Jdbc 中排除依赖项
| 归档时间: |
|
| 查看次数: |
7167 次 |
| 最近记录: |