idea debug调试_HBase源码 | HBase2.X源码导入IDEA并开启Debug调试

1. 前言

之前写过一篇 HBase 源码调试相关的文章,是基于社区版的 HBase1.2.0。但是,按照之前记录的方法来进行 HBase2.x 源码编译调试的时候,却总是遇见一些莫名其妙的错误。直至这两天看到一篇大神写的博客,并加以自己的实践,最终,成功在 IDEA 中编译并调试通过了社区版的 HBase2.1.0 的源码。至此,HBase1.x 和 HBase2.x 的源码编译和在 IDEA 中 DEBUG 的方案便更加完整了。

借鉴的博客地址会放在文末的参考链接中,本文会取其长处,同时也会记录一些它没有涉及到的问题。

2. 源码获取

本文编译源码使用到的 HBase 版本是社区版的 HBase2.1.0,其中,源码的获取不是通过 gihub,而是直接在其官网上下载的源码包。

http://archive.apache.org/dist/hbase/2.1.0/

3. 编译环境

  • jdk 1.8
  • Apache Maven 3.5.0 (之前使用的 maven 版本是 3.6.3,发现会遇到一个 findbugs-maven-plugins:3.0.0 的编译异常,网上推荐的解决方案是降低 maven 版本)
  • Mac OS (Windows 系统下有些命令会有些差异)
  • idea

4. 开始编译

4.1 maven 相关的配置

解压源码,直接用 IDEA 打开源码所在的文件夹,然后在 IDEA 中配置 maven 仓库。

04c0ff9bb1c7bf1a56bbb538f35fbc6e.png
maven

编译项目时需要下载大量依赖,所以可以在 maven 的 conf/setting.xml 文件中配置一些镜像来加速下载。

 <mirrors>
    <mirror>
        <id>aliyunid>
        <mirrorOf>*,!clouderamirrorOf>
        <name>Nexus Release Repositoryname>
        <url>http://maven.aliyun.com/nexus/content/groups/publicurl>
    mirror>
    <mirror>
        <id>centralid>
        <name>Maven Repository Switchboardname>
        <url>https://repo1.maven.org/maven2/url>
        <mirrorOf>centralmirrorOf>
    mirror>
    
    <mirror>
        <id>maven.net.cnid>
        <name>oneof the central mirrors in chinaname>
        <url>http://maven.net.cn/content/groups/public/url>
        <mirrorOf>centralmirrorOf>
    mirror>
  mirrors>

4.2 执行编译命令

如果配置了 maven 的环境变量,那就直接在项目所在目录下运行如下的编译命令:

mvn clean package -DskipTests

或者在 idea 中使用 maven 的编译插件,具体步骤如下:

4a68c81c31bdbe9a8f85c998850d15f7.png
step1

右键点击,选择创建一个编译的 configuration。

737ae84c6018bccff794a607706bd9f2.png
step2

点击运行

67c07da1139d3aeea6be27ffd5b9b168.png
steps

如果遇到如下异常,请更改 maven 的版本为 3.5.0

34449c7b9905470077bca997dad2045c.png
error

经过漫长的依赖下载和编译,成功后的截图如下:

737d336359169fef602e2eb2940c6c2f.png
success

编译成功后,就可以尝试运行 HBase 的源码了。

5. 在 IDEA 中运行 HBase 集群

5.1 运行 HMaster 进程

把源码所在文件夹下的 conf 目录复制到 hbase-server 目录下。

把新拷贝的 conf 目录加到 hbase-server 模块的 classpath 中,【右键 conf】->【Mark Directory as】->选择【Resource Root】

26720978fbd90f4f3a8916b21447aed7.png
resource

配置面板新增 Application,application 命名为 HMaster,配置 HMaster 启动参数如下:

612a4be7ebd17aa2eaa779cbf154e6ce.png
HMaster

图中的几处地方需要按照如下的方式配置,只是涉及到项目所在的路径需要换成自己实际的项目路径。

  1. HMaster

  2. org.apache.hadoop.hbase.master.HMaster

  3. -Dproc_master -XX:OnOutOfMemoryError="kill -9 %p" -XX:+UseConcMarkSweepGC -Dhbase.log.dir=/Users/mac/other_project/apache/hbase/hbase-2.1.0/logs -Dhbase.log.file=hbase-root-master.log -Dhbase.home.dir=/Users/mac/other_project/apache/hbase/hbase-2.1.0/bin/. -Dhbase.id.str=root -Dhbase.root.logger=INFO,console,DRFA

  4. start

  5. 选择 hbase-server 模块

备注:

第三处需要配置一些 JVM 参数,指定日志的 Appender

启动(run)或者调试(debug)HMaster。

014faf5a26330ed7caeaf2a98c076208.png
run

调试运行的时候可能遇到如下错误:

d3c8f857b15c237fe30976f5dec42596.png
error1

这个异常在上篇博客中有提及到,需要用 jamon 插件把 hbase-server 的 jamon 目录下的模板文件处理成 java 文件。

22addd3edaa55e3ee8fcaef99f297743.png
jamon

jamon 具体的使用请参考上篇文章,此处不过多赘述。生成好 Java 代码后,上图中的红线异常就会消失。

037a780268d8d263000afe29af2f81b6.png
jamon2

继续编译,可能还会遇见如下异常。

18ab8169bf01cecb300d95a4957d52fe.png
version-error

这个错误是 version 不匹配的错误,直接在 hbase-default.xml 文件中做如下修改。

f4c2c937ccf7995a266356f44d8d6287.png
version

在此处加入具体的版本号。

继续点击 run 和 debug 按钮,不出意外的话,HMaster 进程就会顺利启动,其中控制台可能会输出如下异常,但不影响最终的使用。

75e6e40494e6a55933266877823eba2f.png
ignore

如果想自定义 hbase 和 zookeeper 的数据输出目录,则需要在 hbase-server 的 conf 目录中编辑 hbase-site.xml 来加入如下配置:

<configuration>
    <property>
        <name>hbase.rootdirname>
        <value>file:///Users/mac/other_project/apache/hbase/hbase-2.1.0/data/hbase-datavalue>
    property>
    <property>
        <name>hbase.zookeeper.property.dataDirname>
        <value>/Users/mac/other_project/apache/hbase/hbase-2.1.0/data/zookeeper-datavalue>
    property>
configuration>

重启 HMaster Application 之后。

640321b6442fb5ad6bac07740580682d.png
data

5.2 IntelliJ IDEA 中运行 hbase shell

把 conf 目录拷贝到 hbase-shell 目录下,把新拷贝的 conf 目录加到 hbase-shell 模块的 classpath 中,【右键 conf】->【Mark Directory as】->选择【Resource Root】

配置面板新增 Application,application 命名 hbase shell,配置 hbase shell 启动参数如下:

535b69ce8da712a12a9297eeb6282a8d.png
hbase shell
  1. hbae shell
  2. org.jruby.Main
  3. -Dhbase.ruby.sources=/Users/mac/other_project/apache/hbase/hbase-2.1.0/hbase-shell/src/main/ruby/
  4. -X+O /Users/mac/other_project/apache/hbase/hbase-2.1.0/bin/hirb.rb
  5. 添加 hbase-shell 模块

启动 hbase shell

241f5e520cac497cc63d7be4589d3bdf.png
hbase-shell

在 console 中查看启动日志,并运行一些 shell 命令,如图:

9204078c383aabcd0b6d0e8bb163bd47.png
run-hbase-shell

mvn 编译时,请默认工程勾选的 profile,不要随意勾选其他 profile,默认的 profile 截图如下:

b7fea2c2463bc4b4728be00ddf8b3268.png
maven-profile

6. 总结

至此,HBase 源码的编译和 DEBUG 调试方案已经比较完整了,在此基础上,可以很方便地阅读 HBase 的源码和运行一些测试 demo,也可以对 HBase 进行二次开发,增加一些功能,修复一些 BUG,并重新打包和上线运行。

7. 参考链接

  • https://bbs.huaweicloud.com/blogs/180565
  • HBASE 源码导入 IDEA 并开启 DEBUG 调试
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值