HBase 架构图(组件、Region、HBase Manager、ZooKeeper)
HBase 组件
物理上,HBase 是由三种服务器组成的主从架构。区域服务器用于读取和写入数据。当客户端访问数据时,它直接与 HBase 区域服务器通信。 Region分配和DDL(表创建、删除)操作由HBase主进程管理。 Zookeeper 是 HDFS 的一部分,管理实时集群状态。
Hadoop DataNode 存储由区域服务器管理的数据。所有HBase数据都存储在HDFS文件中。区域服务器与 HDFS DataNode 接口,这允许区域服务器提供的数据实现数据局部性(数据放置在需要的地方附近)。 HBase 数据在写入时是本地的,但在移动区域时,数据在压缩之前不是本地的。
NameNode 存储组成文件的所有物理数据块的元数据信息。
Regions
HBase表根据行键范围水平划分为“Regions”。区域包含表中该区域的开始键和结束键之间的所有条目。区域被分配给称为区域服务器的集群节点,这些节点用于读取和写入数据。单个区域服务器可以服务大约 1000 个区域。
HBase Master
Region分配和DDL(表创建、删除)操作由Hbase Master管理。
主站负责:
- 协调区域服务器
- 在启动时分离区域并重新分配区域以进行恢复或负载平衡。
- 监控集群中的所有RegionServer实例(监听zookeeper通知)。
- 管理功能
ZooKeeper:协调器
HBase 使用 ZooKeeper 作为分布式协调服务来维护集群中服务器的状态。 Zookeeper 管理哪些服务器处于活动状态且可用,并通知服务器故障。 Zookeeper 使用共识来确保共同的共享状态。需要注意的是,要有三到五台机器才能达成共识。
组件如何协同工作:组件如何协同工作
Zookeeper 用于协调分布式系统成员之间的共享状态信息。区域服务器和活动 HMaster 使用会话连接到 ZooKeeper。 ZooKeeper 通过心跳维护活动会话的临时节点。
每个区域服务器都会创建一个临时节点。 HMaster 监视这些节点的可用区域服务器,并监视这些节点的服务器故障。 HMasters 创建临时节点。 Zookeeper 确定第一个主机并使用它来确保只有一个主机处于活动状态。活动 HMaster 向 Zookeeper 发送心跳,非活动 HMaster 监听来自活动 HMaster 的错误消息。
如果Region Server或Active HMaster发送心跳失败,则会话过期,对应的临时节点被删除。更新的侦听器会收到已删除节点的通知。主用 HMaster 监听 Region Server,并在 Region Server 发生故障时恢复。不活动的 HMaster 无法监控活动的 HMaster。如果Active HMaster发生故障,Inactive HMaster将成为Active HMaster。
HBase 首次读取或写入:HBase 第一次读取或写入
HBase 有一个特殊的目录表,称为 META 表,用于存储集群中 Region 的位置。 ZooKeeper存储META表的位置。
这是客户端第一次读取或写入 HBase 时发生的情况:
- 客户端从 ZooKeeper 接收托管 META 表的区域服务器。
- 客户请求.META。 server 获取与其正在访问的行键对应的区域服务器。客户端缓存此信息以及 META 表的位置。
- 它从相应的区域服务器接收一行。
对于将来的读取,客户端使用缓存来检索之前读取的 META 位置和行键。随着时间的推移,它不需要查询META表,除非由于移动而丢失了某个区域,否则它会再次查询并刷新缓存。
- 此元表是一个 HBase 表,保存系统中所有区域的列表。
- .元。董事会就像一棵 B 树。
- .META 结构。表格如下:
- Key:Region Start Key,Region ID
- Values:RegionServer
Region Server 组件
Region Server 运行在 HDFS 数据节点上,具有以下组件。
- WAL:预写日志是分布式文件系统中的文件。 WAL用于存储未持久存储的新数据;它用于故障恢复。
- BlockCache:这是一个读缓存。它将经常读取的数据存储在内存中。最近使用的数据满后将被推出。
- MemStore:这是一个写缓存。它存储尚未写入磁盘的新数据。在写入磁盘之前对其进行排序。每个区域和列族都有一个 MemStore。
- Hfiles 将行作为排序键值存储在磁盘上。
HBase写入步骤(一)
当客户发出销售请求时,第一步是将数据写入处方日志,即WAL。
- - 更改将附加到存储在磁盘上的 WAL 文件的末尾。
- - WAL 用于在服务器崩溃时恢复未写入的数据。
HBase写入步骤(2)
数据一旦写入WAL,就会被放入MemStore中。然后将销售请求的确认返回给客户。
HBase MemStore
MemStore 将内存中的更新存储为存储在 HFile 中的排序键值。每个列族有一个 MemStore。更新按列族排序。
HBase Region Flush
当MemStore收集到足够的数据时,整个排序的数据集将写入HDFS中的新HF文件中。 HBase 在每个包含实际单元格或 KeyValue 实例的列族中使用多个 HFile。随着 MemStore 中排序的 KeyValue 更改作为文件刷新到磁盘,这些文件会随着时间的推移而创建。
注意,这是HBase列族数量有限的原因之一。每个CF只有一个MemStore;当CF满时,它们全部被刷新。它还存储最后写入的序列号,以便系统知道到目前为止已保存的内容。
最高序列号作为元字段存储在每个 HF 文件中,以反映持久性和持久性位置。当一个区域启动时,会计算序列号,并将最高的序列号用作新更改的序列号。
HBase HFile
数据存储在包含排序键/值的 HF 文件中。当MemStore收集到足够的数据时,整个排序的KeyValue集合将被写入HDFS中的新的HF文件中。这是一种顺序书写方式。这是非常快的,因为它避免了移动磁盘驱动器磁头。
HBase HFile结构
HFile包含多级索引,允许HBase在不读取整个文件的情况下查找数据。多级索引就像 b+ 树。
- 键值对按升序存储
- 键值索引根据行键指向64KB“块”的键值数据
- 每个块都有自己的页索引每个块都放置在中间索引中。根索引
- 指向中间索引
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。