[Hive]五、Hive 源码编译

G:\Bigdata\2.hive\大数据技术之Hive源码编译

1章 部署Hadoop和Hive

1.1 版本测试

Hadoop3.3.6 和Hive3.1.3

运行hive客户端时报错:

java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

查看Hadoop在Github上的pom依赖,在hadoop-project模块中: 

hadoop/hadoop-project/pom.xml at rel/release-3.3.6 · apache/hadoop · GitHub

查看Hive的Guava依赖:

hive/pom.xml at rel/release-3.1.3 · apache/hive · GitHub

Hadoop启动后调用了guava-27中的一些方法,而Hive在启动时,它的JVM中加载的是guava-19这个版本,而这版本中就没有这个方法。

2章 Hadoop和Hive的兼容性问题

2.1 问题原因

上述问题是由Hadoop3.1.3版本所依赖的guava-27.0-jre和Hive-3.1.3版本所依赖的guava-19.0不兼容所致。

2.2 解决思路

1)更换Hadoop版本 

        经过观察发现,Hadoop-3.1.0,Hadoop-3.1.1,Hadoop-3.1.2版本的guava依赖均为guava-11.0.2,而到了Hadoop-3.1.3版本,guava依赖的版本突然升级到了guava-27.0-jre。
        Hive-3的所有发行版本的guava依赖均为guava-19.0。而guava-19.0和guava-11.0.2版本是兼容的,所以理论上降低Hadoop版本,这个问题就能得到有效的解决。

通过对github上源码的提交记录,可以找到跟guava相关的信息:branch 选择Hadoop rel/3.1.3

找到hadoop-project的pom.xml, 点击history,搜索guava

点进去之后发现这个升级跟guava的漏洞CVE-018-10237有关:

继续搜索这个漏洞的详细信息,发现里面描述的这个guava漏洞从guava11.0 一直到guava-24版本都存在,因此Hadoop才从3.1.3一下子升级到guava-27. 

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值