Observer
这一类协处理器与触发器(trigger)类似:回调函数(也被称作钩子函数,hook)在一些特定事件发生时被执行。这些事件包括一些用户产生的事件,也包括服务器端内部自动产生的事件。
协处理器框架提供的接口如下:
Observer提供了一些设计好的回调函数,每个操作在集群服务器端都可以被调用。
Endpoint
除了事件处理之外还需要将用户自定义操作添加到服务器端。用户代码可以被部署到管理数据的服务器端,例如,做一些服务器端计算的工作。
Endpoint通过添加一下远程过程调用来动态扩展RPC协议。可以把它们理解为与RDBMS中类似的存储过程。
客户端可以调用这些 Endpoint 协处理器执行一段 Server端代码,并将Server 端代码的结果返回给客户端进一步处理,最常见的用法就是进行聚集操作(谓词下推)。
Endpoint可以与observer的实现组合起来直接作用于服务器端的状态。
Observer 与 Endpoint总结
两种协处理器的区别:
协处理器加载方式
协处理器的加载方式有两种:
动态加载方式 (Dynamic Load)
- 动态加载的协处理器称 之为 Table Coprocessor
静态加载
通过修改 hbase-site.xml 这个文件来实现,启动全局 aggregation,能够操纵所有的表上的数据。
需要添加的代码:
<property>
<name>hbase.coprocessor.user.region.classes</name>
<value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value>
</property>
为所有 table 加载了一个 cp class,可以用”,”分割加载多个 class。
但由于该方法是全局的,所以在实际应用中并不是很多,而动态加载用的更多一些。
动态加载
启用表 aggregation,只对特定的表生效。通过 HBase Shell 来实现。
disable 指定表
```sh
hbase> disable 'table名';
```
```sh
hbase> alter 'mytable', METHOD => 'table_att','coprocessor'=>
'(1) org.apache.Hadoop.hbase.coprocessor.AggregateImplementation(2)(3)(4)'
```
- 参数解释:
- (1): jar包位置 hdfs的路径
- (2): jar包的协处理器的权限定名
- (3): 协处理器的优先级别( 同一个表中添加多个协处理器,优先级问题 使用数字表示,数字越大代表优先级越高 )
- (4): 代码中程序的参数,没有不传
```sh
hbase> enable 'table名';
```
协处理器卸载
禁用表
disable 'mytable'
卸载
alter 'mytable',METHOD=>'table_att_unset',NAME=>'coprocessor$1'
启用表
enable 'mytable'
原文:https://www.cnblogs.com/ronnieyuan/p/11884933.html