1、整体架构
· HMaster
· 多个RegionServer
· HLog
· BlockCache
· 多个Region
· 多个Store
· MemStore
· 多个StoreFile (以HFile的文件格式存储于HDFS中)
· HBaseClient
· Zookeeper
· HMBackup
2、HBase中涉及的角色及每个角色的具体功能
2.1 HMaster
- 管理所有的RegionServer,当HM通过zookeeper得知某个RS宕机或进程故障,由HM将该RS原来所负责的Regions转移到其他正常的RS上。
- 负责表、列族和region的相关操作,例如表的create,modify,remove,enable,disable;列族的add,modify,remove;region的move,assign,unassign;以及权限,表的分割与合并等。
- 负责集群的负载均衡并定期检查和清理hbase:meta表
与HDFS不同的是,客户端获取数据由客户端直连RS,所以HM挂了依然可以查询数据,但不能建新的表;HBase不若HDFS般依赖Master。
2.2 RegionServer
负责服务和管理Region,是用户数据表的实际管理者。
数据在分布式集群中会被水平分区,每个RS管理一部分分区,负责数据的写入,查询,缓存和故障恢复等。
同时在分布式集群中,RS与HDFS的DN通常按1:1的比例安装,这样RS的数据文件可以存一个副本于本机的DN中,从而在读取时可利用HDFS的短路径读取(short circuit)绕过网络请求,降低读取时延。
- 负责数据的读取和写入,比如get,put,delete,next等
- Region的拆分和压缩。拆分Region确实是RS作出的本地决策,但拆分过程本身必须与许多参与者协调。RS在Region拆分前后通知HM,从而更新.meta.表,以便客户端发现新的子Region,并重新排列HDFS中的目录结构和数据文件。
- 一些后台操作:检查拆分并处理轻微压缩,检查主要的压缩,定期刷新Memstore到Storefile中的内存写入,定期检查RS的WAL(write ahead log)
2.2.1 保证高可靠性的WAL
每个RS中有一个HLog,在对数据进行写入的所有操作时,都要先将操作记录到HLog中,如果操作未成功写入到HLog,那么也不会写入到相应数据所在的RS的store的MemStore中。
2.3 zookeeper
存储着hbase:meta信息。HBase:meta表记录着HBase中所有Regoin相关的信息。Zookeeper管理了所有RS的信息,包括具体的数据段存放在哪个RS上。
RS定时向zookeeper发送心跳。
2.3.1 客户端连接RS
客户端先与zookeeper通信,查询出需要连接哪个RS,再与相应的RS进行连接。
3、RS内部剖析
RS负责实际数据的读写,一个RS里包含一个WAL与一个或多个Region。当数据量小的时候一个Region就可以存放所有数据,数据量大的时候RS就会拆分region,并通知HM将多个region分配到一个或多个RS中。
3.1 Region
有start key 和end key,这里的Key就是row key,由start key和end key将HBase中的一个大表横向切割成几个子表,这些子表即为region。同时region也是HBase中负载均衡的基本单元,当一个region增长到一定大小时,会自动分裂成两个(region自带分裂策略),一个表中的数据会被分到一个或多个region中进行存储,而region又被HM分配到一个或多个RS中,且一个Region与一个column family确定唯一的cell,这个cell就是store。一个region里有多个store。
3.2 Store
3.2.1 memstore
数据被写入HLog后就被加载到MemStore,MS用于在内存中保存数据,MemStore到达某个阈值时会被刷写到HDFS上,以HFile的形式被持久化起来。
3.2.2 HFile
HFile只有索引信息,真正的东西在HDFS的block中,一个block对应一个HFile。HFile相当于HDFS的客户端。
在物理存储上我们管memstore刷写而成的文件叫HFile,storefile就是Hfile的抽象类而已。