龙空技术网

干货 | HDP的HBase二次开发之如何远程debug HBase源代码

大数据实战演练 208

前言:

今天各位老铁们对“apachedebug启动”大概比较关切,咱们都需要知道一些“apachedebug启动”的相关知识。那么小编也在网上汇集了一些关于“apachedebug启动””的相关内容,希望大家能喜欢,姐妹们快快来学习一下吧!

特别说明:该专栏文章均来源自微信公众号《大数据实战演练》,欢迎关注!

版本

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。下面说一下步骤。

打开浏览器,访问,点击右上角的搜索框,在当前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 

这样就将对应 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>;/url> <mirrorOf>central</mirrorOf> </mirror><mirror> <id>hw_central</id> <name>Hortonworks Mirror of Central</name> <url>;/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关键字获取。

熬夜写完文章,希望老铁们 关注我 或 帮忙转发点赞,比!

--END--

码字不易,如果您觉得文章写得不错,请关注作者~ 您的关注是我写作的最大动力

标签: #apachedebug启动