架构:
客户端
拥有访问hbase的接口,同时维护缓存,加速hbase的访问
zookeeper
保证集群中只有一个master
存储root region的位置信息
各组件之间的协调服务
检测regionserver的上下线,通知hmaster
hmaster
给region server分配region
将宕机的regionserver维护的region转交给其他regionserver
hregionserver
维护region,负责region的IO操作
如果一个reigon写的很大,则负责切割region(region的裂变)
region
一个region对应一个表中的若干列,region中数据有序存放
按照rowkey的字典序排序。
memstore
属于特定的store,一个store对应一个列族
在内存存储数据
storefile
属于某个store,一个store会有零到多个storefile,最终以hfile的形式在HDFS存储,storefile中的数据也是有序的
WAL
预写日志,防止数据丢失
hbase的数据模型
四个指标定位一个cell的值
rowkey
唯一
字典序排列
64k空间用于存放内容
列族
一个列族单独有一个store存储
列标志符
用于标识列族中的列,灵活的添加
时间戳/版本号
它是字段的值的一个维度,默认情况时间戳就是数据提交的时间,毫秒值。
0.96之前,默认时间戳三个,0.96及之后默认一个时间戳
读写流程:
读流程:
1、客户端和zookeeper通信,获取root region的地址
2、客户端从root region获取指定表的meta region
3、从meta region获取表中特定rowkey所在的region
4、从查找到的region读取数据
5、首先从memstore查询数据
6、如果查不到就到blockcache查询数据
7、如果还没有,则从storefile查询数据
8、将数据放到blockcache中缓存并返回给客户端
写流程:
1、客户端找到region,写数据
2、首先检查是否需要写WAL
3、如果需要,就将数据先写到WAL中
4、然后将数据写到memstore并返回
LSMTree
minor compaction,major compaction
小合并,用于合并从memstore溢写到磁盘上的小文件,默认最小文件数是3,最大的是10个。合并的小文件有大小限制。
大合并,最终负责将所有store中所有的小文件合并为一个大文件。数据真正的删除也是在这个阶段做。