hadoop源码_HBASE源码导入IDEA并开启DEBUG调试

前言:为了更深入的理解HBase的源码,对源码进行跟踪调试是一个很好的方法。本文详细记录了把社区版的HBase1.2.0源码导入idea中,进行编译调试的过程,以及在整个操作流程中遇到的一些坑。

27daf43edbb788cc72d5a97243feb60c.gif

一、我的环境

开始操作前,请确认自己的环境,避免因为软件环境的原因,产生没有记录到的问题。

  • jdk 1.8

  • Maven 3.6.1

  • Idea 2019.1.3

  • git version 2.21.1

  • HBase 1.2.0

  • Mac OS

二、下载源码

git clone https://github.com/apache/hbase
git clone https://gitee.com/mirrors/hbase.git

为了加速下载,这里我使用的是gitee的国内仓库

a73b211aafe347beb804357cc5cd2417.png

三、编译HBase源码

网上很多教程说需要先编译Hadoop源码才能编译HBase,但是本人亲测,如果只是在单机节点测试,即使用standalone模式是不需要事先编译Hadoop源码的。

JDK maven等工具大家请自行安装。

代码下载完成后,用IDEA直接打开,选择你需要的分支,初始化需要下载maven依赖,这个过程稍显漫长。

执行下面的命令进行编译:

mvn clean package -DskipTests=true

不出意外,编译命令是可以正常编译的。

beeb40396a3d5476402b0bfdcb102b5f.png
编译成功

四、本地启动HMaster

Debug Configuration设置

为了能在单机节点上运行HBase,我们需要在conf/hbase-site.xml下设置相关数据的存储目录。即在hbase-site.xml里加入以下配置信息。

<configuration>
    <property>
        # 此配置用来存放HBase的数据目录,你不需要事先创建HBase目录,只用保证其父级目录存在。
        # 当然,你也可以随意指定这个目录。
        <name>hbase.rootdirname>
        <value>file:///Users/leo_jie/Public/hbasevalue>
    property>
    <property>
        # 此配置是为了跳过版本检查
        <name>hbase.defaults.for.version.skipname>
        <value>truevalue>
    property>
configuration>

HBase架构里有一个HMaster是负责管理整个集群的。所以我们程序的起点也就在 HMaster 这个类里面。

org.apache.hadoop.hbase.master.HMaster
-Dlog4j.configuration=file:/Users/leo_jie/other_project/hbase/conf/log4j.properties# log4j.properties的目录换成你自己的

相关配置的操作如下图所示:

ac979042f0648a3572f2d4f27b1a31cc.png

红框的地方是需要注意的地方。此时,如果你直接running,不出意外会报错,报错位置在hbase-server模块,大致是tmpl相关包下的类找不到。解决方法如下。

五、生成模版代码,解决tmpl相关包下的类找不到

在hbase-server的jamon包下,有以jamon为后缀名的文件,jamon是一种模板语言,可以把该文件生成java文件。你需要把这些模版文件转成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目录:

e1bf5ecd01c1804c66a2f2a67e67d646.png

然后在该文件夹打开命令行执行以下命令处理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\*

下图演示的是转换Java代码的示例操作:

44b4509d49c9690c801822b47c773cce.png

如果你是Windows的操作系统,上述命令应该可以顺利执行,如果您是Mac用户,不出意外,你会遇到两种(可能是三种)类型的异常。一种是权限问题,一种可能是java环境变量中的CLASS_PATH没有配置,另一种是如图异常,一堆乱码。

d6f1a9594c9dd8ae76de6cd23248300f.png

解决方法是,在Mac系统下,上述命令的正式使用方式是:

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/*

分别执行成功后就可以把模版文件转成java文件了。

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

46e3c7389bde6fbc271ca52851a026a1.png

六、重新编译HBase代码

mvn clean package -DskipTests=true

七、继续运行我们的HMaster Start

运行成功后,控制台不会输出异常。HBase的MasterUI也能正常打开。http://127.0.0.1:1061

05e1a0c5d6e41c7afe722a8bed0cfc2e.png
3a118c4880f62fbc5b9020e02bd142b1.png

八、Shell

光有master我们无法与HBase交互,所以接下来需要配置HBase shell。

org.jruby.Main
-Dlog4j.configuration=file:/Users/leo_jie/other_project/hbase/conf/log4j.properties
-Dhbase.ruby.sources=/Users/leo_jie/other_project/hbase/hbase-shell/src/main/ruby
/Users/leo_jie/other_project/hbase/bin/hirb.rb
fc5bcde004065eb996c55d31df92d991.png

点击运行我们的shell。

50ef6569c6a706293004a566bb9f7187.png

最好在文本编辑器里写好命令后再粘贴过来,如果直接在 console 中写会出现回退bug。

九、总结

到此我们已经完成了HBase源码的编译和调试与交互,从此可以在源码的海洋里一脸懵逼的遨游了。文章会继续更新,以记录源码调试中遇到的问题。

十、参考链接

https://lihuimintu.github.io/2019/03/19/hbase-src-debug/
https://www.cnblogs.com/stillcoolme/p/10011189.html#_label2_1

f7ff8509fb31e33b8fd814c07ba37981.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值