1. 程式人生 > >hbase(三)coprocessor

hbase(三)coprocessor

server nbsp 就是 技術 pos tps mapred .org 代碼

介紹

coprocessor這個單詞看起來很神秘,直譯為協處理器,其實可以理解成依賴於regionserver進程的輔助處理接口。

hbae在0.92版本之後提供了coprocessor接口。目前hbase支持兩種coprocessor,endpoint和observer。hbase在未來版本可能考慮將coprocessor進程獨立出來,單獨起個服務。

endpoint coprocessor

Endpoint 協處理器類似傳統數據庫中的存儲過程,客戶端可以調用這些 Endpoint 協處理器執行一段 Server 端代碼,並將 Server 端代碼的結果返回給客戶端進一步處理,最常見的用法就是進行聚集操作。如果沒有協處理器,當用戶需要找出一張表中的最大數據,即 max 聚合操作,就必須進行全表掃描,在客戶端代碼內遍歷掃描結果,並執行求最大值的操作。這樣的方法無法利用底層集群的並發能力,而將所有計算都集中到 Client 端統一執行,勢必效率低下。利用 Coprocessor,用戶可以將求最大值的代碼部署到 HBase Server 端,HBase 將利用底層 cluster 的多個節點並發執行求最大值的操作。即在每個 Region 範圍內執行求最大值的代碼,將每個 Region 的最大值在 Region Server 端計算出,僅僅將該 max 值返回給客戶端。在客戶端進一步將多個 Region 的最大值進一步處理而找到其中的最大值。這樣整體的執行效率就會提高很多。說白了,coprocessor就是hbase提供一些接口和規則,讓你可以在regionserver服務中執行你自定義的代碼。這個規則就是基於google的protobuf。

endpoint observer在多個regionserver上執行,執行結果返回給client,這個過程有點像mapreduce,map操作在regionserver端,reduce在client端。下圖為endpoint執行流程。

技術分享圖片

observer coprocessor

另外一種協處理器叫做 Observer Coprocessor,這種協處理器類似於傳統數據庫中的觸發器,思路上類似AOP的思想,當發生某些事件的時候這類協處理器會被 Server 端調用。Observer Coprocessor 就是一些散布在 HBase Server 端代碼中的 hook 鉤子.

在Region層面,比如:put 操作之前有鉤子函數 prePut,該函數在 put 操作執行前會被 Region Server 調用;在 put 操作之後則有 postPut 鉤子函數。還有例如get,delete,scan等其他操作的鉤子.

在regionserver層面,observer coprocessor還提供了WALObserver

在MasterObserver層面,提供了DDL操作的相關鉤子,create,delete等

下圖為observer coprocessor執行流程,註意最後的regionObserver是在服務端執行的,因此自定義的observer coprocessor代碼打包後需要放在hbase服務端也就是regionserver的classpath下。

技術分享圖片

例子

參考hbaes源碼中的src/example/coprocessor

引用

https://blogs.apache.org/hbase/entry/coprocessor_introduction

hbase(三)coprocessor