hbase-1.2.1之协处理器的源码学习
来源:互联网 发布:sql字符串中有' 编辑:程序博客网 时间:2024/06/03 17:53
HBase中的协处理器:两种:observer和endpoint
Observer:
RegionServerObserver:钩子函数主要是针对对region的管理的,比如merge,writeWAL,createRElplicationEndPoint,replicateLogEntries.
RegionObserver:钩子函数主要是针对client端对region上的数据操作,比如get,put,delete,batchMutate等。
MasterObserver:钩子函数主要是针对对HMaster操作。比如CreateTable,DeleteTable,ModifyTable,AddColumn等。
上述的协处理器主要是在对应的CoprocessorHost中被调用。比如RegionObserver在RegionCoprocessorHost中被调用(调用方式:比如在RegionCoprocessorHost中的441行,在pre钩子函数中,通过调用call方法(call方法的参数oserver))。往回推,在HRegion中有成员变量RegionCoprocessorHost,HRegion中调用钩子函数处:例如第6743行的get 方法(在6737行List<Cell> results = get(get,true),其中的第二个参数true表示要调用协处理器。)。
在RSRpcServices.java中的第1999行的get方法中,在2029行用到了region.get(clientGet),这样在之后便调用到了HRegion中的get方法,进而通过传入true参数调用协处理器。
即:HTable中的get方法
—》RegionServerCallable
—》RSRpcServices
—》HRegion
—》HRegionCoprocessorHost
—》RegionObserver(Ranger中的RangerAuthorizationCoprocessor实现了RegionObserver接口)。
下面的流程图是以get操作为例:
下面为java中使用协处理器的示例:
long singleRegionCount(String tableName, String rowkey,boolean reCount){ long rowcount = 0; try{ Configuration config = new Configuration(); HConnection conn = HConnectionManager.createConnection(config); HTableInterface tbl = conn.getTable(tableName); //获取 Channel CoprocessorRpcChannel channel = tbl.coprocessorService(rowkey.getBytes());org.ibm.developerworks.getRowCount.ibmDeveloperWorksService.BlockingInterface service =org.ibm.developerworks.getRowCount.ibmDeveloperWorksService.newBlockingStub(channel); //设置 RPC 入口参数org.ibm.developerworks.getRowCount.getRowCountRequest.Builder request = org.ibm.developerworks.getRowCount.getRowCountRequest.newBuilder(); request.setReCount(reCount); //调用 RPC org.ibm.developerworks.getRowCount.getRowCountResponse ret = service.getRowCount(null, request.build()); //解析结果 rowcount = ret.getRowCount(); } catch(Exception e) {e.printStackTrace();} return rowcount; }或者采用如下方式:
Configuration conf = HBaseConfiguration.create();Config.set(“hbase.zookeeper.property.clientPort”,”2181”);Config.set(“habse.zookeeper.quorum”,”10.2.41.215”);Config.set(“hbase.master”,”10.2.41.207:600000);HTable table = new HTable(conf, table_name);Map<byte[], ByteString> re = table.coprocessorService(HellodWord.class,null,null,new Batch.call<HelloWorld, ByteString> (){@OverridePublic ByteString call(HelloWorld instance ) throws IOException{….}
关于协处理器的学习,请参考:
www.ibm.com/developerworks/cn/opensource/os-cn-hbase-coprocessor1/index.html
www.ibm.com/developerworks/cn/opensource/os-cn-hbase-coprocessor2/index.html
- hbase-1.2.1之协处理器的源码学习
- HBase学习之三: hbase filter(过滤器)和coprocessor(协处理器)统计行数的简单应用
- HBase学习之八:自定义hbase协处理器endpoint和遇到的问题
- hbase-1.2.1之scan、batch操作的源码学习
- HBase-1.2.1之查找Region位置的源码学习
- Hbase的协处理器
- HBase-1.2.1之Get操作源码学习
- HBase-1.2.1之HRegionServer启动源码学习
- hbase-1.2.1之put操作源码学习
- HBase协处理器的一点皮毛知识
- HBase的协处理器编码实战
- hbase协处理器引发的问题解决方案
- HBase的协处理器编码实战
- HBase-6.hbase 协处理器
- Hbase--6 Hbase协处理器
- HBase的两种协处理器
- 【HBase】1009-HBase的协处理器(coprocessor)统计行数
- HBase协处理器(1.2官方文档)
- js自学笔记--高级技巧
- 【整理】JS中的Navigator对象
- 适配器模式(Adapter模式)
- King6818开发板UART0(debug)为公头,使用交叉串口线
- Android 录制视频并上传
- hbase-1.2.1之协处理器的源码学习
- 如何自学 Android 编程-----整理stormzhang的知乎问答
- 设计模式之工厂模式
- jdbc----preparestatement的简单使用
- POJ 1001 求高精度幂
- NYOJ数独
- euler性质直接判断是否组成路径 uva10129
- 关于HttpUrlConnection+Xpull解析
- php乱七八糟的问题-防止重复提交