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
官網上也沒有啊。然後就各種上網查資料唄,終於功夫不負有心人讓我查到了,那就是 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
原始碼一致:
解壓該 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
關鍵字獲取。
點關注,不迷路
好了各位,以上就是這篇文章的全部內容了,能看到這裡的人呀,都是 人才。
白嫖不好,創作不易。 各位的支援和認可,就是我創作的最大動力,我們下篇文章見!
如果本篇部落格有任何錯誤,請批評指教,不勝感激 !
相關推薦
HBase二次開發之搭建HBase除錯環境,如何遠端debug HBase原始碼
版本 HDP:3.0.1.0 HBase:2.0.0 一、前言 之前的文章也提到過,最近工作中需要對HBase進行二次開發(參照HBase的AES加密方法,為HBase增加SMS4資料加密型別)。研究了兩天,終於將開發流程想清楚並搭建好了debug環境,所以就迫不及待地想寫篇文章分享給大家。 二、思路
006-Ambari二次開發之web環境搭建除錯
當我們需要修改前端樣式時,我們需要搭建web本地除錯環境,本篇我們將介紹如何在本地搭建web開發環境。 注:本篇操作是在Ubuntu下完成的。 掃描二維碼,關注BearData,獲取最新文章 安裝nodeJS 下載地址:https://nodejs.org/downl
Jmeter二次開發之程式碼環境搭建
一.建立專案 1. 分別下載apache3.1 binaries和source兩個壓縮包,前者為release版本,後者為jmeter最新的原始碼,下載地址:http://jmeter.apache.org/download_jmeter.cgi。 2. 開啟ec
Alios-Things之wifi模組二次開發-(1)搭建Alios-Things開發環境(基於ubuntu 16.0.4)
一、安裝流程如下: 1.先安裝VSCode,保證有個可視的編輯器; 2.然後安裝aos-cube,是編譯工具; 3.最後安裝git工具,下載Alios-Things國內託管倉庫程式
Mycat 開發除錯環境配置-開啟二次開發之路
Mycat是 資料庫分庫分表中介軟體。mycat1.6分庫分表特性只能選擇其一,不能同時存在,對於特殊應用場景既需要分庫有需要分表,這就需要修改mycat的原始碼來實現了。今次我們來準備一下Mycat的開發除錯環境。官網參考地址:http://www.mycat.io/前期準
(6)微信二次開發 之 微信文本消息接口實現
微信 odin link 消息處理 nal puts 算法 帳號 接口實現 p.p1 { margin: 13.0px 0.0px 13.0px 0.0px; text-align: justify; font: 16.0px SimSun } p.p2 { margin:
revit 二次開發之基於族獲得實例
相關 space typeof cef doc 過濾 list eric category Revit並沒有直接開放基於族獲取實例元素的過濾器。不過有兩個相關的過濾器,一個是FamilySymbolFilter(ElementId familyId),可以基於族ID過濾出所
踏上Revit二次開發之路 2 從“HelloWorld”入手
import none 工具 環境變量 各級 style first app ati 2 從“HelloWorld”入手 在歐特克的官方網頁上有個叫《My First Plug-in Training》的項目,號稱可以讓一個完全沒有編程基礎的人照著做出一個插件來。我快速瀏覽
織夢DedeCMS的二次開發之數據庫類操作
高亮顯示 delete from 進行 往裏面 參考 如何 tps .com 1.創建數據表 為了讓講解更加的貼合實際,天涯版主創建了一個名為"dede_test"的表,裏面就2個字段,1個id,作為唯一標識,另一個name作為名稱。然後往裏面添加測試數據,這個操作類似於A
DT二次開發之-常量全局變量說明及使用
DT二次開發 常量全局變量 什麽是destoon常量?destoon常量是指destoon官方的開發者在開發時封裝在destoon程序中的一些系統設置參數這些參數是固定的,我們是不能修改的,也不需要去修改。(PS:只要你牛掰,系統全改了也行)比如我們的網站首頁地址:DT_PATH,站點安裝目錄路
Revit二次開發之載入族
return mes 刪除 開發 urn com tar 失敗 commit 載入族 此方法載入族無法覆蓋原有族,即若存在相同名稱的族則會載入失敗 1 Family family = null; //族 2 3 Transaction transact
中控考勤機的二次開發之數據秒上傳至服務器功能
程序 做到 監控 選擇 環境 客戶 出現 員工 參考 1.客戶選擇了中控考勤機:IFACE系列 2.客戶需要在WEB端實時看到員工的考勤情況 3.需要做到客戶員工數據及時傳遞到服務器 實現方法如下: 1.安裝中控DLL(一定要註意操作系統是32位還是64位,折騰死人
中控考勤機的二次開發之靈活調配職工功能
客戶 考勤 靈活 二次 容量 代碼 功能 參考 以及 客戶新增需求 1.客戶員工需要不定時的外派或支援 2.客戶員工發適時的到分公司去打卡 3.客戶員工的打卡數據需要及時的發放到目標分公司 4.實現功能如下: 1)各分公司需要及時從考勤機上取得員工的打卡驗證數據
Revit二次開發之 自定義選項卡排在最前端
引用AdWindows.dll類庫 Autodesk.Windows.RibbonControl ribbon = AutodeskWindows.ComponentManager.Ribbon;  
012-Ambari二次開發之元件Zookeeper,Kafka,Hadoop編譯
Zookeeper是大資料生態圈元件之間協調的基礎元件。本篇我們開始編譯基於HDP3.0版本棧的Zookeeper。 關注微信公眾號,獲取更多內容 Zookeeper編譯 安裝ant,Zookeeper依賴於ANT編譯,所以需要安裝ant yum install ant
011-Ambari二次開發之元件編譯概述
Ambari元件即大資料生態圈的元件,如Hadoop,Zookeeper,HBase,Hive,Spark,Kafka等。當我們業務需要修改原始碼時,我們需要重新編譯打包元件。Ambari的元件包是以RPM包的形式存在的,並且Ambari元件包檔案路徑存放位置和原生方式安裝是不同的,所以我們
009-Ambari二次開發之新增自定義元件Redis(二)
上一篇我們主要介紹了Ambari新增元件的答題流程並以REDIS為例說明了流程,本篇在上一篇的基礎上,進一步完善說明流程並介紹如何給元件新增metric 掃描二維碼,關注BearData,獲取最新文章 上篇中,我們已經制作出了redis的rpm包,並重新編譯了我們修改後的Ambar
008-Ambari二次開發之新增自定義元件Redis(一)
Ambari目前支援的元件有HDFS、YARN、HBase、Hive、Pig、ZooKeeper、Sqoop、Storm、Flume、Tez、Oozie、Falcon、Storm、Altas、Knox、Spark、Ranger、Mahout、Kerberos等,已經涵蓋了從大資料應用的
007-Ambari二次開發之棧名修改
在介紹如何修改棧名稱之前,我們先要了解一下stack的相關概念及在什麼情況下需要修改棧名稱。 掃描二維碼,關注BearData,獲取最新文章 Ambari-stack 表示HDP的某個發行版本,例如HDP-1.0.0,在用ambari建立一個叢集時,首先要通過呼叫restfulAPI
Revit二次開發——如何搭建多版本的框架,方便程式設計
Revit基本兩年一大變。所以在做開發的時候需要做多個版本的才行。但是每個版本做一個專案又很不方便,因為很多程式碼類似,改了前面忘了後面的版本,所以很頭疼,最好能夠幾個版本共用一個類,不同版本通過預編譯來解決。這裡只說怎麼解決多版本共用一個類