HBase的读写流程

HBase的读写流程

在这里插入图片描述
我们看到HBase集群的物理模型,包括:Client、ZooKeeper、HMaster、HRegionServer、HLog、HRegion、Store、StoreFile、MemStore。对于HBase,它的元数据存放在ZooKeeper中,真实数据存放在MemFile(内存)和StoreFile(HDFS)中。

一. 写数据过程

写过程
1.Client访问ZK,根据ROOT表获取meta表所在Region的位置信息,并将该位置信息Client Cache。
(注:为了加快数据访问速度,我们将元数据、Region位置等信息缓存在Client Cache中。)

2.Client读取meta表,再根据meta表中查询得到的Namespace、表名和RowKey等相关信息,获取将要写入Region的位置信息(此过程即Region三层定位,如下图),最后client端会将meta表写入Client Cache。

3.Client向上一步HRegionServer发出写请求,HRegionServer先将操作和数据写入HLog(预写日志,Write Ahead Log,WAL),再将数据写入MemStore,并保持有序。
(联想:HDFS中也是如此,EditLog写入时机也是在真实读写之前发生)

4.当MemStore的数据量超过阈值时,将数据溢写磁盘,生成一个StoreFile文件。
当Store中StoreFile的数量超过阈值时,将若干小StoreFile合并(Compact)为一个大StoreFile。
当Region中最大Store的大小超过阈值时,Region分裂(Split),等分成两个子Region。
在这里插入图片描述

注意:

大型分布式系统中硬件故障很常见,HBase也不例外。
HBase通过在写动作发生之前先写入WAL(即:HLog)。
HBase集群中每台服务器维护一个WAL来记录发生的变化。

二:读过程

获取将要读取Region的位置信息(同读的1、2步)。
1.Client向HRegionServer发出读请求。
2.HRegionServer先从MemStore读取数据,如未找到,再从StoreFile中读取。
3.StoreFile合并(Compaction)
目的:减少StoreFile数量,提升数据读取效率。

Compaction分为两种:

1.minor compaction:
轻量级合并过程。将符合条件的一开始生成的多个storefile合并成一个大的storfile,此时不会删除被标记为"delete"的数据和已经过期的数据。执行一次minor合并操作后,还会有多个storefile文件。
2.major compaction:
重量级合并过程。把所有storefile合并成单一的storefile文件,在合并过程中会把标记为"删除"的数据和过期数据一并删除。合并过程中,对请求该Region的所有客户端阻塞,直到合并完毕。最后删除参与合并的(小)storefile文件。

Region分割(Split)
目的:实现数据访问的负载均衡。

做法:利用Middle Key将当前Region划分为两个等分的子Region。需要指出的是:Split会产生大量的I/O操作,Split开始前和Split完成后,HRegionServer都会通知HMaster。Split完成后,由于Region映射关系已变更,故HRegionServer会更新meta表。

注意:

由于无法直接修改HBase里的数据,所有的Update和Delete操作都转换成Append操作。而且HBase里也没有索引,因此读数据都是以Scan的方式进行。
Client在读数据时,一般会指定TimeStamp和ColumnFamily。根据ColumnFamily和TimeStamp可以过滤掉很大一部分Store,然后在剩下的Store中Scan。
在ZooKeeper中有HBase的两个缺省命名空间:default和hbase。其中hbase中存放的都是系统内建表(用户创建的namespace和meta表);default中存放未指定命名空间的表。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值