开发者社区> 雨客> 正文

编译CDH HBase源代码并打补丁

简介:
+关注继续查看

写了一篇博客记录编译CDH HBase源代码并打补丁的过程,如有不正确的,欢迎指出!

下载源代码

Cloudera github上下载最新分支源代码,例如:当前最新分支为cdh4-0.94.6_4.4.0

$ git clone git@github.com:cloudera/hbase.git -b cdh4-0.94.6_4.4.0 cdh4-0.94.6_4.4.0

说明:

  1. -b 指定下载哪个分支
  2. 最后一个参数指定下载下来的文件名称

添加snappy压缩支持

编译snappy

$ svn checkout http://snappy.googlecode.com/svn/trunk/ snappy
$ cd snappy
$ sh autogen.sh
$ ./configure
$ sudo make install

编译hadoop-snappy

降低gcc版本到4.4:

$ sudo yum install gcc-4.4
$ rm /usr/bin/gcc
$ ln -s /usr/bin/gcc-4.4 /usr/bin/gcc

建立libjvm软连接

$ sudo ln -s /usr/java/latest/jre/lib/amd64/server/libjvm.so  /usr/local/lib/

下载并编译hadoop-snappy

$ svn checkout http://hadoop-snappy.googlecode.com/svn/trunk/ hadoop-snappy
$ cd hadoop-snappy
$ make package -Dsnappy.prefix=/usr/local/

安装jar包到本地仓库

$ mvn install:install-file -DgroupId=org.apache.hadoop -DartifactId=hadoop-snappy -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar -Dfile=./target/hadoop-snappy-0.0.1-SNAPSHOT.jar
$ mvn install:install-file -DgroupId=org.apache.hadoop -DartifactId=hadoop-snappy -Dversion=0.0.1-SNAPSHOT -Dclassifier=Linux-amd64-64 -Dpackaging=tar -Dfile=./target/hadoop-snappy-0.0.1-SNAPSHOT-Linux-amd64-64.tar

添加lzo压缩支持

暂不在此列出,请参考网上文章。

编译Protobuf

注意:目前只能装2.4.1版本的,装最新版本的可能会缺少文件。

$ wget https://protobuf.googlecode.com/files/protobuf-2.4.1.zip
$ unzip protobuf-2.4.1.zip
$ cd protobuf-2.4.1
$ ./configure
$ make
$ sudo make install

测试是否安装成功,如果成功你会看到:

$ protoc
Missing input file.

如果安装失败,你可能会看到:

$ protoc
protoc: error while loading shared libraries: libprotobuf.so.7: cannot open shared object file: No such file or directory

编译hbase

进入到cdh4-0.94.6_4.4.0 目录,然后运行mvn基本命令。

$ cd cdh4-0.94.6_4.4.0
$ mvn clean install

忽略测试,请添加如下参数:

-DskipTests

添加MAVEN运行时jvm大小,请在mvn前面添加如下参数:

MAVEN_OPTS="-Xmx2g"

生成javadoc和文档,请添加如下参数:

javadoc:aggregate site assembly:single

生成release加入security和native包,请添加如下参数:

-Prelease,security,native

基于hadoop2.0进行编译,请添加如下参数:

-Dhadoop.profile=2.0

添加hadoop-snappy支持,请添加如下参数:

-Prelease,hadoop-snappy -Dhadoop-snappy.version=0.0.1-SNAPSHOT

如果你添加了一些java代码,在每个文件头没有添加license,则需要添加如下参数:

-Drat.numUnapprovedLicenses=200

综上,完整命令如下:

$ MAVEN_OPTS="-Xmx2g" mvn clean install javadoc:aggregate site assembly:single -DskipTests -Prelease,security,native,hadoop-snappy -Drat.numUnapprovedLicenses=200 -Dhadoop.profile=2.0 -Dhadoop-snappy.version=0.0.1-SNAPSHOT

生成patch

修改代码之后,在提交代码之前,运行如下命令生成patch:

$ git diff >../XXXXX.patch

如果你已经将该动文件加入到提交缓存区,即执行了如下代码:

$ git add .

你可以使用如下代码打补丁:

$ git diff --staged >../XXXXX.patch

如果在提交之后,想生成patch,执行如下命令:

$ git format-patch -1

git format-patch 的详细说明请参考:git patch操作

更多diff的命令如下:

git diff <file>   # 比较当前文件和暂存区文件差异
git diff
git diff <$id1> <$id2>    # 比较两次提交之间的差异
git diff <branch1>..<branch2>    # 在两个分支之间比较
git diff --staged   # 比较暂存区和版本库差异
git diff --cached   # 比较暂存区和版本库差异
git diff --stat     # 仅仅比较统计信息

打patch

打patch:

$ git apply ../XXXXX.patch

测试patch是否打成功:

$ git apply --check  ../add-aggregate-in-hbase-shell.patch

如果出现以下错误:

$ git apply ../XXXXX.patch
fatal: git apply: bad git-diff - expected /dev/null on line 4

请安装dos2unix:

$ yum install dos2unix -y

然后,执行如下代码:

$ dos2unix ../add-aggregate-in-hbase-shell.patch

最后再尝试打补丁。

注意:

  • 请注意,git apply 是一个事务性操作的命令,也就是说,要么所有补丁都打上去,要么全部放弃。
  • 对于传统的 diff 命令生成的补丁,则只能用 git apply 处理。对于 format-patch 制作的新式补丁,应当使用 git am 命令。

升级版本

当你fork了Cloudera github代码之后,cloudera会继续更新代码、发布新的分支,如何将其最新的分支下载到自己的hbase仓库呢?例如,你的仓库中hbase最新分支为cdh4-0.94.6_4.3.0,而cdh最新分支为cdh4-0.94.6_4.4.0,现在如何将cdh上的分支下载到自己的参考呢?

查看远程服务器地址和仓库名称:

$ git remote -v
origin	git@github.com:javachen/hbase.git (fetch)
origin	git@github.com:javachen/hbase.git (push)

添加远程仓库地址:

$ git remote add cdh git@github.com:cloudera/hbase.git

再一次查看远程服务器地址和仓库名称:

$ git remote -v
cdh	https://github.com/cloudera/hbase (fetch)
cdh	https://github.com/cloudera/hbase (push)
origin	git@github.com:javachen/hbase.git (fetch)
origin	git@github.com:javachen/hbase.git (push)

抓取远程仓库更新:

$ git fetch cdh

然后,再执行下面命令查看远程分支:

$ git branch -r

下载cdh上的cdh4-0.94.6_4.4.0分支,在本地命名为cdh4-0.94.6_4.4.0:

$ git checkout -b cdh4-0.94.6_4.4.0 cdh/cdh4-0.94.6_4.4.0

将本地的cdh4-0.94.6_4.4.0分支其提交到自己的远程仓库:

$ git push origin cdh4-0.94.6_4.4.0:cdh4-0.94.6_4.4.0

排错

如果在启动 hbase 的服务过程中出现如下日志:

2013-10-24 22:44:59,921 INFO org.apache.hadoop.hbase.util.VersionInfo: HBase Unknown
2013-10-24 22:44:59,921 INFO org.apache.hadoop.hbase.util.VersionInfo: Subversion Unknown -r Unknown
2013-10-24 22:44:59,921 INFO org.apache.hadoop.hbase.util.VersionInfo: Compiled by Unknown on Unknown

请查看 src/saveVersion.sh 文件的编码及换行符是否和你的操作系统一致。编码应该设置为 UTF-8,如果你使用的是 linux 系统,则换行符应该为 unix/linux 换行符,不应该为 window 换行符。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
GAWK代码在Linux和Windows的区别
如果你的awk代码可以在Linux可以跑,在Windows下却不行,请检查代码中是否有百分号%,将所有%转义为%%。 例如我的这段处理Nginx日志时间的代码:   date = substr($2,2,11) time = substr($2,14,8) gsub("/"," ...
744 0
二路归并排序 代码实例
  感觉好久没有写排序程序了,C语言有qsort()函数,C++有sort()函数,java语言有Arrays类(主要这个不是Array)。今天写了一下归并排序还有点费劲呀。晚上回来写写。   归并排序就是采用分治法进行排序:   (1)将一个数组分成小的2个数组分别进行排序;   (2)之后...
900 0
Netbeans源代码编辑技巧——使用代码补全和代码生成
原文 Netbeans源代码编辑技巧——使用代码补全和代码生成 使用代码补全生成代码 一般来说,代码补全对于自动填充缺失的代码是有帮助的,例如标识符和关键字。截至 NetBeans IDE 6.0,您现在甚至可以用代码补全来生成整个方法。
1019 0
Web---JS-返回上一页并刷新代码整理
返回上一页并刷新在此功能有利于用户的体验,是每一个web开发人员所必备的一项,长话短说,今天介绍实现此功能的一个方法,需要了解的朋友可以参考下: 一:JS 重载页面,本地刷新,返回上一页 代码如下: 返回上一页 重载页面,本地刷新 返回上一页重载页面,本地刷新 返回前二页并刷新的JS代码应该怎样写。
1122 0
+关注
雨客
微博@JavaChen,这里的所有博客文章来自http://blog.javachen.com/。
203
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载