1. 编译环境准备

Jdk:1.7.0_x

Maven : 3.3.9

hbase: cdh5.4.2-release

2. 用idea打开项目

使用git clone得到HBase源码。打开git:



将HBase项目拉取到本地:

拉取完毕之后,在idea的命令窗口,使用命令 git checkout cdh5.4.2-release,切换到和生产环境对应的HBase版本。



切换完成后项目结构如下:

3. 编译前准备

3.1 为maven-resources-plugin指定版本

打开 hbase项目根目录下的pom.xml文件,找到maven-resources-plugin,为其指定好version。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4</version>
<plugin>

3.2 跳过版本检查

打开conf文件夹在hbase-site.xml添加如下设置

<property>
<name>hbase.defaults.for.version.skip</name>
<value>true</value>
</property>

3.3 生成模板代码

在hbase-server的jamon包下,有以jamon为后缀名的文件,jamon是一种模板语言,可以把该文件生成java文件。

在http://www.jamon.org网站下载jamon程序jamon-dist-2013.12.28.zip。

解压后拷贝jamon-api-2.3.1.jar jamon-processor-2.4.2.jar jamon-runtime-2.4.1.jar到源码的\hbase-server\src\main\jamon目录:

然后在该文件夹打开命令行执行以下命令处理jamon文件:

java -cp .;jamon-api-2.3.1.jar;jamon-processor-2.4.2.jar;jamon-runtime-2.4.1.jar org.jamon.compiler.TemplateProcessor --srcDir=. --destDir=. org\apache\hadoop\hbase\tmpl\regionserver\*

java -cp .;jamon-api-2.3.1.jar;jamon-processor-2.4.2.jar;jamon-runtime-2.4.1.jar org.jamon.compiler.TemplateProcessor --srcDir=. --destDir=. org\apache\hadoop\hbase\tmpl\common\*

java -cp .;jamon-api-2.3.1.jar;jamon-processor-2.4.2.jar;jamon-runtime-2.4.1.jar org.jamon.compiler.TemplateProcessor --srcDir=. --destDir=. org\apache\hadoop\hbase\tmpl\master\*

jamon文件会生成相应的java文件,然后将hbase-server的src/main/jmon加入src路径,就可以引用到新生成的java文件了。

4. 编译HBase代码

在idea的命令窗口执行命令:mvn package -Dmaven.test.skip=true assembly:single,输出如下图则打包成功。

在各模块的target目录可得到相应jar包,当我们打了补丁后编译出的jar包就可以放到集群的/usr/lib/hbase/lib目录中替换了。

5. 本地调试HBase

5.1本地启动HMaster

添加hbase/conf 作为 hbase-server模块的 resources文件夹:

然后运行hbase-server模块中的HMaster类,配置参数如下图:



输出下面的信息说明启动成功。



可在本地进行访问HBase:localhost:60010

5.2 本地启动hbase-shell

启动配置如下:

VMoption为:

-Dhbase.ruby.sources=E:\IdeaProjects\source\cdh5.4.2\hbase\hbase-shell\src\main\ruby
-Dlog4j.configuration=file:E:\IdeaProjects\source\cdh5.4.2\hbase\conf\log4j.properties

启动完成后可以在console窗口执行shell命令。

另外,Debug也可以针对HBase提供的测试用例,大部分用例都是基于一个本地模拟的Mini Cluster运行的。

这个Mini Cluster运行在一个进程中,使用线程模拟HBase的关键进程。

有些测试用例在window端启动可能会报无法找到文件的错误,需要在linux系统中执行用例才能正常。

这个过程中,我们可以动手小改一下源码,验证自己的想法,或者观察因为改动所带来的行为变化,对熟悉HBase源码大有裨益

最新文章

  1. jvm内存默认大小,及如何调整大小
  2. Bullet的学习资源(用Doxygen生成API文档)
  3. Linux内核模块设计
  4. review again and again
  5. 配合crond服务实现自定义周期备份MySQL数据库(使用innobackupex进行备份)
  6. Newton-Raphson算法简介及其R实现
  7. 【Alpha版本】 第四天 11.10
  8. 【转】Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结
  9. cookie和session区别
  10. 关于C++类中的成员
  11. ASP.NET MVC5学习笔记之Action参数模型绑定基本过程
  12. CSS属性值一览
  13. C#编写Windows 服务
  14. Tower Defense Game
  15. spring源码浅析——IOC
  16. 利用maven打jar包(项目来自GitHub)
  17. mint-ui loadmore使用方法和注意事项
  18. Image.fromarray的用法
  19. JavaScript中的typeof操作符用法实例
  20. Java Comparator字符排序(数字、字母、中文混合排序)

热门文章

  1. docker学习笔记 参考
  2. c++builder XE6 线程 tthread
  3. MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法
  4. 边框(border)宽度样式颜色 和基本属性
  5. CStatic控件SS_NOTIFY属性
  6. Haskell语言学习笔记(30)MonadCont, Cont, ContT
  7. mongodb first
  8. Eclipse中Git插件使用技巧:还原文件
  9. Python staticmethod() 函数
  10. INI