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]——Hadoop Database的简称,Google BigTable的另一种开源实现方式,...
    高广超阅读 2,416评论 1 27
  • 比特科技: 存储、数据库、大数据技术 » HBase原理和设计 http://www.bitstech.net/...
    葡萄喃喃呓语阅读 734评论 0 11
  • 简介 HBase —— Hadoop Database的简称,Google BigTable的另一种开源实现方式,...
    编码前线阅读 282评论 0 0
  • 简介 HBase —— Hadoop Database的简称,Google BigTable的另一种开源实现方式,...
    尼小摩阅读 549评论 0 3
  • HBase存储架构图 HBase Master 为Region server分配region 负责Region s...
    kimibob阅读 5,634评论 0 52