HBase协处理器加载过程(1.2)

之前写过HBase协处理器的一些原理和使用,基本上都是官方文档和官方的博客翻过来的,知道了怎么写,怎么用。


现在需要思考的一个问题是,自己写的协处理器是怎么加载成功并调用的。


一、首先来看ObserverCoprocessor:
1.观察者协处理器的静态加载的配置是在hbase-site.xml中配置如下属性:
通过hbase.coprocessor.region.classes 配置 RegionObservers 和 Endpoints.
通过hbase.coprocessor.wal.classes 配置 WALObservers.
通过hbase.coprocessor.master.classes 配置MasterObservers.


hbase.coprocessor.region.classes:会被加载到默认所有表上。
hbase.coprocessor.master.classes:由HMaster进程加载。


对应的java类分别是:HMaster、HRegion、FSHLog
2.HMaster
HMaster中有一个属性叫MasterCoprocessorHost cpHost;
而关于MasterCoprocessorHost类的描述:
为面向主机的操作提供协处理器框架和环境。@link HMaster通过这个类与加载的协处理器进行交互。
BaseMasterObserver实现MasterObserver,我们自定义的Observer协处理器实现BaseMasterObserver。而这个类中有MasterObserver中所有的方法,并且最终调用对应的方法。
比如:
  HBase协处理器加载过程(1.2)_第1张图片
创建表时,会在CreateTableHandler类中的调用:
  HBase协处理器加载过程(1.2)_第2张图片
3.HRegion
同样也有一个属性叫private RegionCoprocessorHost coprocessorHost;
RegionCoprocessorHost类的描述信息:
实现在@link区域内加载的coprocessor环境和运行时支持。
在各方法中调用:
  HBase协处理器加载过程(1.2)_第3张图片
HRegion中调用钩子函数:
 
HBase协处理器加载过程(1.2)_第4张图片

3. FSHLog
FSHLog中的属性为:WALCoprocessorHost,这个类作用同上边两个一样。
调用例子
FSHLog类中的append方法调用协处理器的钩子函数:
 
HBase协处理器加载过程(1.2)_第5张图片

二、EndPoint协处理器
动态RPC端点类似于存储过程。终端可以随时从客户机调用。调用时,会在目标区域或区域远程执行,并将执行结果返回给客户端。
Endpoint协处理器—动态rpc协议,直接在region进行计算,编写客户端代码调用服务,即将结果返回到客户端(Reponse)。

你可能感兴趣的:(HBase)