windows本地编译调试hbase-3.0.0-alpha-2-SNAPSHOT源码
前言
研究hbase的原因有两方面:一是自己是做大数据相关的开发工作,hbase这一类的存储是绕不过去的,二是因为研究图数据库janusGraph,底层的图数据存储的是hbase和ES,如果对于janusgraph对于数据在hbase中的建模,存储,插入,更新,删除等逻辑如果不是很了解的话,对于图数据库的数据的存储和使用都存在很大的问题,很难推动产品落地和改进工作。所以决定对hbase进行深入研究。后续会有hbase和janusgraph相关技术文档的持续更新,有兴趣可以持续关注。
代码下载,编译与调试
- hbase对应代码在github上都有下载,大家可以自行下载对应版本的代码,本文针对的是3.0.0-alpha-2-SNAPSHOT版本,代码链接如下:https://github.com/Zaizai1993/hbase.git
- 下载完代码之后,导入到idea,maven编译命令如下:mvn package -DskipTests assembly:single。
- HMaster启动参数与启动效果如下,对应参数值配置改成自己的对应的配置:
-Dhbase.home.dir=D:/work/code/own/hbase/hbase
-Dhbase.log.dir=D:/work/code/own/hbase/hbase/data/log
-Dhbase.log.file=hbase-root-master.log
正常启动之后效果如下: 4. Hbase shell 启动参数与启动效果如下: -Dhbase.ruby.sources=D:/work/code/own/hbase/hbase/hbase-shell/src/main/ruby D:\work\code\own\hbase\hbase\hbase-shell\src\main\ruby\jar-bootstrap.rb 到此处hbase源码本地编译运行完成。
问题解决
编译过程中遇到很多问题,问题与解决方案如下:
- 问题:ERROR DOM element is - not a log4j:configuration element.
解决方案:启动参数不要配置-Dlog4j.configuration=file:///D:/work/code/own/hbase/hbase/hbase-server/src/main/resources/log4j2.xml - 问题:HADOOP_HOME and hadoop.home.dir are unset.
解决方案:下载对应版本hadoop解压并配置HADOOP_HOME,并且安装wintils,winutils的下载链接如下:https://github.com/Zaizai1993/hadoop-windows-support.git,自行替换对应版本的bin目录的文件 - 问题:ExitCodeException exitCode=-1073741515
解决方案:安装C++集合,链接如下:链接:https://pan.baidu.com/s/1RsVgWDEtZfn22_gPWIEw4g 提取码:9emm - 问题:org.apache.hadoop.io.nativeio.NativeIO
P
O
S
I
X
.
s
t
a
t
(
L
j
a
v
a
/
l
a
n
g
/
S
t
r
i
n
g
;
)
L
o
r
g
/
a
p
a
c
h
e
/
h
a
d
o
o
p
/
i
o
/
n
a
t
i
v
e
i
o
/
N
a
t
i
v
e
I
O
POSIX.stat(Ljava/lang/String;)Lorg/apache/hadoop/io/nativeio/NativeIO
POSIX.stat(Ljava/lang/String;)Lorg/apache/hadoop/io/nativeio/NativeIOPOSIX$Stat;
解决方案:hadoop3.1使用了winutils使用了3.0的,改为使用3.1或者更高的版本就行 - 问题:NameError: uninitialized constant IRB::Irb
解决方案:hbase shell启动参数配错了,应该使用D:\work\code\own\hbase\hbase\hbase-shell\src\main\ruby\jar-bootstrap.rb而不是D:\work\code\own\hbase\hbase\hbase-shell\src\main\ruby\irb\hirb.rb - 问题:LoadError: load error: irb/completion – java.lang.NoSuchMethodError: jline.console.completer.CandidateListCompletionHandler.setPrintSpaceAfterFullCompletion(Z)V
解决方案:hbase父pom的jline版本过低,改为高版本就行,修改如下:
<!--<jline.version>2.11</jline.version>-->
<jline.version>2.14.6</jline.version>
|