参考文章
深入HBase架构解析(一)
架构
Zookeeper
Hbase是内置的有zookeeper的,主节点中的 meta table中存储了集群中所有用户HRegion的位置信息,而ZooKeeper的节点中(/hbase/meta-region-server)存储的则直接是这个Meta Table的位置。
启动多个HMaster节点,选举出主节点,其余节点保持热备。Zookeepr负责维护集群的memberlist, 哪台服务器在线,哪台服务器宕机都由zookeeper探测和管理.
所有Region server都尝试连接Zookeeper, 并在这个session中建立一个临时节点(Ephemeral node). HBase的master节点监控这些临时节点的是否存在, 可以发现新加入region server和判断已经存在的region server宕机.
为了高可用需求, HBase的master也有多个, 这些master节点也同时向Zookeeper注册临时节点(Ephemeral Node). Zookeeper把第一个成功注册的master节点设置成active状态, 而其他master node处于inactive状态.
HMaster节点
主节点:主要负责region的分配以及管理从节点。
HMaster没有单点故障问题,可以启动多个HMaster,通过ZooKeeper的Master Election机制保证同时只有一个HMaster处于Active状态,其他的HMaster则处于热备份状态。一般情况下会启动两个HMaster,非Active的HMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担。前文已经介绍过了HMaster的主要用于HRegion的分配和管理,DDL(Data Definition Language,既Table的新建、删除、修改等)的实现等,既它主要有两方面的职责:
- 协调HRegionServer
- 启动时HRegion的分配,以及负载均衡和修复时HRegion的重新分配。
监控集群中所有HRegionServer的状态(通过Heartbeat和监听ZooKeeper中的状态)。
Admin职能
创建、删除、修改Table的定义
- 启动时HRegion的分配,以及负载均衡和修复时HRegion的重新分配。
HBase使用RowKey将表水平切割成多个HRegion,从HMaster的角度,每个HRegion都纪录了它的StartKey和EndKey(第一个HRegion的StartKey为空,最后一个HRegion的EndKey为空),由于RowKey是排序的,因而Client可以通过HMaster快速的定位每个RowKey在哪个HRegion中。
HRegionServer节点
- 存放和管理本地HRegion。
- 读写HDFS,管理Table中的数据。
- 从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后。Client直接通过HRegionServer读写数据。
- HRegionServer一般和DataNode在同一台机器上运行,实现数据的本地性。HRegionServer包含多个HRegion,由WAL(HLog)、BlockCache、MemStore、HFile(storeFile合并而成)组成。
Region
一个memoryStore,内存空间,128M + 多个storeFile文件,内存中数据Flush到文件中来。
一个Region中只可能存在一张表的数据。
表模型
每个表最小包含两个元素。 列族与列
列族与列
每个列必然归属于某一个列族,每个列族下面可以有很多列。
每个列族主要用于维护数据的访问。一般一张表之中不要设置太多的列族。太多的列族将影响数据的读取速度。
rowkey行键
类似于mysql中的主键,不同的rowkey代表不同行。
Timestamp时间戳
Timestamp 则是每个值的版本号标识。默认情况下,timestamp 的值是更新数据时的当前时间戳,由系统自动更新