Hbase读流程解析

Hbase读写流程解析(总括)

上节课我们详细说明了Hbase的架构,包括HMaster,HRegionServerf(RS),Hlog,HRegion,Store及HFile各自的作用,本节详细解析hbase的读写流程。

读数据

客户端在读取数据时,比如我们在Hbase shell下面执行:

get  'stable',' rowkey'

或者我们执行Java Hbase API去查询(其实上面的命令行窗口也是转化API接口去查询的)
通常我们会在网上或者博客上看到,Hbase是强依赖Zookeeper的,ZK保存着Hbase的元数据。

  1. 那么第一步我们查询数据时,提交请求,Client会去ZK里查找Meta表的元数据(旧版本实际上还有一个-ROOT-表),ZK里到底保存了Meta的哪些信息呢,我们可以看下:
[zk: localhost:2181(CONNECTED) 6] get /hbase/meta-region-server
��regionserver:16201dH1��Q�PBUF
��yang05��~������-���

实际上我们可以看到,里面就是保存了Meta表的一个location,说明Meta表是在哪个RS里保存着呢,这样Client就可以得到Meta表所在的RS地址

  1. Client通过ZK得到Meta的位置所在的RS,那么就去请求这台RS,访问Meta表的内容,如下:
hbase(main):005:0> scan 'hbase:meta'
ROW                     COLUMN+CELL                                                     
 bigdata:student,,15529 column=info:regioninfo, timestamp=1552929136826, value={ENCODED 
 29135868.6b4b97fd206e5 => 6b4b97fd206e5d78aac5bb30e6a0cc7a, NAME => 'bigdata:student,,1
 d78aac5bb30e6a0cc7a.   552929135868.6b4b97fd206e5d78aac5bb30e6a0cc7a.', STARTKEY => '',
                         ENDKEY => ''}                                                  
 bigdata:student,,15529 column=info:seqnumDuringOpen, timestamp=1552929136826, value=\x0
 29135868.6b4b97fd206e5 0\x00\x00\x00\x00\x00\x00\x02                                   
 d78aac5bb30e6a0cc7a.                                                                   
 bigdata:student,,15529 column=info:server, timestamp=1552929136826, value=yang05:16201 
 29135868.6b4b97fd206e5                                                                 
 d78aac5bb30e6a0cc7a.                                                                   
 bigdata:student,,15529 column=info:serverstartcode, timestamp=1552929136826, value=1552
 29135868.6b4b97fd206e5 878081913                                                       

显示上面内容就是记录了我们自己业务表的信息(元数据),其实通过上面的数据,我们知道,Meta表的每一条记录,都记录了业务表的一个region的数据,如上面的STARTKEY ,ENDKEY就是rowkey的范围

  1. 知道了数据的元数据,即知道数据是在哪个RS中的哪个region里,客户端就可以再次请求相应的RS。
    这里读请求也是非常复杂的,我们这里只是简单说明,后面文章会对这块详细解析,Client先在MemStore里找数据,如果MemStore没有找到数据,接着会在对应的BlockCache里找,这里也就是Hbase所谓的二级缓冲,如果还是没有找到数据,那么就去Hdfs的上HFile里找数据了。

接着从总括上说下Hbase的写流程...

你可能感兴趣的:(Hbase读流程解析)