HBase 在linux环境下本地编译及调试

来源:互联网 发布:windows程序设计 编辑:程序博客网 时间:2024/05/18 00:39

为了更深入的了解HBase的工作流程,对源码进行跟踪调试是一个很好的办法,所以我在网上搜了一通,具体的本地编译及调试方法如下:

下载HBase源码:

可以采用两种办法,办法1,直接从Apace官网下载源码包hbase-1.2.6-src.tar.gz,办法2,使用eclipse的import命令,从git上下载源码包。我使用的是方法2,首先打开eclipse,然后File->import->Git,在新打开的窗口中如下图所示填写:
然后选择你想要的分支,这里选择的是1.2分支

编译HBase源码:

网上很多教程说需要先编译Hadoop源码才能编译HBase,但是本人亲测,如果只是在单机节点测试,即使用standalone模式是不需要事先编译Hadoop源码的。
        在编译源码前,需要准备JDK,Maven等工具。
首先,一般ubuntu都自带JDK1.8,所以我们可以不用去Oracle官网下载JDK,直接使用本机的JDK配置JAVA_HOME环境变量,该环境变量应该设置成包含可执行文件bin/java的目录,当然也可以是指向可执行文件的软链接。在我的机子上,该环境变量的值为/usr/java/jdk1.8.0_111/。
        接下来,是maven工具的安装,可以直接sudo apt-get install maven,当然如果觉得版本不够新的话,也可以自己去官网下载安装,下载后给PATH环境变量添加bin/mvn所在的目录。
准备好这些工具就可以开始编译了,直接去HBase源文件所在的目录,执行mvn clean install -DskipTests,编译成功后,关闭eclipse,仍然在当前目录执行mvn eclipse:eclipse,这样是为了生成eclipse所需要的.project文件。接下来就是在eclipse里引入HBase 这一project了

import HBase:

打开eclipse,File->import->General->Existing Projects into Workspace.选择HBase源码所在的目录为根目录,然后勾上Search for nested projects。就可以点finish结束了。这时候你的eclipse里应该就引入了HBase这一project了。现在可以设置在eclipse里调试HBase相关程序的configuration

Debug Configuration设置:

为了能在单机节点上运行HBase,我们需要在conf/hbase-site.xml下设置相关数据的存储目录。即在hbase-site.xml里加入以下配置信息:
<configuration>  <property>    <name>hbase.rootdir</name>    <value>file:///home/testuser/hbase</value>  </property>  <property>    <name>hbase.zookeeper.property.dataDir</name>    <value>/home/testuser/zookeeper</value>  </property></configuration>
其中,hbase.rootdir的value是用来存放HBase数据的目录,你不需要事先创建hbase目录,只需要事先保证/home/testuser目录存在就行。当然,你也可以自己配置成别的目录。hbase.zookeeper.property.dataDir的value我现在暂时只知道是给zookeeper用的,具体干什么用的不太知道。配置完这些后,我们就可以在eclipse里配置Debug configuration了。
我们知道HBase架构里有一个HMaster是负责管理整个集群的。所以我们程序的起点也就在HMaster这个类里面,我们需要在Debug configuration里设置这个类的启动参数。Run->Debug configuration->Java Application,进行如下设置
    注意Classpath的Bootstrap Entries是通过Advanced 中Add folders 设置的,值为hbase源码下conf目录。即我们刚才设置hbase-site.xml所在的目录。
    并且在Arguments里设置参数start。然后点击Debug,这时候HMaster应该就可以启动了。当在Console里看见Master has completed initialization后,就意味着HMaster成功启动了,你也可以在浏览器中输入http://localhost:16010 来验证,类似的,我们也可以把Arguments改成stop,新增一个让HMaster结束的JAVA Application。当然,光有一个HMaster我们无法操控HBase,所以接下来是HBase shell的配置。
    
    如图所示进行配置,其中需要注意的是Arguments中VM arguments的配置,其中的两个路径你可以对应到你源码所在的路径。Classpath与HMaster的配置相同,就不在列出,现在点击Debug,你就可以在eclipse里执行HBase的相关命令了。如Create ,Put等等。


   好的,现在我们完成了HBase在本地编译和调试的相关配置。

   下面列举下运行时出现的异常情况
1.运行HMaster,报错:hbase-default.xml file seems to be for and old version of HBase【4】
出现这种异常似乎是你修改了某个源码文件,这时候需要在hbase-site.xml添加如下设置

<property>    <name>hbase.defaults.for.version.skip</name>    <value>true</value>    <description>    Set to true to skip the 'hbase.defaults.for.version' check.    Setting this to true can be useful in contexts other than    the other side of a maven generation; i.e. running in an    ide.  You'll want to set this boolean to true to avoid    seeing the RuntimException complaint: "hbase-default.xml file    seems to be for and old version of HBase (0.92.1), this    version is X.X.X-SNAPSHOT"    </description>  </property>
再重新编译即可
  参考文献:
【1】http://www.cnblogs.com/superhedantou/p/5567787.html
【2】http://blog.javachen.com/2013/11/01/debug-hbase-in-eclipse.html
【3】http://www.cnblogs.com/shitouer/archive/2012/10/24/2736923.html
【4】http://blog.yoodb.com/yoodb/article/detail/157




原创粉丝点击