协处理器
1、协处理器:Coprocessor
- 本质:
类似于Hive中的udf或者MySQL的触发器
- 本身Hbase没有提供这个功能
- 但是
提供了 这个开发的接口
- 你可以自定义开发这个功能,集成在Hbase的服务端
- 分类
- observer:观察者的协处理器,类似于MySQL中的触发器,类似于Java中监听
实现监听
某个动作A,当 A这个工作发生,就可以让HBASE执行动作B实现二级索引的同步
- 只要往原表中插入一条rowkey:时间_用户id
- Hbase自动往索引表插入一条rowkey:用户id_时间
- endpoint:终端者的协处理器,类似于MySQL中的存储过程,类似于Java中方法
- 一般用于分布式的聚合统计
- 监听的分类
- Master的操作
- RegionServer的操作
- Region的操作
- Put
- pre:在执行A之前,先执行B
- post:在执行A之后,再执行B
- Delete
- Scan
- ……
- 监听WAL
- observer:观察者的协处理器,类似于MySQL中的触发器,类似于Java中监听
2、应用
需求1:构建协处理器实现:当往proc1表中插入数据时,自动往proc2中插入一份相同的数据
- 创建两张表
create 'proc1','info'
create 'proc2','info'
- 将开发好的协处理器jar包上传到hdfs上
hdfs dfs -mkdir -p /coprocessor/jar
hdfs dfs -put /export/datas/coprocessor.jar /coprocessor/jar/
- 添加协处理器到proc1中,用于监听proc1的操作
disable 'proc1'
alter 'proc1',METHOD => 'table_att','Coprocessor'=>'hdfs://node-01:8020/coprocessor/jar/coprocessor.jar|cn.hanjiaxiaozhi.hbase.coprocessor.MyProcessor|1001|'
enable 'proc1'
alter 'proc1':修改这张表
METHOD => 'table_att':为这张表添加一个属性
'Coprocessor'=>'hdfs://node-01:8020/coprocessor/jar/coprocessor.jar|cn.hanjiaxiaozhi.hbase.coprocessor.MyProcessor
添加一个协处理器,jar包位置以及调用类
|1001|':优先级,数字越小优先级越高
-
如果添加协处理器报错:重启HBASE集群即可
-
测试
put 'proc1','20191211_001','info:name','zhangsan'
scan 'proc1'
scan 'proc2'
- 卸载协处理器
disable 'proc1'
alter 'proc1',METHOD=>'table_att_unset',NAME=>'coprocessor$1'
enable 'proc1'
需求2:构建协处理器实现:当往proc3原表中插入数据时,自动往索引表proc4中插入原表的rowkey
- 创建两张表
create 'proc3','info'
create 'proc4','info'
- 将开发好的协处理器jar包上传到hdfs上
hdfs dfs -mkdir -p /coprocessor/jar
hdfs dfs -put /export/datas/coprocessor.jar /coprocessor/jar/
- 添加协处理器到proc3中,用于监听proc3的操作
disable 'proc3'
alter 'proc3',METHOD => 'table_att','Coprocessor'=>'hdfs://node-01:8020/coprocessor/jar/coprocessor.jar|cn.hanjiaxiaozhi.hbase.coprocessor.SyncCoprocessor|1001|'
enable 'proc3'
- 测试
put 'proc3','20191211_001','info:name','zhangsan'
scan 'proc3'
scan 'proc4'