판
HDP : 3.0.1.0
HBase를 : 2.0.0
I. 서론
이 기사는 차 개발 (AES 암호화 방법 HBase를 증가 SMS4 데이터 암호화 유형 HBase를 참조) 필요 가장 최근에 HBase를 작업 전에 언급했다. 이틀 동안 연구, 그리고 마지막으로 개발 과정 명확하게 생각하고 우리가 다른 사람에게 쓰기 기사 기다릴 수 있도록, 더 나은 디버그 환경을 구축 할 수 있습니다.
둘째, 아이디어
먼저 톱이 수요는 확실히 "HBase를 구성 AES 암호화를 달성하는 데 필요한 HBase와는 AES 암호화를 구성을 ,"또는 당신은 그 때 달성하기 위해 SMS4 암호화 알고리즘을 이해하기 위해 계속 " 자바 버전 SMS4 암호화 및 복호화 알고리즘을 ." 이 때까지 기다립니다 우리는 HBase를 데이터 암호화의 SMS4을 달성 할 수있는 방법을 찾을 필요가 이루어집니다. 여기에 우리가 아이디어를 개발하고자하는, 즉, 어떤 네트워크 말해. 참조 공식 웹 사이트는 단지 다음과 같은 정보를 제공합니다 :
달성해야 할 필요성 org.apache.hadoop.hbase.io.crypto.CipherProvider
클래스는 먼저 어떤 병 패키지 내부의 클래스를 찾을 수 있습니다. 마지막으로, /usr/hdp/3.0.1.0-187/hbase/lib/
디렉토리 아래에 hbase-common-2.0.0.3.0.1.0-187.jar
패키지이 클래스 내에서 발견했다.
그런 방법이 항아리 차 개발을 패키지 할 수 있습니다 생각? 그래서 사용하는 Java Decompiler
도구 ( 결국 거기에 도착하는 방법 AES 암호화 모듈의 코드를 보았다 항아리 패키지 디 컴파일), 및 코드를 디버깅하는 과정을 이해하는 데 관련이있는 것으로 발견, 이것은 두 번째 개발 후 나에게 도움이 될 것입니다.
이제 두 가지 문제가 발생했습니다 :
- 어떻게 출력의 라인 인 경우에도이 항아리 차 개발 패키지도 OK LOG입니다
- 원격 HBase를 소스 코드를 디버깅하는 방법
중동 사용하려고 노력 해요 Java Decompiler
정말 자신을 발견, 디 컴파일 자바 jar 파일 패키지를 얻기 위해 도구를 too young too simple
컴파일이 실패 프로젝트의 밖으로 디 컴파일이 필요한 부모 프로젝트에 의존 찾을 수 있습니다. HBase를 느낌은 전체 소스 코드를 컴파일하는 것입니다.
그러나, 나는 어디에 해당 찾을 수 HBase를 소스의 HDP 버전 그것의를?
셋째, 조언, 각 구성 요소의 소스 코드를 HDP 수
그 이유 쁘띠 트릭, 정말 해당 찾을 수 HDP
의 버전의 HBase
소스 코드를 아, hortonworks
공식 웹 사이트 아하지 않았다. 그리고 노래의 다양한 인터넷을 확인, 마지막으로 내가 일을 떨어져 지불 발견하게하고, 즉 . 다음 단계에 대해 이야기.hortonworks
github
브라우저를 열고 https://github.com/hortonworks를 방문, 검색 상자의 상단 오른쪽을 클릭, 현재의 organization
검색에서 당신이 원하는 hdp
어셈블리에 대한 소스 코드를.
아래에 도시 된 바와 같이, 상기 방법에 의해 검색 : 어떻게 HBase를 일례로서 소스 코드의 버전을 구하는 HDP를 보자
선택한 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
다운로드의 소스, 나머지 성분을 다운로드하여이 방법에 따른 것이다.
넷째, 컴파일
다운로드가 완료 소스 코드 후, 당신은 컴파일 할 필요가있다. 내가 HBase를 소스 디렉토리 (Ambari 설치로 생각하기 때문에 /usr/hdp/3.0.1.0-187/hbase/
), HBase를 컴파일 된 코드입니다. 아니면 또는 거기에 차이가없는, 그래서 시도 대담을 알고 노력했다.
하기 위해, 컴파일 받는다는 사용하여 속도 ,의 받는다는 이미지를 수정 :
编辑 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
关键字获取。
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是 人才。
白嫖不好,创作不易。 各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !