編譯HBase1.0.0-cdh5.4.2版本
1. 編譯環境準備
Jdk:1.7.0_x
Maven : 3.3.9
hbase: cdh5.4.2-release
2. 用idea開啟專案
使用git clone得到HBase原始碼。開啟git:
將HBase專案拉取到本地:
拉取完畢之後,在idea的命令視窗,使用命令 git checkout cdh5.4.2-release,切換到和生產環境對應的HBase版本。
切換完成後專案結構如下:
3. 編譯前準備
3.1 為maven-resources-plugin指定版本
開啟 hbase專案根目錄下的pom.xml檔案,找到maven-resources-plugin,為其指定好version。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4</version>
<plugin>
3.2 跳過版本檢查
開啟conf資料夾在hbase-site.xml新增如下設定
<property>
<name>hbase.defaults.for.version.skip</ name>
<value>true</value>
</property>
3.3 生成模板程式碼
在hbase-server的jamon包下,有以jamon為字尾名的檔案,jamon是一種模板語言,可以把該檔案生成java檔案。
在http://www.jamon.org網站下載jamon程式jamon-dist-2013.12.28.zip。
解壓後拷貝jamon-api-2.3.1.jar jamon-processor-2.4.2.jar jamon-runtime-2.4.1.jar到原始碼的\hbase-server\src\main\jamon目錄:
然後在該資料夾開啟命令列執行以下命令處理jamon檔案:
java -cp .;jamon-api-2.3.1.jar;jamon-processor-2.4.2.jar;jamon-runtime-2.4.1.jar org.jamon.compiler.TemplateProcessor --srcDir=. --destDir=. org\apache\hadoop\hbase\tmpl\regionserver\*
java -cp .;jamon-api-2.3.1.jar;jamon-processor-2.4.2.jar;jamon-runtime-2.4.1.jar org.jamon.compiler.TemplateProcessor --srcDir=. --destDir=. org\apache\hadoop\hbase\tmpl\common\*
java -cp .;jamon-api-2.3.1.jar;jamon-processor-2.4.2.jar;jamon-runtime-2.4.1.jar org.jamon.compiler.TemplateProcessor --srcDir=. --destDir=. org\apache\hadoop\hbase\tmpl\master\*
jamon檔案會生成相應的java檔案,然後將hbase-server的src/main/jmon加入src路徑,就可以引用到新生成的java檔案了。
4. 編譯HBase程式碼
在idea的命令視窗執行命令:mvn package -Dmaven.test.skip=true assembly:single,輸出如下圖則打包成功。
在各模組的target目錄可得到相應jar包,當我們打了補丁後編譯出的jar包就可以放到叢集的/usr/lib/hbase/lib目錄中替換了。
5. 本地除錯HBase
5.1本地啟動HMaster
新增hbase/conf 作為 hbase-server模組的 resources資料夾:
然後執行hbase-server模組中的HMaster類,配置引數如下圖:
輸出下面的資訊說明啟動成功。
可在本地進行訪問HBase:localhost:60010
5.2 本地啟動hbase-shell
啟動配置如下:
VMoption為:
-Dhbase.ruby.sources=E:\IdeaProjects\source\cdh5.4.2\hbase\hbase-shell\src\main\ruby
-Dlog4j.configuration=file:E:\IdeaProjects\source\cdh5.4.2\hbase\conf\log4j.properties
啟動完成後可以在console視窗執行shell命令。
另外,Debug也可以針對HBase提供的測試用例,大部分用例都是基於一個本地模擬的Mini Cluster執行的。
這個Mini Cluster執行在一個程序中,使用執行緒模擬HBase的關鍵程序。
有些測試用例在window端啟動可能會報無法找到檔案的錯誤,需要在linux系統中執行用例才能正常。
這個過程中,我們可以動手小改一下原始碼,驗證自己的想法,或者觀察因為改動所帶來的行為變化,對熟悉HBase原始碼大有裨益。