HBase Coprocessor Endpint运行机制

 Observer包括MasterObserver,RegionObserver和WALObserver,就类似RDBMS里面的trigger,Observer能够让我们针对Hbase的各种事件(比如put操作、get操作、Region的split或者是move等等)hook我们的代码,可以让我们的代码在这些事情对应操作之前执行(pre*)还是之后执行(post*),需要注意的就是我们hook的代码操作的对象是region,如果要操作所有的region就要靠endpoint了;

    Endpoint就类似RDBMS里面的Stored procedure了,可以直接在Region Server上执行我们的代码,它主要提供了能够操作单个Region的proxy和操作多个Regions的proxy,这样我们可以做一些sum,count的操作,不用再client端去做(数据量大,client端撑不了)。这里重点说一下Coprocessor。

   客户端定义Coprocessor接口实现,并继承BaseEndpointCoprocessor类;调用HTable.coprocessorExec( Class<T> protocol, byte[] startKey, byte[] endKey,

      Batch.Call<T,R> callable, Batch.Callback<R> callback)

    根据startKey,endKey结合region Meta表,找出相应region的startKeys,在客户端多线程(ExecutorService,有多少对应region,就分多少个线程)连接相应的regionserver中的Region,

     在该Region区域执行客户端定义的Coprocessor实现,执行的结果用Futrue包装。

     然后客户端统一遍历Futrue获取,返回每个region对应的结构Map<regionName,T>

 

你可能感兴趣的:(HBase Coprocessor Endpint运行机制)