hbase協處理器簡介
本章要點
- hbase協處理器有哪幾種類型
- hbase協處理器如何部署
- 協處理器的主要介面,已經介面功能
- 自定義協處理器例項
協處理器型別
hbase協處理型別主要分為observer 和endpoint兩種型別。
- observer
observer類似與傳統RDBMS中的觸發器:回撥函式(也稱作鉤子函式,hook)在特定事件發生時執行,這些事件包括使用者產生的事件,也包括伺服器端內部產生的事件。
協處理器框架提供的介面如下:
- RegionObserver: 使用者可以使用這種型別來處理資料修改事件,它們與表的region聯絡緊密
- MasterObserver: 可以用來處理與DDL型別相關的事件,這些事叢集事件
- WALObserver: 提供控制WAL的鉤子函式
- endpoint
除了事件處理,有時,使用者需要將一些自定義事件放在伺服器端執行,例如,做一些資料統計的工作,資料的原子合併工作。
endpoint通過新增一些遠端過程呼叫來動態的擴充套件RPC協議。類似與RDBMS中的儲存過程。
協處理器提供的介面如下:
- CoprocessorProtocol : 使用者通過擴充套件這個介面,來新增一些自定義的行為
- Batch.Call:使用者通過這個介面在客戶端呼叫定義在CoprocessorProtocol協義中的方法
- < T extend CoprocessorProtocol> T coprocessorProxy(Class< T > protocol, byte[] row) : 通過HTable提供的這個方法,來處理單個region的處理,由於CoprocessorProtocol案例和表中單個region聯絡在一起,所以客戶端的RPC呼叫必須定義region,這個region會在CoprocessorProtocol方法呼叫中被使用到。協處理Rpc呼叫會通過行鍵來查詢涉及的region。
- < T extends CoprocessorProtocol, R> Map< byte[], R> coprocessorExec( Class< T > protocol, byte[] startKey, byte[] endKey, Batch.Call< T, R> callable): 表中包含在起始鍵和終止行鍵中的region都將作為RPC endpoint。
- < T extends CoprocessorProtocol , R> void coprocessorExec( Class< T > protocol, byte[] startKey, byte[] endKey, Batch.Call< T, R> callable, Batch.CallBack< R > callback): Batch類為CoprocessorProtocol中涉及多個region方法的呼叫提供了兩個介面, 客戶端實現Batch.Call介面來呼叫CoprocessorProtocol例項的方法。每個選中的region將呼叫一次這個介面的call方法,在呼叫完成時,客戶端可以選擇實現Batch.Callback來傳回每次region呼叫的結果。
部署協處理器
協處理器有兩種部署方式,一種是通過配置檔案,在hbase啟動時,載入自定義的協處理器,第二種是通過HBase的表描述符載入,在建立表的時候載入協處理。
配置檔案方式
通過配置檔案方式載入的協處理器是針對全域性有效的,使用者不能指定具體是那張表或哪個region載入這個協處理器。通過在hbase-site.xml中新增以下一條或幾條來新增協處理器< property>
< name> hbase.coprocessor.region.classes< /name>
< value> coprocessor.RegionObserverExample, coprocessor.AnotherCoprocessor < /value>
< /property>
< property>
< name> hbase.coprocessor.master.classes< /name>
< value> coprocessor.MasterObserverExample < /value>
< /property>
< property>
< name> hbase.coprocessor.wal.classes< /name>
< value> coprocessor.WalObserverExample< /value>
< /property>從表描述符中載入
通過這種方式載入的協處理器是針對特定表的,使用者只能在於region相關的協處理器上使用這種方法,而不能在master或WAL相關的協處理器上使用。使用者需要在表描述符中通過HTableDescriptor.setValue()方法定義它們。鍵必須COPROCESSOR開頭,值必須符合以下格式:< path-to-jar>|< classname>|< priority>
以下是定義兩個協處理的例子:
‘COPROCESSOR$1’ => \
’ hdfs://localhost:8020/users/leon/test.jar|coprocessor.Test|SYSTEM ’
‘COPROCESSOR$2’ => \
‘/Users/laura/test2.jar|coprocessor.AnotherTest|USER’