HBase0.98.1-cdh5.1.2源码编译

来源:互联网 发布:ddc控制器编程 编辑:程序博客网 时间:2024/05/22 07:50

最近线上使用的hbase版本发现一个重大bug,需要修改源码才能解决问题,于是尝试着对这个源码进行修改后重新编译,记录下过程,花了2天时间,哎。

首先将hadoophbase的源码包上传到编译用的centos测试机器上,并解压:


我们第一个编译hadoop,因为hbase需要依赖hadoop的相关jar包,进入hadoop-2.3.0-cdh5.1/src后,执行命令“mvn package -Pdist -DskipTests -Dtar

成功后输出:


最终可以用于安装的hadoop包在模块hadoop-dist/target下面,文件名为“hadoop-2.3.0-cdh5.1.2.tar.gz”。

 

然后开始编译hbase源码解压后形成的目录,找到dev-support/generate-hadoopX-poms.sh文件,然后修改第77行,将$HBASE_HOME替换成解压后文件夹的绝对路径,比如本文的“/export/build/hbase-0.98.1-cdh5.1.2”,如下图所示:


接着执行该脚本,具体命令如下:
./generate-hadoopX-poms.sh 0.98.1 0.98.1-hadoop2
然后需要把所有pom.xml.hadoop2文件里面的version从0.98.1-hadoop2-cdh5.1.2改成0.98.1-cdh5.1.2,否则到时生成的hbase安装启动的时候会报错“Exception in thread "main" java.lang.RuntimeException: hbase-default.xml file seems to be for and old version of HBase (0.98.1-cdh5.1.2), this version is 0.98.1-hadoop2-cdh5.1.2-cdh5.1.2

<modules>
    <module>hbase-server/pom.xml.hadoop2</module>
    <module>hbase-thrift/pom.xml.hadoop2</module>
    <module>hbase-shell/pom.xml.hadoop2</module>
    <module>hbase-protocol/pom.xml.hadoop2</module>
    <module>hbase-client/pom.xml.hadoop2</module>
    <module>hbase-hadoop-compat/pom.xml.hadoop2</module>
    <module>hbase-common/pom.xml.hadoop2</module>
    <module>hbase-it/pom.xml.hadoop2</module>
    <module>hbase-examples/pom.xml.hadoop2</module>
    <module>hbase-prefix-tree/pom.xml.hadoop2</module>
    <module>hbase-assembly/pom.xml.hadoop2</module>
    <module>hbase-testing-util/pom.xml.hadoop2</module>
  </modules>




同时需要将生成的pom.xml.hadoop2中2.12-TRUNK-HBASE-2替换成2.18.1


出现以下异常的时候,在编译参数中加入 -Drat.numUnapprovedLicenses=100
 Too many unapproved licenses: 1 -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal o
rg.apache.rat:apache-rat-plugin


mvn -f pom.xml.hadoop2 clean compile package -Dhadoop.profile=2.0  -DskipTests=true assembly:single -Prelease -Drat.numUnapprovedLicenses=3000
如果编译没成功, 可以试着每个模块单独采用mvn clean install -DskipTests=true后,然后退到外面重新编译, 我发现多次编译操作后才可以成功。


外发现有时我们由于改动源码,只需要动某个模块,可以只编译那个模块,成功以后,将其替换掉官方安装包里对应的jar即可,这样风险小点。

有时如果出现某些jar编译的时候无法下载,可以尝试换一个maven仓库试试,具体在mavensettings.xml中更改。



0 0
原创粉丝点击