HBase读数据流程

HBase原理

Client先访问zookeeper,根据namespace、表名和rowkey从meta表读取region的位置

找到这个region对应的regionserver

查找对应的region

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

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

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

Hbase写流程

HBase原理

Client向HregionServer发送写请求

HregionServer将数据写到HLog,为了数据的持久化和恢复

HregionServer将数据写到内存(MemStore)

反馈Client写成功

数据flush过程

1) 当MemStore数据达到阈值(默认是128M),将数据刷到硬盘,将内存中的数据删除,同时删除HLog中的历史数据

hbase.hregion.memstore.flush.size: 针对region级别,当一个region内或regionserver的所有memstore总大小达到该阈值的时候,所有的memstore都会溢写到磁盘文件

2)并将数据存储到HDFS中

数据合并过程

1)一个Store中的Hfile达到4块,HMaster将数据块加载到本地,进行合并

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

3)当HregionServer宕机后,将HregionServer上的Hlog拆分,然后分配给不同的HregionServer加载,修改META.

4)注意:HLog会同步到HDFS(memstore在一个server上也会有很多,所以hlog丢失会不安全)

 

相关文章: