Observersql
这一类协处理器与触发器(trigger)相似:回调函数(也被称做钩子函数,hook)在一些特定事件发生时被执行。这些事件包括一些用户产生的事件,也包括服务器端内部自动产生的事件。数据库
协处理器框架提供的接口以下:apache
Observer提供了一些设计好的回调函数,每一个操做在集群服务器端均可以被调用。服务器
Endpoint框架
除了事件处理以外还须要将用户自定义操做添加到服务器端。用户代码能够被部署到管理数据的服务器端,例如,作一些服务器端计算的工做。分布式
Endpoint经过添加一下远程过程调用来动态扩展RPC协议。能够把它们理解为与RDBMS中相似的存储过程。函数
客户端能够调用这些 Endpoint 协处理器执行一段 Server端代码,并将Server 端代码的结果返回给客户端进一步处理,最多见的用法就是进行汇集操做(谓词下推)。oop
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'
协处理器查询加盐以后的表
因为每一个Region中实际上是有Start Key 和 End Key的, 它们是由咱们所建立的表指定的, 而协处理器的代码实际上是在每一个Region中执行的。
这些代码在Region里面执行的时候是能够拿到当前Region的信息的, 包括了Start Key 和 End Key。
咱们只要将拿到的Start Key 信息和查询的 UID 进行拼接, 这样就能够查询到咱们要的数据。