1.文檔編寫目的
在前面的文章介紹了HBase自帶的Coprocessor調用示例《
如何使用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版本的安裝包,位址如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLjZTYhFTO5IWOjZWN3ETYzkjNmN2N3I2YjRGM3QjZzQWN2IjZ3YmM48CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
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