1.协处理器概念
协处理器允许用户在RegionServer上运行自己的逻辑代码,
数据的处理流程在服务器上完成,只返回一个很小的结果集,
类似一个小的MapReduce框架。
2.协处理器优先级:系统级和用户级
同时序号越小,优先级越高。
3.协处理器开始和结束
中间保持的是 CoprocessorEnvironment
4.如何加载协处理器
hbase-site.xml中的协处理器都是系统级的,按顺序执行
另一个是用HtableDescriptor.setValue()加载:
协处理器实现例子:
5.协处理器类型
1.RegionObserver类 属于Observer协处理器
作用:用来处理Region生命周期事件
Region状态:(pre方法在事件前调用,post在事件后调用)
1.pending open:region将要被打开时。
使用的协处理器方法:void preOpen(...)/void postOpen(...)
将在region打开前被调用
2.经过pending open,但还没到open,Server可能需从WAL中应用一些记录到region中:
方法:void preWALRestore(...)/void postWALRestore(...)
让用户细粒度的控制WAL重做时那些修改需被实施
3.open(一个region被部署到一个RegionServer中,并正常工作,可拆分):
方法:void preFlush(...)/void postFlush(...)
void preCompact(...)/void postCompact(...)
void preSplit(...)/void postSplit(...)
4.pending close(region open和close之间):
方法:void preClose(...,boolean abortRequested)
/void postClose(...,boolean abortRequested)
abortRequested包含region被刮泥的原因
作用:处理客户端API事件:
在HTable的方法前后欧调用:
2.Master Observer类
为了处理master服务器的所有回调函数
该协处理器使用例子:
6.EndPoint
作用:用于解决协处理器只能在行键决定的region所在的那个单个服务器上执行,
不会送到所有服务器上。
因此需要EndPoint来先所有RegionServer发送请求,
这样各个服务器就能在各个服务器上执行计算,最后将计算结果手机到客户端。
这样比全部数据手机到客户端再计算快很多。
EndPoint使用例子:
注意:配置:
另一个例子: