hbase-window idea调试源码

    个人觉得debug运行代码是理解代码最为有效的方式,所以今天说一下在window上使用idea进行调试运行hbase源码(使用的是cdh版本的hbase)。下面将从环境配置、源码编译、配置修改以及运行四个方面进行讲解。

环境配置

1).下载源码,本次讲解的是cdh的hbase,所以git地址为:https://github.com/cloudera/hbase.git

2).idea环境配置,使用idea打开下载的pom文件,进行下面图片所示的配置

hbase-window idea调试源码_第1张图片
hbase-window idea调试源码_第2张图片
hbase-window idea调试源码_第3张图片

3)切换hbase源码版本。

hbase-window idea调试源码_第4张图片

maven源码编译

1)执行命令:mvn clean validate。

    出现如下所示异常

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4 enforce (min-maven-min-java-banned-xerces) on project hbase: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed.

修改pom文件中的java版本,修改前后对比如下图:

hbase-window idea调试源码_第5张图片

2)执行命令:mvn compiler

修改pom文件,如下图所示:

hbase-window idea调试源码_第6张图片

3)执行命令:mvn clean package

 出现如下所示异常:

[ERROR] Failed to execute goal org.codehaus.mojo:findbugs-maven-plugin:3.0.0:findbugs (default) on project hbase: Unable to parse configuration of mojo org.codehaus.mojo:findbugs-maven-plugin:3.0.0:findbugs for parameter pluginArtifacts: Cannot assign configuration entry 'pluginArtifacts' with value '${plugin.artifacts}' of type java.util.Collections.UnmodifiableRandomAccessList to property of type java.util.ArrayList -> [Help 1]

pom文件中注释掉:findbugs-maven-plugin,如下图所示

hbase-window idea调试源码_第7张图片

4)执行命令:mvn clean package  -Dmaven.test.skip=true

 出现如下所示异常:

maven-antrun-plugin Cannot run program "bash" in directory

将git的bin路径添加到环境变量中的path,重启idea。

 出现如下所示异常:

exec-maven-plugin Cannot run program "env" (in directory 

将D:\softpath\Git\usr\bin添加到环境变量中的path,重启idea。

 出现如下所示异常:

编译成功之后在idea中显示找不到proto生成的java文件中的类

因为在idea中将文件超过2500k的文件不当java类看,将D:\softpath\IntelliJ IDEA

将D:\softpath\IntelliJ IDEA 2018.2.8\bin\idea.properties文件中的idea.max.intellisense.filesize属性调大,重启idea即可。

修改文件

1)修改hbase\conf\hbase-site.xml配置文件中的内容

   

        hbase.defaults.for.version.skip

        true

   

   

        zookeeper.session.timeout

        100001

        将zk timeout  设置大,避免在debug过程中出现timeout,影响调试。   

   

   

        zookeeper.session.timeout.localHBaseCluster

        100002

       

            设置本地zk timeout时间,

            本地模式HMasterCommandLine类中的startMaster方法会将zookeeper.session.timeout.localHBaseCluster设置给zookeeper.session.timeout

       

   

   

        hbase.tmp.dir

        D:\tmp\hbasedir

        Temporary directory on the local filesystem.

            Change this setting to point to a location more permanent

            than '/tmp', the usual resolve for java.io.tmpdir, as the

            '/tmp' directory is cleared on machine restart.

       

   

   

        hbase.zookeeper.property.maxSessionTimeout

        500000

   

   

        hbase.master.port

        60000

        设置端口,避免重启之后端口发生变化

   

   

        hbase.regionserver.port

        60020

        设置端口,避免重启之后端口发生变化       

   

   

        hbase.regionserver.info.port

        60030

        设置端口,避免重启之后端口发生变化        

   

 2)修改代码

修改LocalHBaseCluster.java文件中,将一些固定值参数注释,如下图所示:

防止本地调试时重新分配master的端口,导致和zk中存储的active master的端口不一致,从而报错hbase Master not active after 30 seconds,无法成为active master。

启动

hmaster启动

1)添加hbase-server的resource文件夹

hbase-window idea调试源码_第8张图片

2)配置hmaster启动参数

hbase-window idea调试源码_第9张图片

3)启动hmaster

出现如下异常

org.apache.hadoop.io.nativeio.NativeIO$Windows.createFileWithMode0(Ljava/lang/String;JJJI)Ljava/io/F

    跟踪到源码在Windows环境中会执行System.loadLibrary("hadoop");代码加载hadoop.dll文件,将环境变量path中路径中的hadoop.dll文件移除即可启动。

启动hbase-shell

1)配置hbase-shell启动参数

hbase-window idea调试源码_第10张图片

VM options:-Dhbase.ruby.sources=D:\hadoop\hbase\hbase-cdh-src\hbase\hbase\hbase-shell\src\main\ruby -Dlog4j.configuration=file:D:\hadoop\hbase\hbase-cdh-src\hbase\hbase\conf\log4j.properties

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

    配置完成之后就在关注的源码中打上断点进行调试即可,尽情在源码的世界中遨游吧。

    今天的分享就到这,有看不明白的地方一定是我写的不够清楚,所有欢迎提任何问题以及改善方法。

你可能感兴趣的:(hbase-window idea调试源码)