Hbase的读数据和写数据流程

1、读数据流程

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,再返回给客户端。

注:(meta表中存的是元数据所在表的位置的数据)

步骤4-7

扫描二维码关注公众号,回复: 12452674 查看本文章

注:BlockCache是读内存,MemCache是写内存

2、写数据流程

1)Client向Zookeeper集群发送请求,获取meta表所在ReginServer;

2)Zookeeper集群返回meta表所在的ReginServer。

3)向对应的ReginServer请求meta表;

4)ReginServer返回meta表;

5)在meta表中找到代写数据的region信息,Client向HregionServer发送写请求;

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

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

8)反馈Client写成功。

注:

Region:HBase表的分片

HLog:HBase修改记录

Mem store:写缓存

HFie:实际的存储文件

Store File:HFil存储在SF中个SF对应一个列族

STEP 1. Try to acquire as many locks 获取行级锁
STEP 2. Update any LATEST TIMESTAMP timestamps 更新时间戳
STEP 3. Build WAL edit 编辑预写日志
STEP 4. Append the final edit to WAL. Do not sync WAL 不同步预写日志  
STEP 5. Write back to memstore 写进memstore
STEP 6. Release row locks, etc 释放行级锁
STEP 7. Sync wal 同步预写日志
STEP 8. Advance mvc 
STEP 9. Run coprocessor post hook 运行协处理器

3、数据flush过程

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

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

3)在HLog中做标记点。

4、数据合并过程

1)当数据块达到3块,Hmaster触发合并操作,Region将数据块加载到本地,进行合并;(不断的合并小文件)

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

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

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

猜你喜欢

转载自blog.csdn.net/QJQJLOVE/article/details/107215620