HBase是一個分佈式的存儲體系,數據按照RowKey分紅不一樣的Region,再分配給RegionServer管理。可是RegionServer只承擔了存儲的功能,若是Region能擁有一部分的計算能力,從而實現一個HBase框架上的MapReduce,那HBase的操做性能將進一步提高。正是爲了解決這一問題,HBase 0.92版本後推出了Coprocessor -- 協處理器,一個工做在Master/RegionServer中的框架,能運行用戶的代碼,從而靈活地完成分佈式數據處理的任務。java
Coprocessor包含兩個組件,一個是EndPoint(相似關係型數據庫的存儲過程),用以加快特定查詢的響應,另外一個就是Observer(相似關係型數據庫的觸發器)。Observer也分爲幾個類型,其中RegionObserver提供了一組表數據操做的鉤子函數,覆蓋了Get、Put、Scan、Delete等操做(一般有pre和post兩種狀況,表示在操做發生以前或發生以後),咱們能夠經過重載這些鉤子函數,利用RegionServer實現特定的數據處理需求。數據庫
1. 全局部署。把jar包的路徑加入HBASE_CLASSPATH而且修改hbase-site.xml,這樣Observer會對每個表都生效。apache
<property> <name>hbase.coprocessor.region.classes</name> <value>org.apache.hadoop.hbase.coprocessor. BaseRegionObserver </value> </property>
2. 單表部署。經過HBase Shell修改表結構,加入coprocessor信息。框架
a) 進入HBase Shell,disable你但願加載的表分佈式
b) 經過如下指令激活Observer:函數
alter 'table_name', METHOD => 'table_att', 'coprocessor' => ' hdfs://master:9000/HbaseCoprocessor.jar | test.CoprocessorObserverTest |1001'oop
c) coprocessor對應的格式以|
分隔,依次爲:post
jar包的HDFS路徑性能
Observer的主類spa
優先級(通常不用改)
d) 新安裝的coprocessor會自動生成名稱:coprocessor + $ + 序號(可經過describe 'table_name'
查看)
e) 由於一張表可能擁有多個coprocessor,卸載須要輸入對應的coprocessor名稱,好比:
alter 'table_name', METHOD => 'table_att_unset', NAME=> 'coprocessor$1'
注:建立協處理器時須要把必要的jar,copy完整。