spark+es踩坑:java.lang.NoSuchMethodError: io.netty.bootstrap.Bootstrap.config()

java.lang.NoSuchMethodError: io.netty.bootstrap.Bootstrap.config()Lio/netty/bootstrap/BootstrapConfig

错误原因是,spark和es引用了io.netty的包的不同版本。在依赖树里把spark的低版本的去掉就行了。

 

但在spark的集群环境还会报错

 java.lang.AbstractMethodError: org.apache.spark.network.protocol.MessageWithHeader.touch(Ljava/lang/Object;)Lio/netty/util/
ReferenceCounted;
java.lang.AbstractMethodError: org.apache.spark.network.protocol.MessageWithHeader.touch(Ljava/lang/Object;)Lio/netty/util/ReferenceCounte
d;

因为spark的io.netty的版本低,但是类加载器会优先加载spark的jars包里的类,然后就不加载用户自己的类了。

尝试通过设置:--conf spark.driver.userClassPathFirst=true --conf spark.executor.userClassPathFirst=true

但是并不好用,spark自己加载的时候会出异常。

 

最后采用的:maven-shade-plugin

在打包的时候把es依赖下的io.netty包改名,然后传到集群后,就能和集群的io.netty并存了,也不会出错了。

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值