1. 程式人生 > >HBase二次開發之搭建HBase除錯環境,如何遠端debug HBase原始碼

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 官網上也沒有啊。然後就各種上網查資料唄,終於功夫不負有心人讓我查到了,那就是 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原始碼下載下來了,其餘元件的下載也是按照此方法。

四、編譯

原始碼下載完成後,就需要編譯。因為我猜想通過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 來觸發 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 關鍵字獲取。


點關注,不迷路

好了各位,以上就是這篇文章的全部內容了,能看到這裡的人呀,都是 人才。

白嫖不好,創作不易。 各位的支援和認可,就是我創作的最大動力,我們下篇文章見!

如果本篇部落格有任何錯誤,請批評指教,不勝感激 !

相關推薦

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-Thingswifi模組開發-(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開發元件ZookeeperKafkaHadoop編譯

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基本兩年一大變。所以在做開發的時候需要做多個版本的才行。但是每個版本做一個專案又很不方便,因為很多程式碼類似,改了前面忘了後面的版本,所以很頭疼,最好能夠幾個版本共用一個類,不同版本通過預編譯來解決。這裡只說怎麼解決多版本共用一個類