Hbase的存储原理
本人渣渣一个,浅谈一下个人对Hbase的理解。
1、Hbase的存储结构。
主节点Hmaster(一个),工作节点RegionServer(多个)。Hmaster挂掉了对数据没什么影响,因为数据的存取都由RegionServer负责。但是Hmaster不能长时间挂掉,例如会对表的创建和修改产生影响。那我们重点来说一下RegionServer。
RegionServer:内部有多个Region和WAL(write ahead log 预写日志)。
Region中有多个Store,Store中有Memstore和Hfile。
我们先来说一下WAL吧。
WAL是write ahead log预写日志。数据先储存到RegionServer的WAL上,因为一旦Region挂掉后,可以从WAL中恢复数据;但WAL会定期清理没用的数据放到oldlog中,保证WAL不会满。WAL是占开销的,可以把它关掉,但是关掉的话,一旦Region挂掉,数据就没了。如果想节省开销的话,可以将WAL延迟写入,比如延迟一秒或三秒写入。
现在我们来重点说一下Region吧。
Region:Hbase的数据是存到hdfs上的,但hdfs上的数据不能整理排序,是按照数据模块来管理的。Region也是存在hdfs上的,但是Region内部有多个组件,就是Memstore和Hfile,可以使查找数据变快。当Region变大时,Region就开始拆分变小,这样查找速度就快了。当删除Region中的数据后,Region变小就会合并到一起。这就是Region的拆分合并功能。
解释一下Memstore和Hfile。
Memstore: 是放在内存上的,与WAL近似同步。它的功能就是使得数据存储和查找变快,写到内存中后,可以整理排序数据。
Hfile:是正真存放数据的地方。
Hbase的存储过程和细节:数据是存在列族上的,一个Region只能在一个机器上,一个机器可以运行多个Region。数据记录是连续的。Region越大性能越差,但是它的拆分合并功能正好解决了这一弊端。
查询规则:按行键查询,速度快。指定列族,可以减少查询的文件。
存储顺序:rowkey->family->qualifier->timestamp->value 从左到右查询速度快。
列族设计原则:长度越短越好,长的话,冗余就多,占内存,运行缓慢。

这是一个初学者对Hbase的粗略理解,有不对的地方还希望各位大神指点一二。