一、协处理器是什么

协处理器是HBase提供的允许我们在regionserver上运行我们自己编写的代码的框架。

 

二、协处理器的介绍

Hbase主要为我们提供了两类协处理器:observer和endpoint。

observer:

observer类协处理器类似于数据库中的触发器(官网上是这么说的)。然而,我个人觉得更像是一种拦截器,为什么这么说呢?我们可以来看一下这类协处理器提供的方法:

RegionObserver提供的方法



1 preOpen, postOpen: Called before and after the region is reported as online to the master.
2 preFlush, postFlush: Called before and after the memstore is flushed into a new store file.
3 preGet, postGet: Called before and after a client makes a Get request.
4 preExists, postExists: Called before and after the client tests for existence using a Get.
5 prePut and postPut: Called before and after the client stores a value.
6 preDelete and postDelete: Called before and after the client deletes a value.
7 etc.



 

MasterObserver提供的方法



preCreateTable/postCreateTable: Called before and after the region is reported as online to the master.
preDeleteTable/postDeleteTable
etc.



 

WALObserver提供的方法



preWALWrite/postWALWrite: called before and after a WALEdit written to WAL.



这些方法都是以pre或post开头,并且成对出现。非常类似拦截器。

so,我们在用的时候,可以当做拦截器来使用,比如

1.权限控制

当客户端发起请求要put、get时,我们可以通过对应的preput、preget方法来检验客户端是否有权限,特别是客户端发送的请求是delete、deleteTable之类的。

2.构建二级索引

当客户端发起put请求往HBase中插入数据时,我们可以利用postput方法,在插入之后为数据建索引,这个网上也有相关的例子

3.防止region的自动拆分

这个功能,我们可以重写RegionObserver提供的preSplit方法,在该方法中,使用observerContext的bypass()方法来停止region的分裂



@override
public void preSplit(ObserverContext<RegionCoprocessorEnvironment> e){
  e.bypass();  
}



 

当然,observer还提供了更多的方法让我们调用,这里就不展开介绍了,具体可以看HBase权威指南中的关于协处理器的介绍

 

endpoint

假如有这样一个需求,我们需要计算一个table中具体某一列的所有值的和的时候,而这张表是一张大表,有1000个region。此时,如果我们使用普通的api,我们需要将该表的每一行的这一列的值都获取到,再来计算和。这样等于是全表遍历,效率低下。

这时,我们可以通过继承BaseEndpointCoprocessor类并实现CoprocessorProtocol接口来编写计算总和的协处理器。并让regionserver加载这个endpoint,就可以使这张大表的1000个region在各自的regionserver上计算和。最终得到1000个和返回个客户端。

在客户端,我们只需要将1000个数相加就可以得到综合了。

这样做的好处是计算过程在服务器端,而客户端接收到的只是1000个中间结果,减少了网络资源的开销,加快了计算结果。

 

当然,要让endpoint可以被regionserver加载,我们需要在hbase-site.xml中做相应的配置,并重启HBase。

 

三、协处理器的使用

协处理器需要我们自定义编写代码,而一旦我们的编码出现问题,可能导致HBase的奔溃。具体的使用及采坑记录可以参考以下网址