最近准备开始研究Hbase源码,因为第一次研究源码,所以做片笔记,踩坑踩的很耗时。
1.我用的IDE是IDEA,本地window需要配置JDK,MAVEN,HADOOP环境
2.上GitHub下载Hbase源码(可以使用git或直接下载):https://github.com/apache/hbase ,并解压到电脑
3.在解压后的目录中执行命令:
mvn clean package -DskipTests=true
4.解压完成后:
编译成功后仍然在当前目录执行mvn idea:idea,这样是为了生成idea所需要的.project文件
5.两次编译全部成功后,使用IDEA引入项目,并且设置conf/hbase-site.xml:
<configuration>
#hbase.rootdir的value是用来存放HBase数据的目录,你不需要事先创建hbase目录, 只需要事先保证/Users/tu/Public目录存在就行
<property>
<name>hbase.rootdir</name>
<value>file:///Users/tu/Public/hbase</value>
</property>
#取消版本验证,Hbase有时候会编译找不到版本导致报错
<property>
<name>hbase.defaults.for.version.skip</name>
<value>true</value>
</property>
</configuration>
6.开启应用:
#执行类
org.apache.hadoop.hbase.master.HMaster
#配置log4j输出
-Dlog4j.configuration=file:/Users/tu/IdeaProjects/hbase-1.2.6/conf/log4j.properties
#工作空间就用解压的目录
#并且需要调用Hbase server类
7.运行应用:
你可能会得到的错误:
1.版本检测报错:
hbase-default.xml file seems to be for and old version of HBase
解答:
重新编译一下就好了:mvn clean package -DskipTests=true
2.hadoop本地环境报错:
org.apache.hadoop.io.nativeio.NativeIO$Windows.createFileWithMode0(...
解答:
需要配置本地windows中HADOOP_HOME的系统环境变量,hbase启动会去找本地环境变量。
3.缺少winutils.exe文件:
Could not locate Hadoop executable: D:sorftwarehadoophadoop-2.8.0inwinutils.exe
解答:新下载的hadoop没有winutils.exe文件,下载一个就ok了
https://github.com/selfgrowth/apache-hadoop-3.1.1-winutils/blob/master/bin/winutils.exe
4.可以忽视的错误
java.lang.NoSuchMethodException: org.apache.hadoop.fs.LocalFileSystem.setStoragePolicy(org.apache.hadoop.fs.Path, java.lang.String)
文件系统不支持setStoragePolicy,正常错误,不管它。
现在应该可以正常跑了,访问:http://localhost:16010/master-status 查看是否成功。