HBase · 2021年3月21日 0

HBase 系统架构详解

HBase 和 Hadoop一样:同属主从分布式架构,隶属于 Hadoop 生态系统,主要由以下组件组成:Client、Zookeeper、HMaster、HRegionServer 和 HRegion。在底层,HBase 将数据以 HFile 的形式存储在 HDFS 中,总体的系统架构如下图所示:

HBase系统架构图
HBase系统架构图

一、Client

Client 包含访问 HBase 的接口,使用 RPC机制 与 HMaster 和 HRegionServer 进行通信并维护 Cache 来加快对 HBase 的访问,比如 HRegion 的位置信息,与 HMaster 通信管理表的操作,与 HRegionServer 进行数据读写类操作。

二、Zookeeper

2.1 概述

HBase 引入 ZooKeeper(简写为:ZK) 的目的是防止出现单点故障。通过 ZK 的选举机制,来保证任何时候集群中只有一个处于 Active 状态的 Master,HMaster 和 HRegionServer 启动时会向 ZK 进行注册。

2.2 主要作用

  • 存储所有 HRegion 的寻址入口,从而完成数据的读写操作;
  • 实时监控 HRegionServer 的上线和下线状态,并反馈给 HMaster;
  • 存放整个 HBase 集群的元数据以及集群的状态信息。

三、HMaster

3.1 概述

Master 是所有 RegionServer 的管理者,其实现类为 HMaster,负责集群状态的维护管理。

3.2 主要作用

  • 对表的操作:增、删、改、查操作;
  • 为 HRegionServer 分配 HRegion;
  • 调整 HRegion 的分布,管理 HRegionServer 的负载均衡;
  • 发现失效的 HRegionServer 并重新分配其上的 HRegion;
  • 当 HRegion 切分后,负责两个新生成 HRegion 的分配;
  • 处理元数据的更新请求。

四、HRegionServer

4.1 概述

RegionServer 为 Region 的管理者,其实现类为 HRegionServer。一般和 Hadoop 的 DataNode 部署在同一台机器上运行,实现数据的本地性。如上图所示,HRegionServer 包含多个 HRegion,由 WAL(Write Ahead Log,预写日志)、BlockCacheMemStoreHFile 组成。

4.2 组成

HBase 物理存储结构图
HBase 物理存储结构图
  • HRegionServer 内部管理着一系列 HRegion 对象,每个 HRegion 对应着表(Table)中的一个 Region,一个表可以有一个或者多个 HRegion,这些 HRegion 既可以在相同的 HRegionServer 上,也可以在不同的 HRegionServer 上;
  • HRegion 由多个 Store 构成,每个 Store 对应了一个表在这个 HRegion 中的一个列族(Column Family),即每个列族就是一个集中的存储单元,因此推荐将具有相近I/O特性的列(Column)存储在一个列族中,以实现数据的高效读取;
  • Store(HStore)是 HBase 中存储的核心,它主要实现了读写 HDFS 功能,一个 Store 由一个 MemStore 和 0 个或多个 StoreFile 组成。

4.3 主要作用

HRegionServer 是 HBase 集群中具体对外提供服务的进程,通过与 HMaster 通信获取自己需要服务的数据表,并向 HMaster 反馈其运行状况,主要功能有:

  • 维护 HMaster 分配给它的 HRegion 的启动和管理;
  • 响应用户读写请求(如:Get、Scan、Put、Delete等);
  • 负责切分在运行过程中变得过大的 HRegion。

五、HRegion

HBase 中的每张表都可以通过 Row Key 按照一定的范围被分割成多个 HRegion (子表)。每个 HRegion 都记录了它的起始 Row Key 和 结束 Row Key。其中第一个 HRegion 的起始 Row Key 为空,最后一个 HRegion 的结果 Row Key 为空。

由于 Row Key 是按照字典顺序进行排序的,因为 Client 可以通过 HMaster 快速定位到 Row Key 位于哪个 HRegion 中。

HRegion 是 HBase 中分布式存储和负载均衡的最小单元,不同的 HRegion 分布在不同的 HRegionServer 上,每个 HRegion 大小也都不一样。HRegion 虽然是分布式存储的最小单元,但并不是存储的最小单元。

HRegion 由一个或者多个 Store 组成,每个 Store 保存一个列族(Column Family),因此一个 HRegion 中有多少个列族就有多少个 Store。

每个 Store 又由一个 MemStore 和 0 个至多个 StoreFile 组成。

MemStore 存储在内存中,一个 StoreFile 对应一个 HFile 文件。HFile 文件存储在 HDFS 上,在 HFile 中的数据是按 Row Key、Column Family、Column排序,对相同的单元格(Cell)则按 Timestamp(时间戳)倒序排列

5.1 主要作用

  • HRegion 负责和 Client 通信,实现数据的读写;

六、Hadoop HDFS

Hadoop HDFS 作为 HBase 的底层存储介质。帮助 HBase 实现提供给客户端的可用性可靠性

1) 可用性

在 HBase 语境中,可用性可定义为:系统处理故障的能力。最常见的故障会导致 HBase 集群里一个或几个节点脱离集群和停止服务请求。这可能是因为节点出现硬件故障或者由于某种原因软件功能失常。任何这种故障都可以认为是那个节点和集群其他部分的网络隔离。

当 RegionServer 由于某种原因不能联络时,它所服务的数据会切换到其他 RegionServer 。HBase 能够这样做,从而保持高可用性。

2) 可靠性和持久性

可靠性指的是数据库语境中通用的术语,大多数情况下可以认为是数据持久性和性能保证的结合。

6.1 主要作用

6.1.1 单一命名空间

HBase 把数据存储在一个文件系统上。所以 RegionServer 可以访问覆盖整个集群的文件系统。文件系统为集群里所有 RegionServer 提供单一命令空间。

一个 RegionServer 读写的数据可以为其他 RegionServer 读写。这让 HBase 满足可用性保证。

如果第一个 RegionServer 宕机,任何其他 RegionServer 都可以从底层文件系统读取数据,接管第一个 RegionServer 服务的 Region。

HBase 在设计上选择了分布式文件系统,紧密结合 HDFS 。HDFS 为 HBase 提供了单一命名空间,大多数集群里 DataNode 和 RegionServer 部署在同一台机器上。这有利于 RegionServer 读写本地 DataNode。因此节省了网络I/O。

6.1.2 可靠性和抗故障能力

分布式文件系统 HDFS 通过复制数据和保存多个副本来实现服务器宕机不会导致底层存储上的数据丢失的特性。同时,小比例服务器的宕机不应该严重影响底层存储的性能。

在理论上,HBase 可以运行在任何提供这种特性的文件系统上。但是 HBase 在其发展过程中一直紧密结合 HDFS。除了抗故障能力,HDFS 提供了某些写的语义,用来为每个字节的写入保证了持久性。

七、参考资料

  1. 《HBase 权威指南》
  2. 《HBase 实战》
  3. 《HBase 分布式存储系统应用》