关闭

HBase-1.2.1之Get操作源码学习

标签: HBase源码java
773人阅读 评论(1) 收藏 举报
分类:

最近在学习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端和serverrpc通信连接处。调用到的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中配置Ranger的情形。如果协处理器选用的不是Ranger而是其他,则同样会调用其他的协处理器类。
0
0
查看评论

hbase-1.2.1之put操作源码学习

Put操作: 1.        实例化Configuration类 Configuration conf = HbaseConfiguration.create(); 同Get操作。 2、  实例化HTabl...
  • mm_bit
  • mm_bit
  • 2016-07-28 14:58
  • 901

HBase-1.2.1之HRegionServer启动源码学习

在hbase-server项目中的org.apache.hadoop.hbase.regionserver.HRegionServer类中。 public HRegionServer(Configuration conf, CoordinatedStateManager csm) thr...
  • mm_bit
  • mm_bit
  • 2016-07-28 14:49
  • 753

hbase-1.2.1之协处理器的源码学习

HBase中的协处理器:两种:observer和endpoint Observer: RegionServerObserver:钩子函数主要是针对对region的管理的,比如merge,writeWAL,createRElplicationEndPoint,replicateLogEntries. ...
  • mm_bit
  • mm_bit
  • 2016-07-28 15:56
  • 902

hbase-1.2.1之scan、batch操作的源码学习

Scan操作: 1、  实例化Configuration类 Configuration conf = HbaseConfiguration.create(); 同Get操作。 2、  实例化HTable类 HTable hTable = new HTable(conf,table...
  • mm_bit
  • mm_bit
  • 2016-07-28 15:13
  • 1044

jQuery源码解析---get与eq的区别

get与eq的区别 .eq() 减少匹配元素的集合,根据index索引值,精确指定索引对象。 .get() 通过检索匹配jQuery对象得到对应的DOM元素。 同样是返回元素,那么eq与get有什么区别呢? eq返回的是一个jQuery对象,get返回的是一个DOM对象。举个...
  • u010585120
  • u010585120
  • 2016-09-14 15:34
  • 404

PHP网页游戏学习之Xnova(ogame)源码解读

九、公共代码(common.php) Common.php是Xnova的公共代码,几乎每次点击都会被执行,所以这里要是优化的好,那么整个程序的效率都会有提升;当然这个文件调用的其他代码也要一并优化才行。 $game_config  = array(); $user &...
  • asdajhsdkjahsjd
  • asdajhsdkjahsjd
  • 2014-06-23 19:22
  • 620

网络爬虫学习笔记———网页源码下载之get方法

请求网页的方式主体有两种,一种是get方法,一种是post方法。正如这两个单词明面上的意思,一个是单纯地从网页中获取源码,另一种需要传递正确的参数后才能返回正确的源码。如图所示,我们可以利用F12观察的方法来查看具体是哪种请求。   下面是post方法。   ...
  • acm2014
  • acm2014
  • 2016-11-17 22:36
  • 323

Android源码学习之浅析SystemServer脉络

Android源码学习之浅析SystemServer脉络
  • ztguang
  • ztguang
  • 2016-07-14 21:08
  • 193

UGUI源码学习之初涉Text(二)

UGUI源码学习之初涉Text(二)先上截图关于Text并没有多少东西值得特别注意的,因为基本没有遇到坑嘛。 public class Text : MaskableGraphic, ILayoutElement 同是MaskableGraphic的子类,只有Image实现了ICanvasRa...
  • a237653639
  • a237653639
  • 2016-03-04 17:53
  • 499

HBase-1.2.1之查找Region位置的源码学习

首先需要清楚的是: zookeeper上存放的是meta表在region的地址 真正的meta表数据是存放在region上的,和其他普通的数据表是一样的。 以get操作为例: 在HTable中的get方法中的 return rpcCallerFactory.newCaller().call...
  • mm_bit
  • mm_bit
  • 2016-07-28 17:00
  • 410
    个人资料
    • 访问:269410次
    • 积分:3113
    • 等级:
    • 排名:第13196名
    • 原创:89篇
    • 转载:55篇
    • 译文:0篇
    • 评论:39条