hbase协处理器简介

来源:互联网 发布:js div展开收缩 编辑:程序博客网 时间:2024/05/19 15:43

本章要点

  • hbase协处理器有哪几种类型
  • hbase协处理器如何部署
  • 协处理器的主要接口,已经接口功能
  • 自定义协处理器实例

协处理器类型

hbase协处理类型主要分为observer 和endpoint两种类型。

  • observer

observer类似与传统RDBMS中的触发器:回调函数(也称作钩子函数,hook)在特定事件发生时执行,这些事件包括用户产生的事件,也包括服务器端内部产生的事件。
协处理器框架提供的接口如下:

  • RegionObserver: 用户可以使用这种类型来处理数据修改事件,它们与表的region联系紧密
  • MasterObserver: 可以用来处理与DDL类型相关的事件,这些事集群事件
  • WALObserver: 提供控制WAL的钩子函数


  • endpoint

除了事件处理,有时,用户需要将一些自定义事件放在服务器端运行,例如,做一些数据统计的工作,数据的原子合并工作。
endpoint通过添加一些远程过程调用来动态的扩展RPC协议。类似与RDBMS中的存储过程。
协处理器提供的接口如下:

  • CoprocessorProtocol : 用户通过扩展这个接口,来添加一些自定义的行为
  • Batch.Call:用户通过这个接口在客户端调用定义在CoprocessorProtocol协义中的方法
  • < T extend CoprocessorProtocol> T coprocessorProxy(Class< T > protocol, byte[] row) : 通过HTable提供的这个方法,来处理单个region的处理,由于CoprocessorProtocol案例和表中单个region联系在一起,所以客户端的RPC调用必须定义region,这个region会在CoprocessorProtocol方法调用中被使用到。协处理Rpc调用会通过行键来查找涉及的region。
  • < T extends CoprocessorProtocol, R> Map< byte[], R> coprocessorExec( Class< T > protocol, byte[] startKey, byte[] endKey, Batch.Call< T, R> callable): 表中包含在起始键和终止行键中的region都将作为RPC endpoint。
  • < T extends CoprocessorProtocol , R> void coprocessorExec( Class< T > protocol, byte[] startKey, byte[] endKey, Batch.Call< T, R> callable, Batch.CallBack< R > callback): Batch类为CoprocessorProtocol中涉及多个region方法的调用提供了两个接口, 客户端实现Batch.Call接口来调用CoprocessorProtocol实例的方法。每个选中的region将调用一次这个接口的call方法,在调用完成时,客户端可以选择实现Batch.Callback来传回每次region调用的结果。

部署协处理器

协处理器有两种部署方式,一种是通过配置文件,在hbase启动时,加载自定义的协处理器,第二种是通过HBase的表描述符加载,在创建表的时候加载协处理。

  • 配置文件方式
    通过配置文件方式加载的协处理器是针对全局有效的,用户不能指定具体是那张表或哪个region加载这个协处理器。通过在hbase-site.xml中添加以下一条或几条来添加协处理器

    < property>
    < name> hbase.coprocessor.region.classes< /name>
    < value> coprocessor.RegionObserverExample, coprocessor.AnotherCoprocessor < /value>
    < /property>
    < property>
    < name> hbase.coprocessor.master.classes< /name>
    < value> coprocessor.MasterObserverExample < /value>
    < /property>
    < property>
    < name> hbase.coprocessor.wal.classes< /name>
    < value> coprocessor.WalObserverExample< /value>
    < /property>

  • 从表描述符中加载
    通过这种方式加载的协处理器是针对特定表的,用户只能在于region相关的协处理器上使用这种方法,而不能在master或WAL相关的协处理器上使用。用户需要在表描述符中通过HTableDescriptor.setValue()方法定义它们。键必须COPROCESSOR开头,值必须符合以下格式:

    < path-to-jar>|< classname>|< priority>

    以下是定义两个协处理的例子:

    ‘COPROCESSOR$1’ => \
    ’ hdfs://localhost:8020/users/leon/test.jar|coprocessor.Test|SYSTEM ’
    ‘COPROCESSOR$2’ => \
    ‘/Users/laura/test2.jar|coprocessor.AnotherTest|USER’

原创粉丝点击