HBase之协处理器

【本文详细介绍了HBase中协处理器相关的基本概念,欢迎读者朋友们阅读、转发和收藏!】

1 基本概念

如果要统对 HBase 中的数据,进行某种统计,比如统计某个字段最大值,统计满足某种条件的记录数,统计各种记录特点,并按照记录特点分类(类似于 sql 的 group by )。常规的做法就是把 HBase 中整个表的数据 scan 出来,或者稍微环保一点,加一个 filter ,进行一些初步的过滤(对于 rowcounter 来说,就加了 FirstKeyOnlyFilter ),但是这么做来说还是会有很大的副作用,比如占用大量的网络带宽(当标级别到达千万级别,亿级别之后)尤为明显, RPC 的量也是不容小觑的。

使用 Scan 的时候,可以配合各种 Filter 进行数据的筛选以减少返回的数据量,同样也可以通过选择特定的列族和列来减少返回的数据量。若是能将该特性进一步的优化则 HBase 会更强大。HBase 在 0.92 版本后引入了 协处理器 来实现该功能。

协处理器 允许用户在 region 服务器上运行自己的代码,更准确的说是允许用户执行 region 级的操作,并且可以使用与 RDBMS 中的触发器类似的功能。在客户端,用户不用关系操作具体在哪里执行, HBase 的分布式框架会帮助用户把这些工作变得透明。有点类似 MapReduce 。

使用协处理器的好处显而易见,可以将运算放到 server 端,减少通信开销的同时还能有效的提升性能。

协处理的两种类型:系统协处理器: 可以全局导入 region server 上的所有数据表; 表协处理器: 用户可以指定一张表使用协处理器。

协处理器框架为了更好支持其行为的灵活性,提供了两个不同方面的插件。

观察者( observer ) ,类似于关系数据库的触发器(主动触发),在一些特定事件发生的时候被执行。这些事件包括一些用户产生的事件,也包括服务器端内部产生的事件。

终端( endpoint ) ,动态的终端有点像存储过程。除了事件处理之外还需要将用户自定义操作添加到服务器端。用户代码可以被部署到管理数据的服务器端。endpoint 通过添加一些远程调用来扩展 RPC 协议。

1.1 Observer

观察者的设计意图是允许用户通过插入代码来重载协处理器框架的 upcall 方法,而具体的事情触发的 callback 方法由 HBase 的核心代码来指定。协处理器框架处理所有的 callback 调用细节,协处理器自身只需要插入添加或者改变的功能。

Observer 提供的接口:

RegionObserver :提供客户端的数据操作时间钩子:Get 、 Put 、 Delete 和 Scan 等

WALObserver :提供 WAL 相关操作钩子

MasterObserver :提供 DDL 类型的操作钩子,如创建、删除、修改数据表等。

这些接口可以同时使用在同一个地方,按照不同的优先级顺序执行,用户可以任意基于协处理器实现负责的 HBase 功能层, HBase 有很多种时间可以出发观察者方法,这些事件与方法从 HBase0.92 版本起,都会集成在 HBase 中。不过这些 API 可能会由于各种原因有所改动,不同版本的接口改动比较大。

1.2 endpoint

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

endpoint 协处理类似于其他数据库引擎中的存储过程。从客户端看,调用一个 endpoint 协处理器类似于调用其他 HBase 命令,只是其功能建立在定义协处理器的定制代码上,通常先创建请求对象,然后把它传给 HtableInterface 在集群上执行,最后收集结果。

1.3 region

单个行键调用 coprocessorProxy() 。返回一个 CoprocessorProtocol 接口的动态代理,它使用包含给定行键的 region 作为 RPC endpoint ,即使给空行键鬼影的行不存在也不影响。

一段范围的 region 通过起始行键和终止行键调用 coprocessorExec() 。表中包含在起始行键到终止行键范围内的所有 region 都将作为 RPCendpoint。

我知道你在看

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200603A03BVC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券