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>
Endpoint的基本使用方法
coprocessorExec所传入的4个参数,第一个参数为之前定义的RowCountProtocol 协议类的class,第二为startRow