HBase實操 | 開發部署HBase Endpoint型別的Coprocessor
1.文件編寫目的
在前面的文章介紹了HBase自帶的Coprocessor呼叫示例《 ofollow,noindex"> 如何使用Java呼叫HBase的 Endpoint Coprocessor 》,本篇文章主要介紹如何開發一個HBase Endpoint型別的協處理器。
本篇文章示例協處理器主要實現了對列的Count、Max、Min、Sum以及Average。前面的文章呼叫Coprocessor定義的全域性的,在本篇文章介紹另一種實現方式通過程式碼的方式對指定的表新增Coprocessor。
-
內容概述
1.環境準備
2.使用Protobuf生成序列化類
3.Endpoint Coprocessor服務端實現
4.Endpoint Coprocessor客戶端實現
5.部署及呼叫
-
測試環境
1.CM和CDH版本為5.14.3
2.叢集未啟用Kerberos
2.環境準備
在HMaster、RegionServer內部,建立了RpcServer例項,並與Client三者之間實現了Rpc呼叫,在HBase0.95版本引入了Google-Protobuf作為中間資料組織方式,並在Protobuf提供的Rpc介面之上,實現了基於服務的Rpc實現。
Protobuf Buffers是一種輕便高效的結構化資料儲存格式,可以用於資料序列化。適合做資料儲存或RPC資料交換格式。用於通訊協議、資料儲存等領域的語言無關、平臺無關、可擴充套件的序列化結構資料格式。
這裡Fayson藉助於Protobuf來生成HBase RPC資料交換格式類,在HBase中使用的Protobuf版本為2.5.0,所以選擇安裝相同版本的Protobuf。
1.下載Protobuf2.5.0版本的安裝包,地址如下:
3.執行如下命令安裝Protobuf所需要的依賴包
6.準備HBase測試表,建表指令碼及測試資料如下
3.使用Protobuf生成序列化類
1.準備MyFirstCoprocessor.proto檔案,內容如下
2.在命令列執行如下命令生成Java類
4.Endpoint Coprocessor服務端實現
1.使用Maven建立Java示例工程,pom.xml檔案內容如下
2.將Protobuf生成的java類拷貝至指定的包目錄下
與MyFirstCoprocessor.proto檔案指定的java_package包目錄一致。
3.在com.cloudera.hbase.coprocessor.server包下新建MyFirstCoprocessorEndpoint實現類,內容如下
5.Endpoint Coprocessor客戶端實現
1.編寫MyFirstCoprocessExample.java類,程式碼如下:
6.部署及呼叫
1.使用mvn編譯工程
在客戶端呼叫的示例程式碼中使用的是程式碼為指定的表新增Coprocessor操作,所以這裡不需要在HBase中配置全域性的Coprocessor。
3.執行MyFirstCoprocessorExample程式碼,檢視執行結果
統計的值與我們寫入的資料一致。
7.總結
-
在開發HBase的Coprocessor藉助於Protobuf生成RPC請求資料互動類,我們只需要在生成的類基礎上實現業務即可。
-
本篇文章主要介紹了怎麼樣通過程式碼的方式為指定的HBase表新增Coprocessor,這種方式使用更靈活,不需要重啟HBase服務。
-
將編寫好的Coprocessor jar上傳至HDFS,確保檔案的目錄屬主。
-
HBase自帶的也有AggregateImplementation類實現列的聚合,原生的不能同時對多個列進行聚合處理,如果需要多次聚合則需要多次呼叫RPC請求,HBase資料在不斷的寫入會出現每次聚合的結果有偏差,本示例將聚合放在一個RPC中處理可以減少RPC的請求次數並確保查詢條件相同的情況下不會出現資料不一致問題。
GitHub地址:
https://github.com/fayson/cdhproject/blob/master/hbasedemo/proto/MyFirstCoprocessor.proto
https://github.com/fayson/cdhproject/blob/master/hbasedemo/src/main/java/com/cloudera/hbase/coprocessor/server/MyFirstCoprocessorEndPoint.java
https://github.com/fayson/cdhproject/blob/master/hbasedemo/src/main/java/com/cloudera/hbase/coprocessor/server/MyFirstCoprocessor.java
https://github.com/fayson/cdhproject/blob/master/hbasedemo/src/main/java/com/cloudera/hbase/coprocessor/client/MyFirstCoprocessExample.java
大家工作學習遇到HBase技術問題,把問題釋出到HBase技術社群論壇http://hbase.group,歡迎大家論壇上面提問留言討論。想了解更多HBase技術關注HBase技術社群公眾號(微信號:hbasegroup),非常歡迎大家積極投稿。
HBase技術交流社群 - 阿里官方“HBase生態+Spark社群大群”點選加入: https://dwz.cn/Fvqv066s