HBase的 Archi结构:用例、组件和数据模型

⚡ 智能摘要

HBase 架构由四个协调组件构成——HMaster、Region Servers、ZooKeeper 和 HDFS——它们以面向列的模型存储数据,将其拆分为区域,并提供低延迟的随机读写服务。

  • 🧭 HMaster: 将区域分配给区域服务器,处理负载均衡和故障转移,并管理架构和元数据更改。
  • 🗄️ 区域服务器: 随着数据增长,自动处理客户端的读写请求、托管区域并拆分区域。
  • 🧱 地区和门店: 每个区域为每个列族维护一个存储,该存储由内存中的 MemStore 和磁盘上的 HFiles 构建而成。
  • 🔗 ZooKeeper: 协调集群, tracks 服务器故障,并保存客户端连接时使用的仲裁配置。
  • 🧮 数据模型: 表将列族和行分组,行键充当每次访问的主键。
  • HBase 与 HDFS: HBase 在 HDFS 批量存储的基础上增加了低延迟随机读写功能。

HBase架构及其组件、数据模型以及读写数据流

Apache HBase 是一个分布式、面向列的 NoSQL 数据库,它运行在……之上。 Hadoop的 以及 Hadoop 分布式文件系统 (HDFS)。它的架构结合了协调主服务器、区域服务器和 ZooKeeper,用于存储非常大的表并提供快速的随机读写服务。

HBase的 Archi结构及其重要组成部分

HBase架构包含以下主要组件:

  • 大师
  • HRegion服务器
  • H区域
  • 动物园管理员
  • 高密度文件系统

下图是 HBase 的详细架构及其组件。

HBase架构图,展示了HMaster、Region服务器、ZooKeeper和HDFS。

大师

HBase 中的 HMaster 是 HBase 架构中主服务器的实现。它充当监控代理,监控集群中所有 RegionServer 实例,并作为所有元数据变更的接口。在分布式集群环境中,Master 运行在 NameNode 上。Master 运行多个后台线程。

以下是 HBase 中 HMaster 扮演的重要角色:

  • 在性能和维护集群中的节点方面发挥着至关重要的作用。
  • HMaster 提供管理性能并将服务分发到不同的区域服务器。
  • HMaster 将区域分配给区域服务器。
  • HMaster 控制负载均衡和故障转移,以处理集群中各个节点的负载。
  • 当客户端想要更改任何架构或任何元数据操作时,HMaster 将负责这些操作。

HMaster 接口公开的一些方法主要是面向元数据的方法:

  • 表(创建表、删除表、启用、禁用)
  • ColumnFamily(添加Column、修改Column)
  • 区域(移动、分配)

客户端与 HMaster 和 ZooKeeper 进行双向通信。对于读写操作,它直接联系 HRegion 服务器。HMaster 将区域分配给区域服务器,并检查区域服务器的运行状况。

整个架构中包含多个区域服务器。每个区域服务器上都部署了 HLog 服务,用于存储所有日志文件。

HBase 区域服务器

当 HBase Region Server 收到来自客户端的读写请求时,它会将请求分配给实际列族所在的特定 Region。客户端可以直接联系 HRegion 服务器;客户端与 HRegion 服务器通信无需强制性的 HMaster 权限。只有当需要进行与元数据和模式更改相关的操作时,客户端才需要 HMaster 的帮助。

HRegionServer 是 Region Server 的实现。它负责服务和管理 Region,也就是分布式集群中存在的数据。Region Server 运行在 Hadoop 集群中的数据节点上。

HMaster 可以与多个 HRegion 服务器连接,并执行以下操作:

  • 托管和管理区域
  • 自动分割区域
  • 处理读写请求
  • 直接与客户沟通

HBase 区域

HRegion 是 HBase 集群的基本构建单元。它们包含表的分布,并由列族组成。一个 Region 包含多个 Store,每个 Store 对应一个列族。它主要由两个组件构成:MemStore 和 HFile。

动物园管理员

HBase的 动物园管理员 ZooKeeper 是一个集中式监控服务器,负责维护配置信息并提供分布式同步功能。分布式同步功能协调集群中运行的分布式应用程序,并在节点间提供协调服务。如果客户端想要与各个区域通信,则必须首先与 ZooKeeper 通信。

这是一个开源项目,它提供了许多重要的服务。

ZooKeeper提供的服务:

  • 维护配置信息
  • 提供分布式同步
  • 建立客户端与区域服务器的通信
  • 提供代表不同区域服务器的临时节点
  • 允许主服务器使用这些临时节点来发现集群中可用的服务器。
  • Tracks服务器故障和网络分区

主节点和 HBase 从节点(区域服务器)会向 ZooKeeper 注册自身。客户端需要访问 ZooKeeper (ZK) 仲裁配置才能连接到主节点和区域服务器。

当 HBase 集群中的节点发生故障时,ZooKeeper 仲裁会触发错误消息并开始修复故障节点。

高密度文件系统

HDFS 是 Hadoop 分布式系统。 文件系统顾名思义,它提供了一个分布式存储环境,并且是一个设计用于在通用硬件上运行的文件系统。它将每个文件存储在多个数据块中,为了保持容错性,这些数据块会在Hadoop集群中进行复制。

HDFS 具有高度容错性,并且能够在廉价的通用硬件上运行。通过向集群添加节点,并使用廉价的通用硬件执行处理和存储操作,与现有配置相比,它可以为客户端提供更好的性能。

这里,每个数据块中存储的数据都会复制到 3 个节点上,因此如果任何一个节点发生故障,也不会丢失数据;它具有完善的备份和恢复机制。

HDFS 与 HBase 组件连接,并以分布式方式存储大量数据。

HBase 数据模型

HBase 数据模型是一组组件,包括表、行、列族、单元格、列和版本。HBase 表包含列族和行,其中的元素被定义为主键。HBase 数据模型表中的列表示对象的属性。

HBase 数据模型由以下元素组成:

  • 桌子一套
  • 每个表都有列族和行
  • 每个表都必须有一个定义为主键的元素。
  • 行键在 HBase 中充当主键。
  • 所有对 HBase 表的访问都使用此主键。
  • HBase 中的每一列都表示一个对象对应的属性。

HBase 用例

以下是 HBase 的一些使用案例,并详细解释了 HBase 为各种技术问题提供的解决方案。

问题陈述 解决方案
电信行业面临以下技术挑战:存储电信领域生成的数十亿条呼叫详细记录 (CDR) 日志记录;提供对客户 CDR 日志和计费信息的实时访问;以及提供与传统数据库系统相比更具成本效益的解决方案。 HBase 用于存储数十亿行详细通话记录。如果每月向现有 RDBMS 数据库添加 20TB 的数据,性能将下降。要处理此用例中的大量数据,HBase 是最佳解决方案。HBase 执行快速查询并显示记录。
银行业每天产生数百万条记录。此外,银行业还需要一种能够检测资金交易欺诈的分析解决方案。 为了存储、处理和更新海量数据并执行分析,理想的解决方案是将 HBase 与多个 Hadoop 生态系统组件集成在一起。

除此之外,HBase 还可以用于:

  • 每当需要编写大量数据的应用时。
  • 用于执行在线日志分析并生成合规性报告。

HBase的存储机制

HBase 是一个列式数据库,数据存储在表中。表按 RowId 排序。如下所示,HBase 的 RowId 是表中存在的若干列族的集合。

模式中存在的列族是键值对。仔细观察,每个列族包含多个列。列值存储在磁盘内存中。表中的每个单元格都有自己的元数据,例如时间戳和其他信息。

下面显示的是面向列的存储布局,包括行键、列族和单元格。

HBase 存储机制,展示了行键、列族、列和单元格

以下是代表 HBase 表模式的关键术语:

  • 表格:现有行的集合。
  • 行:列族的集合。
  • 列族:列的集合。
  • 列:键值对的集合。
  • 命名空间:逻辑组ping 表格。
  • 单元格:一个 {行,列,版本} 元组,用于精确指定 HBase 中的单元格定义。

列式存储与行式存储

列式存储和行式存储的区别在于它们的存储机制。众所周知,传统的关系模型以行为单位存储数据,即数据行。而列式存储则以列和列族为单位存储数据表。

下表列出了这两种存储方式的一些主要区别。

列式数据库 面向行的数据库
用于涉及处理和分析的情况,例如在线分析处理及其应用。 在线交易处理,例如银行和金融领域,就采用了这种方法。
该模型可以存储的数据量非常大,以PB级计算。 它是为少量的行和列而设计的。

HBase 读取和写入数据详解

下图显示了客户端对 HFile 的读取和写入操作。

HBase 在客户端、区域服务器、MemStore 和 HFile 之间进行读写数据流。

步骤 1)客户端想要写入数据,因此首先与区域服务器通信,然后与区域通信。

步骤 2)该区域联系 MemStore 以存储与列族关联的数据。

步骤 3)首先,数据存储在 MemStore 中,数据在 MemStore 中进行排序,然后刷新到 HFile 中。使用 MemStore 的主要目的是基于行键将数据存储在分布式文件系统中。MemStore 位于 Region Server 的主内存中,而 HFile 则写入 HDFS。

步骤 4)客户端想要读取来自各个区域的数据。

步骤 5)反过来,客户端可以直接访问 MemStore 并请求数据。

步骤 6)客户端向 HFiles 请求数据。数据由客户端获取和检索。

MemStore 用于保存对 HBase 数据存储的内存修改。下表显示了 HBase 区域中对象的层次结构(从上到下)。

HBase 集群中存在的 HBase 表
地区 所呈现表格的 HRegions
商店 表中每个区域的每个列族存储一个值
内存存储 每个存储区对应一个表,每个区域都有一个对应的 MemStore。它会在将数据刷新到 HFile 之前对其进行排序。排序后,读写性能都会提升。
存储文件 表中每个区域的每个商店的 StoreFiles
阻止 StoreFiles 中存在的块

HBase 与 HDFS

HBase运行在HDFS和Hadoop之上。HDFS和HBase之间的一些主要区别在于数据操作和处理方面。

HBase的 高密度文件系统
低延迟操作 高延迟操作
随机读写 一次写作,多次阅读
通过访问 外壳命令,一个客户端 API JavaREST、Avro 或 Thrift 主要通过 MapReduce 访问(MR工作
存储和处理都可以进行。 它仅用于存储区域

一些典型的IT行业应用会将HBase操作与Hadoop结合使用。这些应用包括股票交易所数据和网上银行数据操作,而HBase是最适合这些应用的解决方案。集群准备就绪后,您可以…… 在 HBase 中读取和写入数据 or 安装 HBase 在一个全新的节点上。

常见问题

是的。HBase 是一个分布式、面向列的 NoSQL 数据库,其模型基于 Google Bigtable 构建于 HDFS 之上。它将稀疏数据存储在列族表中,并且不像关系型数据库那样使用固定模式或 SQL 连接。

WAL(也称为 HLog)记录 Region Server 上的每一笔写入操作,直到数据进入 MemStore。它存储在 HDFS 上,因此如果 Region Server 在刷新之前崩溃,HBase 会重放 WAL 来恢复未保存的编辑内容。

压缩操作会合并 HFile 以加快读取速度。小压缩会将几个相邻的小 HFile 合并成一个。大压缩会将某一列族的所有 HFile 重写成一个文件,并物理删除已删除和过期的单元格。

两者都是受 Bigtable 启发而开发的 NoSQL 存储系统,但 HBase 运行在 HDFS 上,具有单个活动 HMaster 和强一致性; Cassandra HBase 具有无主控架构、可调最终一致性复制功能,非常适合 Hadoop 分析; Cassandra 适合随时在线的写作者。

设计行键时,应使读写操作均匀分布在各个区域。避免使用单调递增的键,因为这会在单个 Region Server 上造成热点。使用加盐、哈希或字段反转等方法,并尽量缩短键的长度,因为它们在每个单元格中都会重复出现。

当区域的存储规模超过预设阈值时,该区域会自动拆分。区域服务器会根据中间行键将其拆分为两个子区域,HMaster 可能会将其中一个子区域重新分配给其他服务器以平衡负载。

人工智能和机器学习工具会分析查询和访问模式,从而提出避免热点的行键和列族设计方案。它们还会扫描 Region Server 指标和日志,以便及早发现异常情况,例如区域倾斜或节点故障。

是的。 GitHub 副驾驶 HBase草案 Java 客户端代码、shell 命令和扫描过滤器均来自简短的注释。 Rev在实际集群上运行之前,请查看其输出,确认表名、列族以及 Connection 和 Table 等 API 类是否正确。

总结一下这篇文章: