记一次jar包Netty冲突过程的解决 hadoop2.7.3与ElasticSearch6.0.0

本文介绍了解决Hadoop2.7.3与ElasticSearch6.0.0版本不兼容导致的连接问题,主要原因是两个版本使用的Netty版本不同。通过在pom文件中直接指定使用Netty4.13版本来解决该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.pom中引用了hadoop2.7.3与ElasticSearch6.0.0造成连接不上ES的问题

ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
14:46:25.703 [main] DEBUG io.netty.util.internal.logging.InternalLoggerFactory - Using SLF4J as the default logging framework
Exception in thread "main" java.lang.NoSuchMethodError: io.netty.buffer.CompositeByteBuf.addComponents(ZLjava/lang/Iterable;)Lio/netty/buffer/CompositeByteBuf;
	at org.elasticsearch.transport.netty4.Netty4Utils.toByteBuf(Netty4Utils.java:122)
	at org.elasticsearch.transport.netty4.Netty4Transport.sendMessage(Netty4Transport.java:318)
	at org.elasticsearch.transport.netty4.Netty4Transport.sendMessage(Netty4Transport.java:88)
	at org.elasticsearch.transport.TcpTransport.internalSendMessage(TcpTransport.java:1110)


这里可以看出是netty无法找到其中的一个方法。

2.在idea编译器中找到terminal命令行,切换到当前项目pom所在的目录,运行:

mvn dependency:tree

找到了2.7.3的hadoop使用的是3.X的netty,而6.0版本的ES使用了4.13版本的netty。


解决办法:

1.在pom中直接引用netty4.13

    <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.13.Final</version>
        </dependency>

2.这个可能的解决办法是将两部分冲突的地方划分到不同的项目中


注意:mvn dependency:tree -Dverbose -Dincludes=asm:asm 类似的命令可以找到重复的jar包引用


补充,同时发现使用了spring boot,会导致networkplugin报错

这是因为spring boot引用了低版本的ES,在该项目中pom中显式的引用6.0的ES即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值