加载中…
个人资料
小象AI学院
小象AI学院 新浪机构认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:49,485
  • 关注人气:53
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

HBase的两种协处理器

(2013-02-08 11:10:47)

 

    协处理器有两种:observerendpoint。每一种协处理器服务于不同的目标,并且按照自己的API来实现。Observer允许集群在正常的客户端操作过程中可以有不同的行为表现。Endpoint允许你扩展集群的能力,对客户端应用开放新的运算命令。

1 Observer协处理器

为了理解observer协处理器,先来理解一个请求的生命周期是有帮助的。一个请求从客户端开始,创建一个请求对象,在HTableInterface实现上调用合适的方法。例如,创建一个Put实例,调用put()方法。HBase客户端基于行健定位到应该接收该PutRegionServer,发起RPC调用。RegionServer收到Put,把它转交给合适的region。该Region处理该请求,然后构造一个返回给客户端的回应。这个过程如图5.1所示。

Observer位于客户端和HBase之间,在这个过程发生时修改数据访问。你可以在每个Get命令后运行一个observer,修改返回给客户端的结果。或者你可以在一个Put命令后运行一个observer,在客户端写入HBase的数据存入硬盘之前执行操作。你可以把observer协处理器想象成关系型数据库里的触发器(trigger)或者面向方面编程(aspect-oriented programming)里的建议(advice)。多个observer可以同时被登记,它们按照优先次序被执行。CoprocessorHost类代表region管理observer的登记和执行。一个RegionServer拦截一个Put命令的过程如图5.2所示。

一句警告

请记住,协处理器运行在和RegionServer相同的进程空间里。这意味着协处理器的代码拥有服务器上HBase用户进程的全部权限。也意味着出错的协处理器有潜在可能使进程崩溃。此时此刻并没有隔离保证。你可以通过跟踪JIRA单子[1] 来关注解决这个潜在问题的努力。

   HBase 0.92版本开始,有三种observer可用:

RegionObserver—这种observer钩在数据访问和操作阶段。所有标准的数据操作命令可以被pre-post-hooks拦截。它也对region内部操作开放pre-post-hooks,例如刷写MemStore和拆分regionRegionObserver运行在region上;因此同一个RegionServer上可以运行多个RegionObserver。可以通过模式更新或者配置hbase.coprocessor.region.classes属性来登记RegionObserver

WALObserver—预写日志(write-ahead log)也支持observer协处理器。唯一可用的钩子是pre-post-WAL写事件。和RegionObserver不同,WALObserver运行在RegionServer的环境里。可以通过模式更新或者配置hbase.coprocessor.wal.classes属性来登记WALObserver

MasterObserver—为了钩住DDL事件,例如表创建或模式修改,HBase提供了MasterObserver。例如,当主表被删除时你可以使用postDeleteTable()钩子来删除第二个索引。这种observer运行在Master节点上。可以通过配置hbase.coprocessor.master.classes属性登记MasterObserver

2 Endpoint协处理器

EndpointHBase的一种通用扩展。当endpoint安装在集群上时,它扩展了HBase RPC协议,对客户端应用开放了新方法。就像observer一样,endpointRegionServer上执行,紧挨着你的数据。

Endpoint协处理器类似于其他数据库引擎中的存储过程。从客户端看,调用一个endpoint协处理器类似于调用其他HBase命令,除了其功能建立在定义协处理器的定制代码上。先创建请求对象,然后把它传给HtableInterface在集群上执行,最后收集结果。可以按照你编写的任意Java代码做任何事情。

最基本的是,endpoint可以用来实现分散聚集算法(scatter-gather algorithm)。HBase随机附带了一个聚集示例:求和和求平均数这样的简单聚集计算的一个endpointAggregateImplementation实例在托管数据的节点上计算得到部分结果,然后AggregationClient在客户端进程里计算得到最终结果。一个实际使用的聚集计算例子如图5.3所示。

我们将展示给你如何实现这两种协处理器,以及演示在HBase安装中如何让这两种实现生效。



[1]  “[Coprocessors] Generic external process host,” Apache Software Foundation, http://mng.bz/9uOy.

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有