HBase工作机制
1 图示
2 组件说明
-
Client : hbase客户端,1.包含访问hbase的接口。比如,linux shell,java api。2.除此之外,它会维护缓存来加速访问hbase的速度。比如region的位置信息。
-
Zookeeper : 1.监控Hmaster的状态,保证有且仅有⼀个活跃的Hmaster。达到高可用。2.它可以存储所有region的寻址入口。如:root表在哪⼀台服务器上。3. 实时监控HregionServer的状态,感知HRegionServer的上下线信息,并实时通知给Hmaster。4. 存储hbase的部分元数据。
-
HMaster : 1. 为HRegionServer分配Region(新建表等)。2. 负责HRegionServer的负载均衡。3. 负责Region的重新分配(HRegionServer宕机之后的Region分配,HRegion裂变:当Region过大之后的拆分)。4. HDFS上的垃圾回收。5. 处理schema的更新请求 。
-
HRegionServer : 1. 维护HMaster分配给的Region(管理本机的Region)。2. 处理client对这些region的读写请求,并和HDFS进行交互。3. 负责切分在运行过程中组件变大的Region。
-
HLog : 1. 对HBase的操作进行记录,使用WAL写数据,优先写入log(put操作:先写日志再写memstore,这样可以防止数据丢失,即使丢失也可以回滚)。
-
HRegion : 1. HBase中分布式存储和负载均衡的最小单元,它是表或者表的一部分。
-
Store : 1. 相当于⼀个列簇。
-
Memstore : 1. 内存缓冲区,用于将数据批量刷新到hdfs中,默认大小为128M。
-
HStoreFile :1. 和HFile概念意义,不过是⼀个逻辑概念。HBase中的数据是以HFile存储在HDFS上。
3 组件之间的关系
hmaster:hregionserver=1:*
hregionserver:hregion=1:*
hregionserver:hlog=1:1
hregion:hstore=1:*
store:memstore=1:1
store:storefile=1:*
storefile:hfile=1:1
4 小结
rowkey:行键,和mysql的主键同理,不允许重复。
columnfamily: 列簇,列的集合之意。
column:列。
timestamp:时间戳,默认显示最新的时间戳,可⽤于控制k对应的多个版本值,默认查最新的数据。
version:版本号,表示记录数据的版本。
cell:单元格,kv就是cell。
模式:无。
数据类型:只存储byte[]。
多版本:每个值都可以有多个版本。
列式存储:⼀个列簇存储到⼀个目录。
稀疏存储:如果⼀个kv为null,不占用存储空间。