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 官网上也没有啊。然后就各种上网查资料呗,终于功夫不负有心人让我查到了,那就是 hortonworksgithub。下面说一下步骤。

打开浏览器,访问https://github.com/hortonworks,点击右上角的搜索框,在当前 organization 内搜索你想要的 hdp 组件的源码即可。

就拿如何获取对应HDP版本的HBase源码为例吧:按照上述方法搜索,如下图所示:

选择 hbase-release ,如下图所示:

我用的 hdp 3.0.1.0-187 ,所以我找到

然后使用 git 工具,将源码下载。hbasetag 有很多,不需要所有的都下载下来,这里我们选择下载 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 来触发 HBaseAES 模块。

想着如果 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 关键字获取。


点关注,不迷路

好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是 人才

白嫖不好,创作不易。 各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

如果本篇博客有任何错误,请批评指教,不胜感激 !

原文地址:https://www.cnblogs.com/createboke/p/12234345.html

时间: 2024-11-04 02:48:08

HBase二次开发之搭建HBase调试环境,如何远程debug HBase源代码的相关文章

利用nodejs二次开发kibana4.4.2之环境搭建

最近利用ELK做一套日志分析平台,但kibana并不能满足需求,因此需要对kibana做二次开发,搭建windows环境时遇到的各种问题,查阅了比较多的资料,发现教程都比较零散,最后通过几天的摸索,将问题最终解决,下面做一个汇总: 1.首先就是kibana4.4.2的nodejs必须是4.3.2的版本: 2. 其次需要下载Visual Studio Express 2013 with Update 5,地址: https://go.microsoft.com/fwlink/?LinkId=532

用Intellij idea搭建solr调试环境

最近在使用solr时,配置会有一些问题,log里面打印出日志了,但是还是不知道发生这样错误的原因.于是想学习一下相关的solr源码,以下是如何搭建solr调试环境步骤. solr调试环境搭建,首先下载源码. 可以通过 http://archive.apache.org/dist/lucene/solr/ 下载各个版本的源码.还可以在github下载最新的solr代码,地址是:https://github.com/jeniss/lucene-solr. 源码导入Intellij idea 在下载后

第三十二篇:Windbg中USB2.0调试环境的搭建

2011年的时候,为了开发USB Mass storage -- UASP (USB attached SCSI Protocol)的设备驱动程序,从米国买了两个USB2.0的调试小设备(如下图,每个似乎80美刀,贼贵的东西). 主要是用来替代串口115200波特率的响应速度慢,以便解决调试效率的问题. 当时,根据WINDBG的HELP文档,而且也GOOGLE了一些网上的相关参考内容,硬是没有把USB2.0的调试环境搭建起来. 后来有一段时间,朋友要开发驱动程序,他原来一直用一台配有PCI转13

使用Sublime Text搭建python调试环境[转]

pycharmt等IDE虽然用着爽,但毕竟在速度.资源上还是比较让人不爽的. 使用IDE无非是图个方便省事,特别是像我这种有些记性差的来说. IDE说起来方便于的几个地方就是: 1.语法颜色高亮 2.语法自动完成 3.方便的调试功能 现在有了Sublime Text这枚神器,配合上插件也可以比较方便地搭建一个方便的类似IDE的python调试环境了. 1.现在可以安装sublime text 3,然后安装package control,这玩意可以让你方便安装插件包.安装方法网上一砣. 2.安装S

使用Sublime Text搭建python调试环境

原文地址:http://blog.csdn.net/wenxuansoft/article/details/38559731 pycharmt等IDE虽然用着爽,但毕竟在速度.资源上还是比较让人不爽的. 使用IDE无非是图个方便省事,特别是像我这种有些记性差的来说. IDE说起来方便于的几个地方就是: 1.语法颜色高亮 2.语法自动完成 3.方便的调试功能 现在有了Sublime Text这枚神器,配合上插件也可以比较方便地搭建一个方便的类似IDE的python调试环境了. 1.现在可以安装su

HBase 二次开发 java api和demo

1. 试用thrift python/java以及hbase client api,结论如下: 1.1 thrift的安装和发布繁琐,可能会遇到未知的错误,且hbase.thrift的版本在变化中.优点代码简单,需要打包的内容少. 1.2 hbase client api,需要的jar很多,发布版的容量也很大,打包后近百兆.优点是,明确,无歧义. 2. 推荐用hbase client api的方式搞定. 3. 以下均为技术细节. 4. 有一台机器/一个集群,在运行hadoop,也运行了基于这个h

用Qemu模拟vexpress-a9(二) --- 搭建u-boot调试环境

参考: http://blog.csdn.net/caspiansea/article/details/12986565 环境介绍 Win7 64 + Vmware 11 + ubuntu12.04 32 u-boot 版本:u-boot-2015-04 Linux kernel版本:linux-3.16.y busybox版本:1_24_stable 交叉编译工具链:arm-linux-gnueabi- qemu版本:stable-2.4 下载.编译u-boot代码 u-boot从下面的网址获

[原创]搭建UEFI调试环境

需要的软件包如下 安装UEFI开发环境EDK2 本文在Windows7x64上测试,安装Windows SDK作为编译器 安装.Net Framework 4 安装Windows SDK v7.1 安装配置EDK2设置TARGET=NOOPT,TARGET_ARCH=X64,TOOL_CHAIN_TAG=VS2010x86,别的步骤请参考其它文章 编译OVMF 给OvmfPkg添加NOOPT的TARGET,2016-7-16的edk2需要修改,以后的edk2更新了应该不需要. 执行编译命令:bu

搭建交叉调试环境 arm-linux-gdb配合gdbserver

    在嵌入式开发中,有时候需要进行源码级别的调试,可以设置断点,单步执行,相比于每步打印printf或者printk来说,更加友好.下面就来介绍这种调试方法.     gdb交叉调试类似于网络浏览器,本地PC为客户端,远程开发板为服务器端,双方都要统一编译工具链,版本最好保持一致.     --target 指定了目标机交叉编译器前缀,比如--target=arm-linux ,缺省值为i386-linux    --host   指定了编译后的程序需要在哪里运行, 比如,--host=ar