1. 程式人生 > >HBase協處理器載入過程(1.2)

HBase協處理器載入過程(1.2)

之前寫過HBase協處理器的一些原理和使用,基本上都是官方文件和官方的部落格翻過來的,知道了怎麼寫,怎麼用。


現在需要思考的一個問題是,自己寫的協處理器是怎麼載入成功並呼叫的。


一、首先來看ObserverCoprocessor:
1.觀察者協處理器的靜態載入的配置是在hbase-site.xml中配置如下屬性:
通過hbase.coprocessor.region.classes 配置 RegionObservers 和 Endpoints.
通過hbase.coprocessor.wal.classes 配置 WALObservers.
通過hbase.coprocessor.master.classes 配置MasterObservers.


hbase.coprocessor.region.classes:會被載入到預設所有表上。
hbase.coprocessor.master.classes:由HMaster程序載入。


對應的java類分別是:HMaster、HRegion、FSHLog
2.HMaster
HMaster中有一個屬性叫MasterCoprocessorHost cpHost;
而關於MasterCoprocessorHost類的描述:
為面向主機的操作提供協處理器框架和環境。@link HMaster通過這個類與載入的協處理器進行互動。
BaseMasterObserver實現MasterObserver,我們自定義的Observer協處理器實現BaseMasterObserver。而這個類中有MasterObserver中所有的方法,並且最終呼叫對應的方法。
比如:
 

建立表時,會在CreateTableHandler類中的呼叫:
 
3.HRegion
同樣也有一個屬性叫private RegionCoprocessorHost coprocessorHost;
RegionCoprocessorHost類的描述資訊:
實現在@link區域內載入的coprocessor環境和執行時支援。
在各方法中呼叫:
 
HRegion中呼叫鉤子函式:
 


3.FSHLog
FSHLog中的屬性為:WALCoprocessorHost,這個類作用同上邊兩個一樣。
呼叫例子
FSHLog類中的append方法呼叫協處理器的鉤子函式:
 


二、EndPoint協處理器
動態RPC端點類似於儲存過程。終端可以隨時從客戶機呼叫。呼叫時,會在目標區域或區域遠端執行,並將執行結果返回給客戶端。
Endpoint協處理器—動態rpc協議,直接在region進行計算,編寫客戶端程式碼呼叫服務,即將結果返回到客戶端(Reponse)。