沈颖的家 2016-01-17
学习hbase时,hfile和region关系看的头晕晕,下面是逻辑关系图,同时也也可以看hbase简介 搭建
中第五部分的笔记。
Data Node
Data Node是指HDFS集群中负责存储数据的服务器,与此相对的是Naming Node,参见:
3
Region中又按照Column Famliy 列族 分为不同的Store,每个Store由MemStore和StoreFile组成。
4
HFile
如上图所示,一个StoreFile对应着一个HFile。而HFile是存储在HDFS之上的。HFile文件格式是基于Google Bigtable中的SSTable,如下图所示
5
整体上看
下面这张图中把DataNode,Region(HRegion)和HFile以及它们之间的关系都表示出来了
说白了, hfile是每个列族的存储数据文件,多个存储列族的hfile在以rowkey为逻辑单位的行关系上逻辑组成了一个个的region,region被分配到多个region server机器上来存储。
最终hfile存储在hdfs文件中。
表行大小决定---->有多少个region
表列族个数决定----->有多少store
一个store------> 对应一个memstore---->数据不断从memstore写入硬盘,造成了慢慢生成多个storefile
一个storefile ----> 对应一个hfile
综上所述总结结构图如下:
看下图,hbase表创建时候默认就是一个region,在行记录不断增加下,达到一定的数值hbase region会自动切分,变成多个region,每一个region里面由多个store组成(store的个数是由hbase 表列族个数决定 在看上图,可以看到左侧的Hregion里就有两个store),
下图测试案例表中,表建立和数据插入都通过hbase shell操作,数据都仅仅是十几条记录,可以看到
hbase表对应的region个数。
每一个Hregion存储一张表的若干行,行里每一个列族对应一个HStore实例,列族个数影响性能,所以对于一个表,
创建Hregion的时候,已经包含了所有列族,剩下就是对行的存储,行越多,Hregion就越多。所以一个Hregion不可能包含其它表的列族,只有本表的列族。
6 客户端读取数据流程图:
读取顺序: 客户端--->行健---> 列族---> 列名 ----> 时间戳 ---> 列值
hbase写入数据流程:
先写到hlog,然后在向memstore写,memstore到达一定阈值后,在向hfile写。
client---> hlog ---> memstore ---> hfile
如下图:
hbase读取一行数据流程:
对应图如下:
hbase删除数据流程:
hbase删除操作: 不会立即删除hfile,会先将数据打一个删除标签,当开启一个大的合并,才会将打标记的数据删除,这个大合并消耗比较大的性能,只有在晚上或者资源使用少时才使用。