背景
首先,我们在下载官方的hive的发行版,很可能会出现发行版中预编译的hive与我们目标平台的其他组件出现不兼容,例如小编就会经常遇到hive在读取hbase的时候出现这样或者那样的问题,当然也有很多处理和解决的办法,例如通过各种论坛和帖子找需要替换jar包,然后进行替换即可,这种做法虽然最终也能解决但是太费神了,因此小编痛定思痛,觉得直接对hive的源码包进行更改,然后自己编译hive的安装包,这也是决绝版本冲突最直接有效的办法。
编译步骤
下载hive的对用版本的源码包apache-hive-1.2.2-src.tar.gz ,解压改源码包,然后打开根目录下的pom.xml文件,例如这里我们要解决hive和hbase兼容问题,我们平台的hbase用的是Hbase-1.4.13版本,因此用户只需要找到这个pom当中的hbase版本声明,修改成我们目标版本即可。推荐在MAC OS或者CentOS上编译,不要在Windows上编译!
...
<hbase.hadoop2.version>1.4.13</hbase.hadoop2.version>
...
然后我们在根目录上执行mvn -Phadoop-2 -Pdist -DskipTests -Dmaven.javadoc.skip=true clean package
命令,系统就会自动的编译出我们需要的兼容hbase版本的hive发行版。这里需要友情提醒,由于编译源码是一个非常枯燥且漫长的过程,为了加速maven的编译,大家需要将自己的maven的镜像修改为阿里云的maven仓库。
bogon:apache-hive-1.2.2-src jiangzz$ mvn -Phadoop-2 -Pdist -DskipTests -Dmaven.javadoc.skip=true clean package
....
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for Hive 1.2.2:
[INFO]
[INFO] Hive ............................................... SUCCESS [01:01 min]
[INFO] Hive Shims Common .................................. SUCCESS [01:19 min]
[INFO] Hive Shims 0.20S ................................... SUCCESS [ 12.034 s]
[INFO] Hive Shims 0.23 .................................... SUCCESS [01:03 min]
[INFO] Hive Shims Scheduler ..........