Hbase简介 (3)

Hbase简介

4.2 读数据流程

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简介

Block Cache:缓存磁盘中的数据(磁盘慢)(仅仅放内存中的数据,不放内存中的数据)。当读取stu3,1001,info:name的时候,如果Block Cache没有,同时读取内存和磁盘中的数据(将磁盘的数据放到block Cache,然后将merge(内存读取,磁盘读取)的结果返回。下图中,zhangsan在磁盘中(手动刷入),时间戳t1;lisi在内存中(默认等到一定大小或时间),时间戳t2,且t1>t2。如果是读取内存而不读取磁盘,得到的应该是lisi。而HBase通过上述的方式返回时间戳最大的那一条数据,为zhangsan。(读比写慢)

Hbase简介

4.3 数据 flush 过程

Hbase简介

(上图中,一个Region中有两个store(两个列族),在flush的时候会往hdfs的不同datanode中写入。每一个列族中的列具有高的‘查询同时性’,不同列族中的列再一次查询中不同时查询,所以可以存放在hdfs的不同DataNode节点上)
1)当 MemStore 数据达到阈值(默认是 128M,老版本是 64M),将数据刷到硬盘,将内存中的数据删除,同时删除 HLog 中的历史数据;
2)并将数据存储到 HDFS 中;
3)在 HLog 中做标记点。

4.4 数据合并拆分过程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywgpx.html