1.协处理器
HBase 0.92版本后推出了Coprocessor-协处理器,能够轻易
建立二级索引、复杂过滤器以及访问控制等。
系统协处理器可以全局导入region server上的所有数据表,表协处理器即是用户可以指定一张表使用协处理器。协处理器框架为了更好支持其行为的灵活性,提供了两个不同方面的插件。
一个是观察者(observer),类似于关系型数据库的触发器。另一个终端(endpoint),动态的终端有点像存储过程。
协处理器的加载方式有两种,我们称之为静态加载方式(Static Load)和动态加载方式(Dynamic Load)。静态加载的协处理器称之为 System Coprocessor,动态加载的协处理器称之为 Table Coprocessor。
2.观察者(Observer)
观察者的设计意图是允许用户通过插入代码来重载协处理器框架的upcall方法,而具体的事件触发的callback方法由HBase的核心代码来执行。协处理器框架处理所有的callback调用细节,协处理器自身只需要插入添加或者改变的功能。他提供了三种观察者接口:
-
RegionObserver:提供客户端的数据操纵事件钩子:Get、Put、Delete、Scan等。
-
WALObserver:提供WAL相关操作钩子。
-
MasterObserver:提供DDL类型的操作钩子。如创建、删除、修改数据表等。
这些接口可以同时使用在同一个地方,按照不同优先级顺序执行,用户可以任意基于协处理器实现复杂的HBase功能区。
3.静态加载
通过修改hbase-site.xml这个文件来实现,启动全局aggregation,能过操纵所有的表上的数据。只需要添加如下代码:
<property>
<name>hbase.coprocessor.user.region.classes</name>
<value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value>
</property>
为所有table加载了一个class,可以用","分割加载多个class
4.动态加载
启用表aggregation,只对特定的表生效。通过HBase Shell来实现。
(1)停用表
disable 'guanzhu'
(2)添加协处理器
alter 'guanzhu', METHOD => 'table_att', 'coprocessor' => 'hdfs://myha01/hbase/guanzhu.jar|com.study.hbase.cp.HbaseCoprocessorTest|1001|'
(3)启用表
enable 'guanzhu'
5.协处理器卸载
disable 'mytable'
alter 'mytable',METHOD=>'table_att_unset',NAME=>'coprocessor$1'
enable 'mytable'
把Java项目打包为jar包,上传到HDFS的特定路径
进入HBase Shell,disable你希望加载的表
具体相关参数:
通过alter 命令激活Observer coprocessor对应的格式以|分隔,依次为:
- jar包的HDFS路径
- Observer的主类
- 优先级(一般不用改)
- 参数(一般不用改)
- 新安装的coprocessor会自动生成名称:coprocessor + $ + 序号(通过describe table_name可查看)
绑定之后如果在执行的过程中有报错或者同步不过去,可以到hbase的从节点上的logs目录下,查看
hbase-roor-regionserver-slave*.log文件。因为协作器是部署在regionserver上的,所以要到从节点上面去看日志,而不是master节点。