图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

2020年5月19日14:51:37 发表评论 297 views

HBase组件

在物理上,HBase是由三种类型的servers组成的主从型架构。Region servers服务于数据的读取和写入。客户端在访问数据时,直接与HBase Region servers 进行通信。区域分配、DDL(创建、删除表)操作由HBase主进程处理。Zookeeper是HDFS的一部分,它维护着一个活的集群状态。

Hadoop DataNode存储的是 Region servers 管理的数据。所有HBase的数据都存储在HDFS文件中。 Region servers 与HDFS DataNode对接,这使得 Region servers 所服务的数据能够实现数据定位(将数据放在需要的地方附近)。HBase的数据在写入时是本地的,但当区域被移动时,直到compaction之前,数据都不是本地的。

NameNode维护由文件组成的所有物理数据块的元数据信息。

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

Regions

HBase表按行键范围横向划分为 "Regions"。一个region包含该区域的开始键和结束键之间的表中的所有记录。Regions被分配给集群中的节点,称为 "Region Servers",这些节点为数据的读取和写入服务。一个Region Servers可以服务于大约1000个region。

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

HBase Master

Region分配、DDL(创建、删除表)操作由Hbase Master处理。

一个 master 负责:

  • 协调region servers
    • 在启动时分配region,重新分配region用于恢复或负载平衡。
    • 监控集群中的所有 RegionServer 实例(监听来自 zookeeper 的通知)。
  • 管理功能

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

ZooKeeper: The Coordinator

HBase使用ZooKeeper作为分布式协调服务来维护集群中的服务器状态。Zookeeper维护哪些服务器是活的、可用的,并提供服务器故障通知。Zookeeper使用共识(consensus)来保证共同的共享状态。需要注意的是,应该有三台或五台机器进行共识。

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

How the Components Work Together:各组件如何共同工作

Zookeeper用于协调分布式系统成员的共享状态信息。Region servers 和活动的HMaster用会话连接到ZooKeeper。ZooKeeper通过心率来维护活动会话的临时节点。

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

每个Region Server都会创建一个临时节点。HMaster监控这些节点以发现可用的Region Server,同时它还监控这些节点是否有服务器故障。HMasters 创建临时节点。Zookeeper确定第一个并使用它来确保只有一个master是活动的。活动的HMaster向Zookeeper发送心跳,非活动的HMaster监听活动的HMaster故障通知。

如果Region Server或活动中的HMaster未能发送心跳,则会话过期,并删除相应的临时节点。 更新的监听者会收到被删除节点的通知。活动的HMaster监听Region Server,并在失败时恢复区域服务器。Inactive HMaster监听active HMaster失败,如果active HMaster失败,则Inactive HMaster变为active HMaster。

HBase First Read or Write:HBase第一次读或写

有一个特殊的HBase目录表,叫做META表,它保存了集群中regions的位置。ZooKeeper存储了META表的位置。

这是客户端第一次读取或写入HBase时发生的事情:

  1. 客户端从ZooKeeper中获得托管META表的Region server。
  2. 客户端将查询.META.服务器,以获得它想要访问的row key对应的Region server。客户端会将此信息与META表的位置一起缓存。
  3. 它将从对应的Region server中获取该行。

对于未来的读取,客户端使用缓存来检索META位置和之前读取的row keys。随着时间的推移,它不需要查询META表,除非因为某个Region 移动而没有命中,否则它将重新查询并更新缓存。

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

  • 这个meta表是一个HBase表,它保留了系统中所有区域的列表。
  • .meta.表就像一个b树。
  • .META.表的结构如下:
    • Key: region start key,region id
    • Values: RegionServer

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

Region Server Components

Region Server运行在一个HDFS数据节点上,有以下组件。

  • WAL:Write Ahead Log是分布式文件系统中的一个文件。WAL是用来存储还没有被持久化到永久存储的新数据;它用于故障时的恢复。
  • BlockCache:是读取缓存。它将频繁读取的数据存储在内存中。最近最少使用的数据在满时被驱逐。
  • MemStore:是写缓存。它存储还没有写到磁盘的新数据。它在写到磁盘之前会被排序。每个列族每个区域有一个MemStore。
  • Hfiles将行作为排序的KeyValues存储在磁盘上。

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

HBase Write Steps (1)

当客户端发出Put请求时,第一步是将数据写到 write-ahead日志,即WAL。

  • - Edits被附加到存储在磁盘上的WAL文件的末尾。
  • - WAL是用来恢复未被写入的数据,以备服务器崩溃时恢复未被写入的数据。

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

HBase Write Steps (2)

一旦数据被写入WAL,就会被放置到MemStore中。然后,put请求确认返回给客户端。

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

HBase MemStore

MemStore以排序的KeyValues的形式在内存中存储更新,就像在HFile中存储一样。每个列族有一个MemStore。更新是按照每个列族进行排序的。

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

HBase Region Flush

当MemStore积累了足够的数据后,整个排序后的数据集被写入HDFS中的新HFile。HBase在每个列族中使用多个HFile,其中包含实际的单元格,或KeyValue实例。这些文件是随着时间的推移而创建的,因为在MemStores中排序的KeyValue edits作为文件被刷新到磁盘上。

注意,这就是为什么HBase中的列族数量有限制的原因之一。每个CF只有一个MemStore;当一个CF满了,它们都会被刷新。它还会保存最后写的序列号,这样系统就知道到现在为止持久化了什么。

最高的序列号被存储为每个HFile中的元字段,以反映持久化的位置和继续持久化的位置。在region启动时,序列号被读取,最高的序列号作为新edits的序列号。

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

HBase HFile

数据存储在一个HFile中,其中包含排序的Key/Value。当MemStore积累了足够的数据后,整个排序的KeyValue集被写入HDFS中的新HFile。这是一种顺序写法。它的速度非常快,因为它避免了移动磁盘驱动器头。

图解HBase架构(组件、Regions、HBase Master、ZooKeeper)

HBase HFile Structure

一个HFile包含一个多层索引,它允许HBase在不读取整个文件的情况下寻找数据。多层索引就像一个b+树。

  • 键值对的存储顺序依次递增
  • 按行键指向64KB "块 "中的键值数据的键值索引
  • 每个块都有自己的叶子索引
  • 每个块的最后一个键被放在中间索引中。
  • 根索引指向中间索引

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: