HBase-1.2.1之Get操作源码学习
来源:互联网 发布:centos 7.2网卡配置 编辑:程序博客网 时间:2024/05/21 10:13
最近在学习HBase的源码,主要是学习HRegionServer部分。从Get请求入手,找到了主要的实现类:Get,HTable,ConnectionManager等。具体如下:
Get操作:使用Java API读取数据:
1、 实例化Configuration类
Configuration conf = HbaseConfiguration.create();
在Hbase-common项目中的org.apache.hadoop.hbase.HBaseConfiguration类中。在第90行为无参的create方法。在该方法中,通过addHbaseResources(conf)将hbase-default.xml和hbase-site.xml文件加载到Configuration中。
2、 实例化HTable类
HTable hTable = new HTable(conf,tableName);
HTable类在hbase-cllient项目下的org.apache.hadoop.hbase.client.HTable类中。该类实现了HTableInterface接口和RegionLoactor接口。
第153行为上述构造函数,所做操作有:
1) 根据配置文件获得连接:
this.connection = ConnectionManager.getConnectionInternal(conf);233行
2) 在finishSetup中根据连接和表名实例化了regionLocator。244行
3、 实例化获得类
Get get = new Get(toBytes(“row1”));
Get类在hbase-client项目下的org.apache.hadoop.hbase.client.Get类中。该类实现了Row、Comparable<Row>接口,继承了Query类。
第90行为上述构造函数,所做操作有:检查了参数rowkey的合法性。之后赋值this.row=row;92行。
4、 读取数据
get.addFamily(personal);
get.addColumn(personal,name);
5、 获取结果
Result result = table.get(g);
源码在HTable类中的804行。
在第821行,实例化了RegionServerCallable实例,参数中用到了connection、tablename和rowkey,在重写的call方法中,
a) 创建getRequest
b) 创建rpc连接
在832行的ClientProtos.GetREsponseresponse = getStub().get(controller,request)中,就是把request发给server端,然后由server端返回response。所以这里是client端和server端rpc通信连接处。调用到的server端的代码为server项目下的RSRpcServices中的get方法(第1999行),返回结果为GetResponse。
定位Region的代码是在server端的RSRpcServices中的get中的函数中找到。
c) 得到GetResponse
d) 返回Result
返回的Result为ArrayList<Cell>,
Cell接口在hbase-common项目中的org.apache.hadoop.hbase.Cell接口中。该接口定义的属性有:row、columnfamily、column qualifier、timestamp、type、MVCC version、value。
在HRegion类中有属性成员private RegionCoprocessorHost coprocessorHost;(590行)
在RegionCoprocessorHost类中的第859行的postGet方法中的call方法中用到了RegionObserver oserver,RegionObserver接口的实现类有BaseRegionObserveràSimpleRegionObserve继承了BaseRegionObserver类。
6、 从Result实例读值
Byte[] value = result.getValue(Bytes.toBytes(“personal”),Bytes.toBytes(“name”));
在源码中查看Result类中的getValue方法,看到如下:
public byte[] getValue(byte [] family, byte [] qualifier) { Cell kv = getColumnLatestCell(family, qualifier); if (kv == null) { return null; } return CellUtil.cloneValue(kv);}
由此可见,在从result中读取数据时,也是先得到Cell,然后从Cell中获取数据。
*********************************************************************************************************************************************************************************
Get操作中在第5步中的Result result = table.get(g);中,需要client与server端连接,具体如下:
- HBase-1.2.1之Get操作源码学习
- hbase源码学习之GET操作之get转化为scan
- hbase-1.2.1之put操作源码学习
- hbase-1.2.1之scan、batch操作的源码学习
- hbase源码学习之put操作
- HBase-1.2.1之HRegionServer启动源码学习
- hbase-1.2.1之协处理器的源码学习
- HBase-1.2.1之查找Region位置的源码学习
- Hbase 源码分析之 Regionserver下的 Get 全流程
- Hbase 源码分析之 Regionserver上的 Get 全流程
- hbase HTable之Put、delete、get等源码分析
- HBase基础知识(2):CRUD操作之get方法
- HBase CURD之Get
- HBase之get方法
- HBase Client Get 源码分析
- Mapreduce 操作 hbase 之 hbase 对比mysql 学习详解
- hadoop学习笔记之操作hbase
- HBase源码分析之Client端操作处理
- faster-rcnn 之训练数据是如何准备的:imdb和roidb的产生
- 园林绿化网APP
- 纳新心得
- 机器学习之 weka学习(二)算法说明
- 企业移动化有怎样的特征?
- HBase-1.2.1之Get操作源码学习
- 71. Simplify Path
- 《The Swift Programming Language》中文版
- 机器人运动学(二)
- java 工厂模式
- 大话数据结构:线性表(1)
- Android--ecilpse配置SVN插件
- UNIVERSAL IMAGE LOADER.PART 2---ImageLoaderConfiguration详解
- IBM MQQueueManager 直接连接