hbase源码编译调试

环境

jdk 1.8.0_144

maven 3.5.4

hbase 0.98.6

hadoop 2.6.0 (需要在环境变量设置hadoop home,以及放置winutils.exe到hadoop bin目录下)

 

开始

  1. 打开 maven 的配置文件( windows 机器一般在 maven 安装目录的 conf/settings.xml ),在<mirrors></mirrors>标签中添加 mirror 子节点:

<mirror>
 <id>aliyunmaven</id>
 <mirrorOf>*</mirrorOf>
 <name>阿里云公共仓库</name>
 <url>https://maven.aliyun.com/repository/public</url>
</mirror>
  1. 选择apache hbase 0.98.6版本,code--> download zip(也可以直接在idea里通过git客户端下载)

  2. 导入源码到idea中, 修改父pom文件

<surefire.version>2.12-TRUNK-HBASE-2</surefire.version>
修改为:
<surefire.version>2.18.1</surefire.version>
  1. 在hbase client模块修改org.apache.hadoop.hbase.util.PoolMap类,注释掉如下红色部分。

  2. 在idea中选择maven package

  1. 如果出现类似错误(实际情况日志不是这样,我记不清具体是啥了)可以参考如下处理

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project xxx: There are test failures.

在对应pom.xml文件中配置跳过测试,如下:

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-surefire-plugin</artifactId>
 <version>2.18.1</version>
 <configuration>
  <skipTests>true</skipTests>
 </configuration>
</plugin>
  1. 基本就可以BUILD SUCESS了,过程中会下载很多依赖。

  2. SUCESS之后修改源码中conf文件夹下的hbase-site.xml文件,覆盖写内容如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
   <property>
       <name>hbase.defaults.for.version.skip</name>
       <value>true</value>
   </property>
   <property>
       <name>hbase.zookeeper.quorum</name>
       <value>127.0.0.1</value>
   </property>
   <property>
       <name>hbase.rootdir</name>
       <value>D:/hbaseApp/hbase-0.98/root</value>
   </property>
   <property>
       <name>hbase.tmp.dir</name>
       <value>D:/hbaseApp/hbase-0.98/tmp</value>
   </property>
   <property>
       <name>hbase.zookeeper.property.dataDir</name>
       <value>D:/hbaseApp/hbase-0.98/zkDir</value>
   </property>
   <property>
       <name>hbase.cluster.distributed</name>
       <value>false</value>
   </property>
   <property>
       <name>zookeeper.session.timeout</name>
       <value>100001</value>
   </property>
   <property>
       <name>zookeeper.session.timeout.localHBaseCluster</name>
       <value>100002</value>
   </property>
   <property>
       <name>hbase.zookeeper.property.maxSessionTimeout</name>
       <value>500000</value>
   </property>
   <property>
       <name>hbase.master.port</name>
       <value>60010</value><!--Hbase的Master的端口.默认: 60000-->
   </property>
   <property>
       <name>hbase.regionserver.port</name>
       <value>60020</value><!--HBase RegionServer绑定的端口,默认: 60020-->
   </property>
   <property>
       <name>hbase.regionserver.info.port</name>
       <value>60030</value><!--HBase RegionServer web 界面绑定的端口-->
   </property>
</configuration>
  1. 将源码下的conf目录拷贝一份放到hbase-server模块src/main下,并设置为resource目录。idea中可以选中目录右键 mark derictory as

  2. 准备在idea中启动HMaster,先idea界面最上栏选择run-->edit configurations-->+-->application配置如下: 

然后再选择run -->run hmaster,然后看日志是否有问题(如果出现Error:java:JDK isn't specified for module "XXXX"提示,需要将.idea文件夹删除,然后重新import源码到idea)启动成功之后访问localhost:60010就可以看到熟悉的master界面

  1. 参考第10步再设置hbase shell

vm options:-Dhbase.ruby.sources=D:/dev/ideaC2018.3/sourcecode/hbase-rel-0.98.6/hbase-shell/src/main/ruby -Dlog4j.configuration=file:D:/dev/ideaC2018.3/sourcecode/hbase-rel-0.98.6/conf/log4j.properties

同样执行run-->run shell

 就可以开始输入命令执行了。

 

后面就可以自己打断点进行debug了。。。

原文地址:https://www.cnblogs.com/zz-ksw/p/14348329.html