hbase存储结构图-----客户端读写数据顺序

学习hbase时,hfile和region关系看的头晕晕,下面是逻辑关系图,同时也也可以看hbase简介 搭建 hbase存储结构图-----客户端读写数据顺序

中第五部分的笔记。



Data Node
Data Node是指HDFS集群中负责存储数据的服务器,与此相对的是Naming Node,参见:

<noscript></noscript>


hbase存储结构图-----客户端读写数据顺序
 



HRegion
Region是表按照RowKey范围划分的不同的部分,相当于DBMS中的分区。同时Region也是表在集群中分布的最小单位,可以被分配到某一个Region Server上。
随着数据不断插入表,region不断增大,当region的某个列族(store)达到一个阈值(默认256M),会拆分成两个region。
 


hbase存储结构图-----客户端读写数据顺序
 

3
Region中又按照Column Famliy  列族 分为不同的Store,每个Store由MemStore和StoreFile组成。


hbase存储结构图-----客户端读写数据顺序
 

4
HFile
如上图所示,一个StoreFile对应着一个HFile。而HFile是存储在HDFS之上的。HFile文件格式是基于Google Bigtable中的SSTable,如下图所示


hbase存储结构图-----客户端读写数据顺序
 

5

整体上看
下面这张图中把DataNode,Region(HRegion)和HFile以及它们之间的关系都表示出来了


hbase存储结构图-----客户端读写数据顺序
 

说白了, hfile是每个列族的存储数据文件,多个存储列族的hfile在以rowkey为逻辑单位的行关系上逻辑组成了一个个的region,region被分配到多个region server机器上来存储。

最终hfile存储在hdfs文件中。

表行大小决定---->有多少个region

表列族个数决定----->有多少store

一个store------> 对应一个memstore---->数据不断从memstore写入硬盘,造成了慢慢生成多个storefile

一个storefile ----> 对应一个hfile

综上所述总结结构图如下:


hbase存储结构图-----客户端读写数据顺序
 

看下图,hbase表创建时候默认就是一个region,在行记录不断增加下,达到一定的数值hbase region会自动切分,变成多个region,每一个region里面由多个store组成(store的个数是由hbase 表列族个数决定 在看上图,可以看到左侧的Hregion里就有两个store),

下图测试案例表中,表建立和数据插入都通过hbase shell操作,数据都仅仅是十几条记录,可以看到

hbase表对应的region个数。

每一个Hregion存储一张表的若干行,行里每一个列族对应一个HStore实例,列族个数影响性能,所以对于一个表,
创建Hregion的时候,已经包含了所有列族,剩下就是对行的存储,行越多,Hregion就越多。所以一个Hregion不可能包含其它表的列族,只有本表的列族。

 
hbase存储结构图-----客户端读写数据顺序
 

6 客户端读取数据流程图:


hbase存储结构图-----客户端读写数据顺序
 

读取顺序:  客户端--->行健---> 列族---> 列名 ----> 时间戳 ---> 列值

hbase写入数据流程:

先写到hlog,然后在向memstore写,memstore到达一定阈值后,在向hfile写。

client---> hlog ---> memstore ---> hfile

如下图:


hbase存储结构图-----客户端读写数据顺序
 

hbase读取一行数据流程:

读取过程简单来说:  读取一行数据--->先检查memstore等待修改的队列--->在检查blockcache看是否包含该行的block是否最近被访问过---> 最后访问硬盘上对应的hfile

对应图如下:

hbase删除数据流程:

hbase删除操作: 不会立即删除hfile,会先将数据打一个删除标签,当开启一个大的合并,才会将打标记的数据删除,这个大合并消耗比较大的性能,只有在晚上或者资源使用少时才使用。

 
hbase存储结构图-----客户端读写数据顺序
 



 

相关推荐