hbase-window|hbase-window idea调试源码
个人觉得debug运行代码是理解代码最为有效的方式,所以今天说一下在window上使用idea进行调试运行hbase源码(使用的是cdh版本的hbase)。下面将从环境配置、源码编译、配置修改以及运行四个方面进行讲解。
环境配置
1).下载源码,本次讲解的是cdh的hbase,所以git地址为:https://github.com/cloudera/hbase.git
2).idea环境配置,使用idea打开下载的pom文件,进行下面图片所示的配置
文章图片
文章图片
文章图片
3)切换hbase源码版本。
文章图片
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版本,修改前后对比如下图:
文章图片
2)执行命令:mvn compiler
修改pom文件,如下图所示:
文章图片
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,如下图所示
文章图片
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文件中的类将D:\softpath\IntelliJ IDEA 2018.2.8\bin\idea.properties文件中的idea.max.intellisense.filesize属性调大,重启idea即可。
因为在idea中将文件超过2500k的文件不当java类看,将D:\softpath\IntelliJ IDEA
修改文件 1)修改hbase\conf\hbase-site.xml配置文件中的内容
2)修改代码
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
设置端口,避免重启之后端口发生变化
修改LocalHBaseCluster.java文件中,将一些固定值参数注释,如下图所示:
文章图片
防止本地调试时重新分配master的端口,导致和zk中存储的active master的端口不一致,从而报错hbase Master not active after 30 seconds,无法成为active master。
启动 hmaster启动
1)添加hbase-server的resource文件夹
文章图片
2)配置hmaster启动参数
文章图片
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启动参数
文章图片
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|hbase-window idea调试源码】今天的分享就到这,有看不明白的地方一定是我写的不够清楚,所有欢迎提任何问题以及改善方法。
推荐阅读
- 移动端h5调试方法
- IDEA|IDEA 创建工程
- 15、IDEA学习系列之其他设置(生成javadoc、缓存和索引的清理等)
- 那些年bug总结出来的调试代码技巧
- The|The ideal servant
- IDEA使用Maven管理项目包,缺少pom文件中引入的依赖包
- 汇编实验(格雷码转二进制(ASCII码)的实现和调试)
- IntelliJ IDEA 永久破解激活教程(亲测有效)
- 90天30个TED演讲|90天30个TED演讲 - Day 25: How to get your ideas to spread
- Intellij|Intellij Idea 配置Web项目