HBase二次開發之搭建HBase調試環境,如何遠程debug HBase源代碼

版本html

HDP:3.0.1.0java

HBase:2.0.0linux

1、前言

以前的文章也提到過,最近工做中須要對HBase進行二次開發(參照HBase的AES加密方法,爲HBase增長SMS4數據加密類型)。研究了兩天,終於將開發流程想清楚並搭建好了debug環境,因此就火燒眉毛地想寫篇文章分享給你們。git

2、思路

首先看到這個需求,確定是須要先實現HBase配置AES加密《HBase配置AES加密》,或者還能夠再繼續瞭解實現SMS4加密算法《Java版SMS4加密解密算法》。等到這些都完成以後,就須要想辦法實現HBase的SMS4數據加密了。這裏咱們要養成一種思路,那就是看官網。根據參考官網,只獲得以下信息:github

須要實現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相關代碼,瞭解其流程,這樣纔會對我以後的二次開發有幫助。shell

如今就遇到了兩個問題:apache

  • 如何二次開發這個jar包,哪怕是一行LOG輸出也行
  • 如何遠程debug HBase源代碼

中間曾嘗試過使用Java Decompiler工具反編譯獲得jar包的java文件,發現本身真是too young too simple,反編譯出來的工程編譯失敗,發現須要依賴父工程。感受就是要編譯整個HBase源碼。vim

但是,我上哪去找對應的HDP版本的HBase源碼呢?windows

3、獲取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源碼下載下來了,其他組件的下載也是按照此方法。

4、編譯

源碼下載完成後,就須要編譯。由於我猜測經過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文件。

5、遠程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代碼了,看看代碼邏輯等。以下圖所示:

6、總結

本篇文章篇幅較長,但都是滿滿的乾貨,將這兩天的成果記錄在這,也但願可以幫助到你們。主要解決了

  • 如何二次開發這個jar包,哪怕是一行LOG輸出也行
  • 如何遠程debug HBase源代碼

若是面對未知的東西,主要仍是勇於嘗試吧,萬一成功了呢 ~

環境什麼的都準備好了,接下來,就要對HBase源代碼進行研究了。想一想去年debug Ambari Server源碼的時候,感受和如今差很少的樣子,想一想就酸爽,祝我本身成功吧~

有想要 Java Decompiler 反編譯工具的朋友,可掃描下方二維碼回覆 0425 關鍵字獲取。


點關注,不迷路

好了各位,以上就是這篇文章的所有內容了,能看到這裏的人呀,都是 人才

白嫖很差,創做不易。 各位的支持和承認,就是我創做的最大動力,咱們下篇文章見!

若是本篇博客有任何錯誤,請批評指教,不勝感激 !

相關文章
相關標籤/搜索