HBase的读写流程详解

HBase的读写流程详解

[TOC]

读流程

HBase 读数据流程如图 所示

HBase 读数据流程

1)Client 先访问 zookeeper,从 meta 表读取 region 的位置,然后读取 meta 表中的数据。meta 中又存储了用户表的 region 信息;

2)根据 namespace、表名和 rowkey 在 meta 表中找到对应的 region 信息;

3)找到这个 region 对应的 regionserver;

4)查找对应的 region;

5)先从 MemStore 找数据,如果没有,再到 BlockCache 里面读;

6)BlockCache 还没有,再到 StoreFile 上读(为了读取的效率);

7)如果是从 StoreFile 里面读取的数据,不是直接返回给客户端,而是先写入 BlockCache,

再返回给客户端。

写流程

Hbase 写流程如下 所示

Hbase 写流程

1)Client 向 HregionServer 发送写请求;

2)HregionServer 将数据写到 HLog(write ahead log)。为了数据的持久化和恢复;

3)HregionServer 将数据写到内存(MemStore);

4)反馈 Client 写成功。

数据 flush 过程

1)当 MemStore 数据达到阈值(默认是 128M,老版本是 64M),将数据刷到硬盘,将内存

中的数据删除,同时删除 HLog 中的历史数据;

2)并将数据存储到 HDFS 中;

3)在 HLog 中做标记点。

数据合并过程

1)当数据块达到 4 块,Hmaster 触发合并操作,Region 将数据块加载到本地,进行合并;

2)当合并的数据超过 256M,进行拆分,将拆分后的 Region 分配给不同的 HregionServer

管理;

3)当HregionServer宕机后,将HregionServer上的hlog拆分,然后分配给不同的HregionServer

加载,修改.META.;

4)注意:HLog 会同步到 HDFS。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!