版本
- 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 源码一致:
- <property>
- <name>zookeeper.session.timeout</name>
- <value>900000</value>
- </property>
来源: https://www.cnblogs.com/createboke/p/12234345.html