HBase二次开发之搭建HBase调试环境,如何远程debug HBase源代码
版本
HDP:3.0.1.0
HBase:2.0.0
一、前言
之前的文章也提到过,最近工作中需要对HBase进行二次开发(参照HBase的AES加密方法,为HBase增加SMS4数据加密类型)。研究了两天,终于将开发流程想清楚并搭建好了debug环境,所以就迫不及待地想写篇文章分享给大家。
二、思路
首先看到这个需求,肯定是需要先实现HBase配置AES加密《HBase配置AES加密》,或者还可以再继续了解实现SMS4加密算法《Java版SMS4加密解密算法》。等到这些都完成之后,就需要想办法实现HBase的SMS4数据加密了。这里我们要养成一种思路,那就是看官网。根据参考官网,只得到如下信息:
需要实现org.apache.hadoop.hbase.io.crypto.CipherProvider
类,所以先要搞清楚这个类在哪个jar包里面。最后,在/usr/hdp/3.0.1.0-187/hbase/lib/
目录下的hbase-common-2.0.0.3.0.1.0-187.jar
包里面发现了这个类。
接着就想,怎么才能二次开发这个jar包呢?于是先使用Java Decompiler
工具(文末有获取方式),反编译该jar包,看了看AES加密模块的代码,发现必须要debug相关代码,了解其流程,这样才会对我之后的二次开发有帮助。
现在就遇到了两个问题:
- 如何二次开发这个jar包,哪怕是一行LOG输出也行
- 如何远程debug HBase源代码
中间曾尝试过使用Java Decompiler
工具反编译得到jar包的java文件,发现自己真是too young too simple
,反编译出来的工程编译失败,发现需要依赖父工程。感觉就是要编译整个HBase源码。
可是,我上哪去找对应的HDP版本的HBase源码呢?
三、获取hdp各组件源代码的小窍门
之所以叫小窍门,是真的找不到对应 HDP
版本的 HBase
源码啊,hortonworks
官网上也没有啊。然后就各种上网查资料呗,终于功夫不负有心人让我查到了,那就是 hortonworks
的 github
。下面说一下步骤。
打开浏览器,访问https://github.com/hortonworks,点击右上角的搜索框,在当前 organization
内搜索你想要的 hdp
组件的源码即可。
就拿如何获取对应HDP版本的HBase源码为例吧:按照上述方法搜索,如下图所示:
选择 hbase-release
,如下图所示:
我用的 hdp 3.0.1.0-187
,所以我找到
然后使用 git
工具,将源码下载。hbase
的 tag
有很多,不需要所有的都下载下来,这里我们选择下载 HDP-3.0.1.0-187-tag
的源码。命令如下所示:
git clone -b HDP-3.0.1.0-187-tag --depth 1 https://github.com/hortonworks/hbase-release.git
这样就将对应 HDP
版本的 HBase
源码下载下来了,其余组件的下载也是按照此方法。
四、编译
源码下载完成后,就需要编译。因为我猜想通过Ambari安装的HBase源码目录(/usr/hdp/3.0.1.0-187/hbase/
),就是HBase编译后的代码。是或者不是或者有没有差异,等试过才知道,要大胆地去尝试。
使用maven编译,为了提速,修改maven的镜像:
编辑 setting.xml
文件,vim /usr/maven/apache-maven-3.3.9/conf/settings.xml
,找到<mirrors>
标签,在里面添加阿里云与hortonworks的镜像,代码如下所示:
<mirror>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>hw_central</id>
<name>Hortonworks Mirror of Central</name>
<url>http://repo.hortonworks.com/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
切换到 hbase
源码的根目录,执行编译命令:
mvn package -DskipTests assembly:single
编译成功后,如下图所示:
进入 hbase-assembly/target/
目录,会发现生成了 tar.gz
包,解压以后,就是 hbase
的可运行源码了,与使用 Ambari
安装的 HBase
源码一致:
解压该 tar
包,看看具体内容,如下图所示:
hbase
的各模块编译后会生成 jar
包放入 lib
目录下,当然里面也有我要的 hbase-common-2.0.0.3.0.1.0-187.jar
文件。
五、远程debug HBase源代码
1. 配置HBase
如何二次开发 hbase-common-2.0.0.3.0.1.0-187.jar
已经解决了。那么如何远程 debug HBase
源码呢?首先需要分析 debug HBase
哪个组件的源代码?之前配置好 HBase AES
加密后,我是在 hbase shell
里面对HBase表的列族进行加密设置的,所以我需要操作 hbase shell
来触发 HBase
的 AES
模块。
想着如果 HBase Master
挂了的话,HBase shell
也是不可用的状态,所以就先试试 debug HBase Master
。
首先通过 Ambari
停止 HBase Master
,修改 HBase Master
所在主机的 hbase-env.conf
文件,在 export HBASE_MASTER_OPTS
处添加以下配置:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
需要确保 5005
端口没有被占用,添加后如下图所示:
如果要调试其它组件的话,我猜测也是这种方法。
为防止 debug
时间过长导致的 hbase master
服务停止,需要修改 hbase-site.xml
文件:
<property>
<name>zookeeper.session.timeout</name>
<value>900000</value>
</property>
原值设置超时为90秒,现在改为15分钟。
修改完成之后,我们启动我们的HBase Master,注意这里不能通过Ambari来启动HBase Master了,会覆盖掉修改的配置,在命令行中使用hbase用户来启动我们的HBase Master。具体命令如下所示:
sudo -u hbase /usr/hdp/current/hbase-master/bin/hbase-daemon.sh --config /usr/hdp/current/hbase-master/conf start master
启动完成之后,建议实时查看日志的输出:
tail -f /var/log/hbase/hbase-hbase-master-xxx.log
2. 映射Linux代码到windows本地
我是将HBase源代码下载到Linux上,进行编译。然后使用Samba工具,将linux上的指定目录映射到Windows的网络驱动器,然后再通过idea打开。这样就实现了使用本地的idea打开linux上的代码了。修改idea上的代码,其实就是修改的linux上的代码。具体Samba配置可参考我写的博客:Samba安装配置。
3. 配置IDEA
远程服务以 DEBUG
模式成功启动后,IDEA
连接上对应的 DEBUG
端口,就能打断点调试了(请确保服务端代码和本地代码一致),Run -> Edit Configurations,具体配置如下图所示:
添加一个新配置,选择 Remote
,如下图所示:
配置远程服务地址和端口:
在相关代码上打上断点,启动调试,如下图所示:
出现Connected to
字样,证明debug
模式已开启。执行HBase shell
,创建一个AES
加密类型的表:
create 'hbase_1102', {NAME=>'cf1', ENCRYPTION => 'AES'}, {NAME=>'cf2'}
会触发断点,这时候就可以debug
代码了,看看代码逻辑等。如下图所示:
六、总结
本篇文章篇幅较长,但都是满满的干货,将这两天的成果记录在这,也希望能够帮助到大家。主要解决了
- 如何二次开发这个jar包,哪怕是一行LOG输出也行
- 如何远程debug HBase源代码
如果面对未知的东西,主要还是敢于尝试吧,万一成功了呢 ~
环境什么的都准备好了,接下来,就要对HBase源代码进行研究了。想想去年debug Ambari Server源码的时候,感觉和现在差不多的样子,想想就酸爽,祝我自己成功吧~
有想要 Java Decompiler
反编译工具的朋友,可扫描下方二维码回复 0425
关键字获取。
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是 人才。
白嫖不好,创作不易。 各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
HBase二次开发之搭建HBase调试环境,如何远程debug HBase源代码的更多相关文章
- Redis源码漂流记(二)-搭建Redis调试环境
Redis源码漂流记(二)-搭建Redis调试环境 一.目标 搭建Redis调试环境 简要理解Redis命令运转流程 二.前提 1.有一些c知识简单基础(变量命名.常用数据类型.指针等) 可以参考这篇 ...
- 用Intellij idea搭建solr调试环境
最近在使用solr时,配置会有一些问题,log里面打印出日志了,但是还是不知道发生这样错误的原因.于是想学习一下相关的solr源码,以下是如何搭建solr调试环境步骤. solr调试环境搭建,首先下载 ...
- OSGI企业应用开发(二)Eclipse中搭建Felix运行环境
上篇文章介绍了什么是OSGI以及使用OSGI构建应用的优点,接着介绍了两款常用的OSGI实现,分别为Apache Felix和Equinox,接下来开始介绍如何在Eclipse中使用Apache Fe ...
- 使用Sublime Text搭建python调试环境
原文地址:http://blog.csdn.net/wenxuansoft/article/details/38559731 pycharmt等IDE虽然用着爽,但毕竟在速度.资源上还是比较让人不爽的 ...
- win10下正确使用Sublime Text搭建python调试环境
pycharmt等IDE虽然用着爽,但毕竟在速度.资源上还是比较让人不爽的. 使用IDE无非是图个方便省事,特别是像我这种有些记性差的来说. IDE说起来方便于的几个地方就是: 1.语法颜色高亮 ...
- 使用Sublime Text搭建python调试环境[转]
pycharmt等IDE虽然用着爽,但毕竟在速度.资源上还是比较让人不爽的. 使用IDE无非是图个方便省事,特别是像我这种有些记性差的来说. IDE说起来方便于的几个地方就是: 1.语法颜色高亮 2. ...
- HBase 二次开发 java api和demo
1. 试用thrift python/java以及hbase client api.结论例如以下: 1.1 thrift的安装和公布繁琐.可能会遇到未知的错误,且hbase.thrift的版本 ...
- saiku3.8二次开发项目搭建(非maven)
参考文章:http://blog.csdn.net/gsying1474/article/details/51603535 本文大部分参考了上面的博文,这里只是做一个记录,由于本人maven能力有限, ...
- 用Qemu模拟vexpress-a9 (二) --- 搭建u-boot调试环境
参考: http://blog.csdn.net/caspiansea/article/details/12986565 环境介绍 Win7 64 + Vmware 11 + ubuntu14.04 ...
随机推荐
- asp dotnet core 支持客户端上传文件
本文告诉大家如何在 asp dotnet core 支持客户端上传文件 新建一个 asp dotnet core 程序,创建一个新的类,用于给客户端上传文件的信息 public class Kanaj ...
- HDU4528 小明捉迷藏 [搜索-BFS]
一.题意 小明S在迷宫n*m中找大明D和二明E,障碍物X不能走,问你计算是否能在时间t内找到大明和二明 二.分析 2.1与普通的BFS不同,这里可以走回头路,这里应该建立四维的标记数组标记数组,例如v ...
- hexo+github搭建博客(超级详细版,精细入微)
# 前言 你了解[Hexo]( https://hexo.io/zh-cn/ "Hexo官网")吗? Hexo是一个静态博客框架,基于Node.js,将Markdown文章通过渲染 ...
- shellcode超级反杀
shellcode超级免杀 作者声明: 本文章属于作者原创,不能转载,违反网络安全法自己承担.这里只供学习使用. 日期: 2019-12-30 我试过了电脑管家,火绒安全,360....一系列杀毒软件 ...
- Mac常用的软件推荐
Alfred 效率软件,让能更快的启动各种软件 VScode 编辑器,市面上最热的编辑器,好用的不只是一点点,加上Vim插件简直就是秒杀市面上各种IDE PicGo 一个开源图床软件,支持各大网站的图 ...
- SpringBoot系列——启用https
前言 有时候我们需要使用https安全协议,本文记录在SpringBoot项目启用https 生成证书 自签名证书 使用java jdk自带的生成SSL证书的工具keytool生成自己的证书 1.打开 ...
- centos curl命令post携带body json数据
1,接口链接 https://xxx.com/xqAppServer/api/APPBizRest/idfaDuplicateRemove/v1/?sysIdfa=661743D1-A76E-498A ...
- 登录密码忘记修改jenkins
find / -type f -name 'config.xml' 然后需要删除config.xml文件中的以下内容: <useSecurity>true</useSecurity& ...
- JVM探秘:内存分配与回收策略
本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 内存分配一般关注的是对象在堆上分配的情况,对象主要分配在新生代的Eden区中,如果启用 ...
- zabbix 4.04 安装文档 - 基于CentOS 7.6
1 安装前准备: 1.1 安装JDK 卸载openjdk # rpm -qa | grep java # yum remove java-1.8.0-openjdk # yum remove ...