字典顺序存储,在合理的rowkey设计情况下,范围查询很快。
访问Hbase的接口并维护Cache加快对Hbase的访问。
保证集群中只有一个活跃的Master。存储所有Region的寻址信息。实时监控Region的上线、下线信息,并实时通知Master。存储Hbase的schema和table元数据。
为RegionServer分配Region,负责RegionServer的负责均衡。发现失效的RegionServer并重新分配其下的Region,管理用户对Table的CRUD。
负责维护HMaster分配给他的Region,处理这些Region的IO请求。当Region变大到一个阈值后,RegionServer会进行Region拆分,并告知Master节点,由Master协调拆分后的Region进行迁移。
HBase自动把表水平划分成多个Region,每个Region会保存一个表里面某段连续的数据(类似MYSQL表的横向拆分),每个表最开始只有一个Region,随着数据不断插入,Region不断增大,当增大到一个阈值时,Region就会才分成两个新的Region(裂变)。当Table中的行不断增多,就会有越来越多的Region,这样一张完整的表被保存在多个RegionServer上。
一个Region有多个Store组成,一个Store对应一个列族。Store报货位于内存中的Memstore和位于磁盘中的StoreFile。
写操作先写入Memstore,当Memstore中的数据打到某个阈值,HRegionServer会启动FlashCache进行进行写入StoreFile,每次写入形成单独的StoreFile。当StoreFile文件数量增长到一定的阈值后,系统会进行合并,在合并过程中会进行版本合并和删除工作(写操作的时候都是append操作,不会有更新和删除动作,所以速度很快),形成更大的StoreFile。当一个Region所有的StoreFile的大小和数量超过一定的阈值后,会把所有的Region分隔成两个,并由HMaster分配到相应的RegionServer服务器,实现负载均衡
读操作先在Memstore找,找不到去blockCache找,找不到再到StoreFile找。
blockCache是Hbase的读缓存,HBase采用最近最少访问策略来管理。
在HBase写操作时会先写HLog,然后再往Memstore写。HLog先写到内存,然后每秒进行一次持久化。在写入Memstore后,持久化到StoreFile之前如果HRegionServer挂掉了,则通过HLog进行数据恢复。如果HLog持久化之前挂掉了,那么这一秒的数据将丢失。
StoreFile存储在HDFS中的文件名称。