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完整。