一、概述
HBase是基于列式存储的分布式数据库,底层存储采用的是LSM树,是Hadoop生态下核心技术之一。
1.1 架构图
1.2 组件介绍
HBase由三种类型的服务器以主从模式构成:
- Region Server:负责数据的读写服务,用户通过与Region server交互来实现对数据的访问。
- HBase HMaster:负责Region的分配及数据库的创建和删除等操作。
- ZooKeeper:负责维护集群的状态(某台服务器是否在线,服务器之间数据的同步操作及master的选举等)。
HDFS的DataNode负责存储所有Region Server所管理的数据,即HBase中的所有数据都是以HDFS文件的形式存储的。出于使Region server所管理的数据更加本地化的考虑,Region server是根据DataNode分布的。HBase的数据在写入的时候都存储在本地。但当某一个region被移除或被重新分配的时候,就可能产生数据不在本地的情况。这种情况只有在所谓的compaction之后才能解决。
二、HMaster
HMaster负责region的分配,数据库的创建和删除操作,其职责包括:
- 调控Region server的工作
- 在集群启动的时候分配region,根据恢复服务或者负载均衡的需要重新分配region。
- 监控集群中的Region server的工作状态。(通过监听zookeeper对于ephemeral node状态的通知)。
- 管理数据库
- 提供创建,删除或者更新表格的接口。
如下图所示:
三、Zookeeper
HBase利用ZooKeeper维护集群中服务器的状态并协调分布式系统的工作,其功能如下:
- 维护服务器是否存活,是否可访问的状态并提供服务器故障/宕机的通知。
- 使用一致性算法来保证服务器之间的同步。
- 负责Master选举的工作。
需要注意的是要保证良好的一致性及顺利的Master选举,集群中的服务器数目必须是奇数(如三台或五台)。
如下图所示:
3.1 组件间的协作
ZooKeeper用来协调分布式系统的成员之间共享的状态信息。Region Server及HMaster也与ZooKeeper连接。ZooKeeper通过心跳信息为活跃的连接维持相应的ephemeral node。如下图所示:
每一个Region server都在ZooKeeper中创建相应的ephemeral node。HMaster通过监控这些ephemeral node的状态来发现正常工作的或发生故障下线的Region server。
HMaster之间通过互相竞争创建ephemeral node进行Master选举。ZooKeeper会选出区中第一个创建成功的作为唯一一个活跃的HMaster。活跃的HMaster向ZooKeeper发送心跳信息来表明自己在线的状态。不活跃的HMaster则监听活跃HMaster的状态,并在活跃HMaster发生故障下线之后重新选举,从而实现了HBase的高可用性。
如果Region server或者HMaster不能成功向ZooKeeper发送心跳信息,则其与ZooKeeper的连接超时之后与之相应的ephemeral node就会被删除。监听ZooKeeper状态的其他节点就会得到相应node不存在的信息,从而进行相应的处理。活跃的HMaster监听Region Server的信息,并在其下线后重新分配Region server来恢复相应的服务。不活跃的HMaster监听活跃HMaster的信息,并在起下线后重新选出活跃的HMaster进行服务。
四、Region Server
HBase中的表是根据row key的值水平分割成所谓的region的。一个region包含表中所有row key位于region的起始键值和结束键值之间的行。
集群中负责管理Region的结点叫做Region server。Region server负责数据的读写。每一个Region server大约可以管理1000个region。Region的结构如下图所示:
4.1 组成部分
Region server由如下几个部分组成:
- WAL:既Write Ahead Log。WAL是HDFS分布式文件系统中的一个文件,即HLog。WAL用来存储尚未写入永久性存储区中的新数据。WAL也用来在服务器发生故障时进行数据恢复。
- Block Cache:Block cache是读缓存。