Maven中同时使用CDH 的hive与ElasticSearch(ES) 内部依赖的netty jar冲突的问题_yushuai_IT的博客-程序员秘密

技术标签: 日常问题解决  

1、场景描述

因业务场景需要连接hive及ES,所以项目中需要整合这两项,那么在整合中遇到了jar包冲突的问题,项目是用的是Maven工程,hive 是用的CDH中的。

2、pom文件 中引用的hive及ES如下

 <!-- hadoop 2.6.0 && cdh 5.13.3 -->
	 <dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-hadoop</artifactId>
			<version>2.5.0.RELEASE</version>
		
		</dependency>
		
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>2.6.0-cdh5.13.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-core</artifactId>
			<version>2.6.0-mr1-cdh5.13.3</version>
		</dependency>
		
		<dependency>
			<groupId>org.apache.hive</groupId>
			<artifactId>hive-jdbc</artifactId>
			<version>1.1.0-cdh5.13.3</version>
		</dependency> 


    <!-- es6.3.0 -->
	<dependency>
		<groupId>org.elasticsearch.client</groupId>
		<artifactId>transport</artifactId>
		<version>6.3.0</version>
		<exclusions>      
                <exclusion>      
                  <groupId>com.fasterxml.jackson.core</groupId>      
                  <artifactId>jackson-core</artifactId>      
                </exclusion> 
                <exclusion>      
                  <groupId>com.fasterxml.jackson.dataformat</groupId>      
                  <artifactId>jackson-dataformat-smile</artifactId>      
                </exclusion> 
          </exclusions>  
	</dependency>
	
	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
		<artifactId>jackson-core</artifactId>
		<version>2.8.3</version>
	</dependency>    
	
	<dependency>
		<groupId>com.fasterxml.jackson.dataformat</groupId>
		<artifactId>jackson-dataformat-smile</artifactId>
		<version>2.8.3</version>
	</dependency>

3、测试一把吧
因为项目有使用spring,那么连接hive 使用的是JdbcTemplate, Junit测试代码如下:

@Autowired
private JdbcTemplate jdbcTemplate;

/**
 * 获取某个库下的所有表
 * ps: 
 * 		testdb 库
 * 
 */
@Test
public void queryTables(){
	List<Map<String, Object>> queryForList = jdbcTemplate.queryForList("SHOW TABLES IN testdb  ");
	System.out.println(queryForList);
}

运行后:

Caused by: java.lang.NoSuchMethodError: io.netty.util.AttributeKey.newInstance(Ljava/lang/String;)Lio/netty/util/AttributeKey;
	at org.elasticsearch.transport.netty4.Netty4Transport.<clinit>(Netty4Transport.java:232)
	at org.elasticsearch.transport.Netty4Plugin.getSettings(Netty4Plugin.java:56)
	at org.elasticsearch.plugins.PluginsService.lambda$getPluginSettings$0(PluginsService.java:89)
	at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:267)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1380)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at org.elasticsearch.plugins.PluginsService.getPluginSettings(PluginsService.java:89)
	at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:144)
	at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:280)
	at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:128)
	at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:114)
	at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:104)
	at com.perfect.lkt.dao.impl.ElasticSearchConnection.<init>(ElasticSearchConnection.java:35)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
	... 44 more

呦呵…mmp呀,所谓没事不惹事,来事不怕事的原则,分析吧
4、错误分析
首先看错误类型是,找不到这个方法,难道是缺少netty的jar包?先去确认下依赖的netty jar 有没有下载下来或引用到吧。去maven 工程下的 maven Dependencies 目录下看下, 结果发现有多个版本的netty 包,发生了冲突,如下图:
在入图片描述

在这里插入图片描述

我们都知道maven 引用jar时,它会把依赖的jar自动引进来,省去我们不少麻烦,但也会很容引起jar包冲突

5、bug解决
既然是jar包冲突的问题,就把冲突的jar 删除,保留一个就好,按照高版本兼容低版本的原则,我们保留高版本的。
那么怎么删除呢,那俩低版本的netty jar 到底是谁的依赖加载进来的呢,是hive 还是ES? 所以我们要先确定 这俩低版本的netty jar 是谁的依赖。
可使用maven的 mvn dependency:tree 命令查看下,他会生成一个jar 依赖的树层机构,执行这个命令有两点要素:
1) 你的maven 的环境变量已经配置了
2)你要到你工程的pom文件的目录下执行
执行成功后如下:
在这里插入图片描述
最顶级的那个jar ,就是你在pom 中的引用,看来在spring-data-hadoop 引用中禁掉netty就OK了,可以使用exclusions标签,如下:

<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-hadoop</artifactId>
			<version>2.5.0.RELEASE</version>
		<!-- 因与es中的netty jar冲突,所以这里排除依赖 -->
			<exclusions>
				<exclusion>
					<groupId>io.netty</groupId>
					<artifactId>netty-all</artifactId>
				</exclusion>
				<exclusion>
					<groupId>io.netty</groupId>
					<artifactId>netty</artifactId>
				</exclusion>
			</exclusions>
</dependency>

再次运行测试,已完美解决,能够同时兼容hive和ES了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yushuai_IT/article/details/86494222

智能推荐

关于Mercurial(Hg)_mercurial hg的历史_xoyojank的博客-程序员秘密

转自决定采用Mercurial(Hg)了http://www.keakon.cn/bbs/thread-1865-1-1.html===================================================================最近想用版本控制软件来保存汉化文件,但又觉得SVN太麻烦,于是想到了最近较为流行的分布式版本控制工具。而Git和Mercur

Git-2.23.0-64-bit--Windows安装包.zip百度云下载_git-2.21.0-64-bit.zip下载_紫衣紫竹的博客-程序员秘密

Git-2.23.0-64-bit--Windows安装包.zip百度云下载链接:https://pan.baidu.com/s/1HfR0y4ZqPrZI2SSyBUbcEg提取码:i8ql

c#tabcontrol怎么让tabpage在左边显示横向文字_wushijun5200的博客-程序员秘密

/封装文本布局格式信息。//调整选项卡文字方向。

FlyAI小课堂:Flutter 状态管理之BLoC_iFlyAI的博客-程序员秘密

在正式介绍 BLoC之前, 为什么我们需要状态管理。如果你已经对此十分清楚,那么建议直接跳过这一节。如果我们的应用足够简单,Flutter 作为一个声明式框架,你或许只需要将 数据 映射成 视图 就可以了。你可能并不需要状态管理,就像下面这样。但是随着功能的增加,你的应用程序将会有几十个甚至上百个状态。这个时候你的应用应该会是这样。我们很难再清楚的测试维护我们的状态,因为它看上去实在是太复杂了!而且还会有多个页面共享同一个状态,例如当你进入一个文章点赞,退出到外部缩略展示的时候,外部也需要显示点.

上海理工大学计算机科学与技术分数线,2019上海理工大学研究生分数线汇总(含2016-2019历年复试)..._俺是BOSS我怕谁的博客-程序员秘密

2019上海理工大学研究生分数线(含2016-2019历年复试)考研就是人生的第二次高考,是再一次改变自己命运的机会,所谓7分靠努力,3分靠填报,上海理工大学历年研究生复试分数线是2019-2020届考研学子十分关心的问题,以下是如意了为大家整理的2016-2019历年上海理工大学研究生复试分数线,供大家参考,真切希望大家都能考上自己满意的学校。1、2019年上海理工大学研究生分数线第一志愿复试分...

element el-tree 树图颜色配置_今天天气晴的博客-程序员秘密

/* 设置树形最外层的背景颜色和字体颜色 */.el-tree { color: #fff; background: transparent;}/* 设置三角形图标的颜色 */.el-tree-node__expand-icon { color: #fff;}/* 设置节点鼠标悬浮三角图标鼠标悬浮的颜色 */.el-tree-node__content:hover .el-tree-node__expand-icon { color: #000;}/* .el-tre.

随便推点

StringBuffer何时初始化到常量池_字符串常量池在什么时候初始化_ikownyou的博客-程序员秘密

首先,在源代码中用双引号引起来的会自动进入常量池中(其实字符串对象是在堆中,然后常量池里有个引用指向它,但是和直接说在常量池中似乎没多大影响,下面也就这么说了) String s1 = new StringBuffer("he").append("llo").toString(); System.out.println(s1==s1.intern());//结果是true这

项立刚:乔布斯展现了人类无尽的创造力_iteye_9770的博客-程序员秘密

北京时间10月6日消息,苹果董事会、联合创始人史蒂夫·乔布斯周三辞世,享年56岁。乔布斯的辞世,引起了IT界名人的关注。知名电信专家、飞象网创始人&amp;lt;!--keyword--&amp;gt;&amp;lt;!--/keyword--&amp;gt;项立刚&amp;lt;!--keyword--&amp;gt;(微博)&amp;lt;!--/keyword--&amp;gt;在腾讯微博中表示,“乔布斯终于和我们说再见了。这个世界有很多伟人,有人的功勋...

实施ERP系统之我见_pafa的博客-程序员秘密

 实施ERP系统之我见前言 经常看到有关ERP相关报导总觉得欠缺点什麽,因此个人以实际参与的经验角度也发表点意见,希望能与各有兴趣的人切磋并交换意见;谈到ERP,首先我们要探讨为何要实施ERP系统?ERP 系统实施后我们要达到什麽目标?公司准备投入多少预算?公司现有那些可动用的资源?我们要在多少时间内完成ERP上线?知己知彼百战百胜,不了解自己的需要,不

html链接下面的线怎么消除,下划线怎么去掉_李大帝的博客-程序员秘密

手机评站网今天精心准备的是《下划线怎么去掉》,下面是详解!怎样去掉Word里的下划线?在Word里打字的时候会莫名其妙地出现下划线,而且去字体里看的时候也是显示无下划线,怎么去掉这些下划线?...在Word里打字的时候会莫名其妙地出现下划线,而且去字体里看的时候也是显示无下划线,怎么去掉这些下划线?第一步:打开并进入Word软件主页面,如下图所示:第二步:进入之后,全选需要去掉下划线的文字,然后点...

mx350显卡天梯图_显卡天梯图2020新排行榜_weixin_39769767的博客-程序员秘密

  2020年有不少的商家推出了新的性能显卡,很多是性能跨越,有的在原有的基础上进行深度提升性能,那么对于市场上繁多的显卡型号,如何挑选合适的显卡非常重要,下面让小编给您看看2020最新的显卡天梯图排行榜吧。  下面是显卡天梯图2020最新版:  先看看游戏玩家关注的游戏显卡性能排行榜表:  此版本的显卡梯形图【台式机显卡梯形图和笔记本显卡梯形图】  该显卡梯形图主要比较了主流的独立显卡(例如Nv...

Typora官网下载慢,用这个镜像_大A馆长的博客-程序员秘密

https://gitee.com/typora-mirror/Typora-Mirror/releases

推荐文章

热门文章

相关标签