本文共 780 字,大约阅读时间需要 2 分钟。
HBase读数据流程
Client先访问zookeeper,根据namespace、表名和rowkey从meta表读取region的位置
找到这个region对应的regionserver
查找对应的region
先从MemStore找数据,如果没有,再到BlockCache里面读
BlockCache还没有,再到StoreFile上读(为了读取的效率)
如果是从StoreFile里面读取的数据,不是直接返回给客户端,而是先写入BlockCache,再返回给客户端
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丢失会不安全)
转载地址:http://zvazi.baihongyu.com/