빌드에 대한 디버깅 환경의 HBase를 HBase를 보조 개발하는 방법을 원격으로 HBase와 소스 코드 디버깅

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공식 웹 사이트 아하지 않았다. 그리고 노래의 다양한 인터넷을 확인, 마지막으로 내가 일을 떨어져 지불 발견하게하고, 즉 . 다음 단계에 대해 이야기.hortonworksgithub

브라우저를 열고 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 来触发 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 关键字获取。


点关注,不迷路

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

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

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

추천

출처www.cnblogs.com/createboke/p/12234345.html