HBase数据检索流程与数据存储

一、HBase数据检索流程

        上图中,我们可以看出不管客户端读或写一个表的数据,首先链接Zookeeper,因为需要到Zookeeper中找读的数据,表是通过Region来管理,每个Region由RegionServer管理,每个Region都有startkey及endkey。

        HBase的表格分为User Tables(用户表)和Catalog Tables(系统自带表)。

        User Tables(用户表)包含user信息、region信息(startkey和endkey)。例:user表的region-01存在regionserver-03中。该信息是保存在meta-table中。

       在HBase新版本中,有类似于RDBMS(关系数据库管理系统)中DataBase的命名空间的概念。HBase的所有表都在data目录下,data下包含default目录和hbase目录,这里的目录就是命名空间的概念。

       用户自定义的表默认情况下命名空间为default,而系统自带的元数据表的命名空间为hbase。

       meta表只有一个Region,它的Region也需要RegionServer管理,即为meta-region-server的功能。用户首先找到meta-region-server,然后找到meta表,scan命令可以看到表格中column被什么server管理。

       综上所述,用户表由很多region组成,region信息存储在hbase:meta中。用户表的每一个region都有key。Client需要先读zookeeper,其实通过meta-region-server找到的是meta表的region,找到后扫描meta表的数据,然后再找到数据再操作。

二、HBase数据存储

2.1 HBase结构详解

       HBase能高速实现数据存储和访问源于HBase数据存储。

       1. 连接Zookeeper,从Zookeeper中找到要读的数据。我们需要知道表中RowKey在region的位置。

       2. 客户端查找HRegionServer,HRegionServer管理众多Region。

       3. HMaster也需要连接Zookeeper,连接的作用是:HMaster需要知道哪些HRegionServer是活动的及HRegionServer所在的位置,然后管理HRegionServer。

       4. HBase内部是把数据写到HDFS上的,DFS有客户端。

       5. Region中包含HLog、Store。一张表有几个列簇,就有几个Store。Store中有很多memStore及StoreFile。StoreFile是对HFile的封装。StoreFile真正存储在HDFS上。

       6. 写数据时,先往HLog上写一份,再往memStore上写一份。当memStore达到一定大小则往StoreFile上写。若memStore数据有丢失,则从HLog上恢复。

       7. 读数据先到memStore上读,再到StoreFile上读,之后合并。

2.2 HBase数据存储详解

       1. HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括两种文件类型:

       1)HFile:HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFIle就是对HFile做了轻量级的包装,进行数据的存储。

       2)HLog File:HBase中WAL(Write Ahead Log)的存储格式,物理上是Hadoop的Sequence File。

       2. HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了table中的一个region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个column family的存储,可以看出每个columnfamily其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个column family中,这样最高效。

       3. HStore存储是HBase存储的核心,由两部分组成,一部分是MemStore,一部分是StoreFile。

       4. MemStore是 Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile)。

       5. HLog 文件结构:WAL意为Write ahead log,类似Mysql中的binlog,用来做灾难恢复。Hlog记录数据的所有变更,一旦数据修改,就可以从log中进行恢复。 

       6. 每个HRegionServer维护一个HLog,而不是每个HRegion一个。这样不同region(来自不同table)的日志会混在一起,这样做的目的是不断追加单个文件,相对于同时写多个文件而言,可以减少磁盘寻址次数,因此可以提高对table的写性能。带来的麻烦是,如果一台HRegionServer下线,为了恢复其上的region,需要将HRegionServer上的log进行拆分,然后分发到其它HRegionServer上进行恢复。

2.3 用户写入数据流程

        1. Client客户端写入数据后 -> 数据存入MemStore,一直到MemStore满之后 Flush成一个StoreFile,直至增长到一定阈值 -> 触发Compact合并操作 -> 多个StoreFile合并成一个StoreFile。

        2. 同时进行版本合并和数据删除 -> 当StoreFiles Compact后,逐步形成越来越大的StoreFile ->单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region分成2个Region,Region会下线,新分出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。


  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

象在舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值