博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HBase的读写流程
阅读量:3949 次
发布时间:2019-05-24

本文共 1753 字,大约阅读时间需要 5 分钟。

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中存放未指定命名空间的表。

转载地址:http://mxrwi.baihongyu.com/

你可能感兴趣的文章
使用互斥量保证程序最多只有一个实例运行
查看>>
进程定点自杀
查看>>
进程看门狗
查看>>
线程看门狗
查看>>
调试代码的宏定义
查看>>
__FILE__和__FUNCTION__的使用
查看>>
创建、重命名文件
查看>>
文件大小保护
查看>>
先文件大小保护,再写文件
查看>>
目录创建
查看>>
日志文件系统的写日志函数
查看>>
删除目录下的文件
查看>>
删除指定目录下所有文件及目录
查看>>
判断文件夹名是否是合法YYYYMM格式
查看>>
检查日志文件系统
查看>>
读配置文本
查看>>
使用rapidxml创建XML
查看>>
使用rapidxml从xml文件中读取指定项(建议两层)
查看>>
char字符串转CString
查看>>
VS2008 定时器使用
查看>>