天天看點

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

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版本的安裝包,位址如下:

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

3.執行如下指令安裝Protobuf所需要的依賴包

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor
HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

6.準備HBase測試表,建表腳本及測試資料如下

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

3.使用Protobuf生成序列化類

1.準備MyFirstCoprocessor.proto檔案,内容如下

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor
HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

2.在指令行執行如下指令生成Java類

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

4.Endpoint Coprocessor服務端實作

1.使用Maven建立Java示例工程,pom.xml檔案内容如下

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor
HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

2.将Protobuf生成的java類拷貝至指定的包目錄下

與MyFirstCoprocessor.proto檔案指定的java_package包目錄一緻。

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

3.在com.cloudera.hbase.coprocessor.server包下建立MyFirstCoprocessorEndpoint實作類,内容如下

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor
HBase實操 | 開發部署HBase Endpoint類型的Coprocessor
HBase實操 | 開發部署HBase Endpoint類型的Coprocessor
HBase實操 | 開發部署HBase Endpoint類型的Coprocessor
HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

5.Endpoint Coprocessor用戶端實作

1.編寫MyFirstCoprocessExample.java類,代碼如下:

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor
HBase實操 | 開發部署HBase Endpoint類型的Coprocessor
HBase實操 | 開發部署HBase Endpoint類型的Coprocessor
HBase實操 | 開發部署HBase Endpoint類型的Coprocessor
HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

6.部署及調用

1.使用mvn編譯工程

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

在用戶端調用的示例代碼中使用的是代碼為指定的表添加Coprocessor操作,是以這裡不需要在HBase中配置全局的Coprocessor。

3.運作MyFirstCoprocessorExample代碼,檢視運作結果

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

統計的值與我們寫入的資料一緻。

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 Endpoint類型的Coprocessor

大家工作學習遇到HBase技術問題,把問題釋出到HBase技術社群論壇http://hbase.group,歡迎大家論壇上面提問留言讨論。想了解更多HBase技術關注HBase技術社群公衆号(微信号:hbasegroup),非常歡迎大家積極投稿。

HBase實操 | 開發部署HBase Endpoint類型的Coprocessor

HBase技術交流社群 - 阿裡官方“HBase生态+Spark社群大群”點選加入:

https://dwz.cn/Fvqv066s