乐趣区

关于hbase:带你了解-HBase-数据模型和-HBase-架构

摘要:HBase 是一个面向列的 NoSQL 数据库。

本文分享自华为云社区《HBase 架构:HBase 数据模型 & HBase 读 / 写机制》,作者:Donglian Lin。

HBase 架构:HBase 数据模型

家喻户晓,HBase 是一个面向列的 NoSQL 数据库。尽管它看起来相似于蕴含行和列的关系数据库,但它不是关系数据库。关系数据库是面向行的,而 HBase 是面向列的。那么,让咱们首先理解面向列和面向行的数据库之间的区别:

面向行与面向列的数据库:

• 面向行的数据库以行的顺序存储表记录。而面向列的数据库 将表记录存储在一系列列中,即列中的条目存储在磁盘上的间断地位。

为了更好地了解它,让咱们举个例子并思考下表。

如果此表存储在面向行的数据库中。它将存储如下所示的记录:

1 , 保罗沃克, 美国, 231 , 加拉多,

2, Vin Diesel , 巴西, 520 , Mustang

如上所示,在面向行的数据库中,数据是基于行或元组存储的。

尽管面向列的数据库将此数据存储为:

1 , 2 , Paul Walker , Vin Diesel , 美国, 巴西, 231 , 520 , Gallardo , Mustang

在面向列的数据库中,所有列值都存储在一起,就像第一列值将存储在一起,而后第二列值将一起存储,其余列中的数据以相似形式存储。

• 当数据量十分大时,比方 PB 级或 EB 级,咱们应用面向列的办法,因为单列的数据存储在一起,能够更快地拜访。
• 尽管面向行的办法绝对无效地解决较少数量的行和列,但面向行的数据库存储数据是一种结构化格局。
• 当咱们须要解决和剖析大量半结构化或非结构化数据时,咱们应用面向列的办法。例如解决在线剖析解决的应用程序,如数据挖掘、数据仓库、包含剖析在内的应用程序等。
• 而在线事务处理(例如解决结构化数据并须要事务属性(ACID 属性)的银行和金融畛域)应用面向行的办法。

HBase 表具备以下组件,如下图所示:

表格: 数据以表格格局存储在 HBase 中。但这里的表格是面向列的格局。
行 键: 行键用于搜寻记录,使搜寻速度更快。你会很想晓得怎么做吗?我将在本博客的架构局部进行解释。
列 族: 各种列组合在一个列族中。这些列族存储在一起,这使得搜寻过程更快,因为能够在一次查找中一起拜访属于同一列族的数据。
列 限定符: 每列的名称称为其列限定符。
单元格: 数据存储在单元格中。数据被转储到由行键和列限定符专门标识的单元格中。
工夫戳: 工夫戳是日期和工夫的组合。无论何时存储数据,它都会与其工夫戳一起存储。这使得搜寻特定版本的数据变得容易。

用更简略易懂的形式,咱们能够说 HBase 包含:

• 一组表
• 每个表都有列族和行
• 行键在 HBase 中充当主键。
• 对 HBase 表的任何拜访都应用此主键
• HBase 中存在的每个列限定符示意与驻留在单元格中的对象绝对应的属性。

HBase 架构:HBase 架构的组件

HBase 具备三个次要组件, 即 HMaster Server、HBase Region Server、Regions 和 Zookeeper。

下图解释了 HBase 架构的层次结构。咱们将独自探讨它们中的每一个。

当初在进入 HMaster 之前,咱们将理解 Region,因为所有这些 Server(HMaster、Region Server、Zookeeper)都是用来协调和治理 Region 并在 Region 外部执行各种操作的。因而,您很想晓得什么是区域以及它们为何如此重要?

HBase 架构:区域

一个区域蕴含调配给该区域的开始键和完结键之间的所有行。HBase 表能够划分为多个区域,将一个列族的所有列存储在一个区域中。每个区域都蕴含按排序程序的行。

许多区域被调配给一个 Region Server,它负责解决、治理、执行对该组区域的读取和写入操作。

所以,以更简略的形式完结:

• 一个表能够分为多个区域。区域是存储在开始键和完结键之间的数据的有序行范畴。
• 一个 Region 的默认大小为 256MB,能够依据须要进行配置。
• 区域服务器为客户端提供一组区域。
• 一个区域服务器能够为客户端提供大概 1000 个区域。

当初从层次结构的顶部开始,我首先想向您解释 HMaster Server,它的作用相似于 HDFS 中的 NameNode。而后,在层次结构中向下挪动,我将带您理解 ZooKeeper 和 Region Server。

HBase 架构:HMaster

如下图所示,您能够看到 HMaster 解决驻留在 DataNode 上的 Region Server 汇合。让咱们理解 HMaster 是如何做到这一点的。

• HBase HMaster 执行 DDL 操作(创立和删除表)并将区域调配给区域服务器,如上图所示。
• 它协调和治理 Region Server(相似于 NameNode 在 HDFS 中治理 DataNode)。
• 它在启动时将区域调配给区域服务器,并在复原和负载平衡期间将区域重新分配给区域服务器。
• 它监督集群中所有 Region Server 的实例(在 Zookeeper 的帮忙下),并在任何 Region Server 敞开时执行复原流动。
• 它提供了一个用于创立、删除和更新表的接口。

HBase 有一个宏大的分布式环境,仅靠 HMaster 不足以治理所有内容。那么,你会想晓得是什么帮忙 HMaster 治理这个微小的环境?这就是 ZooKeeper 呈现的中央。在理解了 HMaster 如何治理 HBase 环境后,咱们将理解 Zookeeper 如何帮忙 HMaster 治理环境。

HBase 架构:ZooKeeper – 协调器

下图解释了 ZooKeeper 的协调机制。

• Zookeeper 就像 HBase 分布式环境中的协调器。它有助于通过会话进行通信来保护集群内的服务器状态。
• 每个 Region Server 和 HMaster Server 都会定期向 Zookeeper 发送间断的心跳,并查看哪个服务器是流动的和可用的,如上图所示。它还提供服务器故障告诉,以便能够执行复原措施。
• 从上图能够看出,有一个不流动的服务器,它作为流动服务器的备份。如果流动服务器呈现故障,它就会派上用场。
• 流动的 HMaster 向 Zookeeper 发送心跳,而非流动的 HMaster 侦听流动 HMaster 发送的告诉。如果流动 HMaster 未能发送心跳,则会话将被删除,非流动 HMaster 变为活动状态。
• 而如果 Region Server 无奈发送心跳,则会话将过期并告诉所有侦听器。而后 HMaster 执行适当的复原操作,咱们将在本博客稍后探讨。
• Zookeeper 还保护 .META Server 的门路,这有助于任何客户端搜寻任何区域。Client 首先必须与.META Server 核查某个区域所属的 Region Server,并获取该 Region Server 的门路。

说到.META Server,我先给大家解释一下什么是.META Server?因而,您能够轻松地将 ZooKeeper 和 .META Server 的工作分割在一起。稍后,当我在此博客中向您解释 HBase 搜寻机制时,我将解释这两者如何协同工作。

HBase 架构:元表

• META 表是一个非凡的 HBase 目录表。它保护了 HBase 存储系统中所有区域服务器的列表,如上图所示。
• 从图中能够看到,.META 文件以键和值的模式保护表。Key 代表区域的起始键和它的 id,而值蕴含区域服务器的门路。

正如我在向您解释 Region 时曾经探讨过的 Region Server 及其性能,因而当初咱们正在向下挪动层次结构,我将专一于 Region Server 的组件及其性能。稍后我将探讨搜寻、浏览、写作的机制,并理解所有这些组件如何协同工作。

HBase 架构:Region Server 的组件

下图显示了区域服务器的组件。当初,我将别离探讨它们。

区域服务器保护在 HDFS 顶部运行的各种区域。区域服务器的组件是:

WAL: 从上图中能够得出结论,Write Ahead Log (WAL) 是附加到分布式环境中每个 Region Server 的文件。WAL 存储尚未长久化或提交到永恒存储的新数据。它用于复原数据集失败的状况。
Block Cache: 从上图能够分明的看到 Block Cache 位于 Region Server 的顶部。它将常常读取的数据存储在内存中。如果 BlockCache 中的数据最近起码应用,则该数据将从 BlockCache 中删除。
MemStore: 是写缓存。在将所有传入数据提交到磁盘或永恒内存之前,它会存储所有传入数据。一个区域中的每个列族都有一个 MemStore。正如您在图像中看到的,一个区域有多个 MemStore,因为每个区域蕴含多个列族。数据在提交到磁盘之前按字典程序排序。
HFile: 从上图能够看出 HFile 是存储在 HDFS 上的。因而,它将理论单元存储在磁盘上。当 MemStore 的大小超过时,MemStore 将数据提交到 HFile。

当初咱们晓得了 HBase 架构的次要和主要组件,我将在此解释机制和他们的合作致力。不论是读还是写,首先咱们要搜寻从哪里读或者从哪里写一个文件。所以,让咱们理解这个搜寻过程,因为这是使 HBase 十分风行的机制之一。

HBase 架构:搜寻如何在 HBase 中初始化?

如您所知,Zookeeper 存储 META 表地位。每当客户端向 HBase 收回读取或写入申请时,就会产生以下操作:

  1. 客户端从 ZooKeeper 检索 META 表的地位。
  2. 客户端而后从 META 表中申请相应行键的 Region Server 的地位来拜访它。客户端将此信息与 META 表的地位一起缓存。
  3. 而后它将通过从相应的 Region Server 申请来获取行地位。

对于未来的援用,客户端应用其缓存来检索 META 表的地位和先前读取的行键的区域服务器。而后客户端将不会援用 META 表,直到并且除非因为区域挪动或挪动而导致未命中。而后它将再次申请 META 服务器并更新缓存。

与每次一样,客户端不会浪费时间从 META 服务器检索 Region Server 的地位,因而,这节俭了工夫并使搜寻过程更快。当初,让我告诉您如何在 HBase 中进行写入。其中波及哪些组件以及它们如何参加?

HBase 架构:HBase 写机制

下图解释了 HBase 中的写入机制。

写入机制顺次通过以下过程(参考上图):

步骤 1:每当客户端有写申请时,客户端将数据写入 WAL(Write Ahead Log)。
• 而后将编辑附加到 WAL 文件的开端。
• 该 WAL 文件保留在每个 Region Server 中,Region Server 应用它来复原未提交到磁盘的数据。

第 2 步:将数据写入 WAL 后,将其复制到 MemStore。

第 3 步:一旦数据放入 MemStore,客户端就会收到确认。

第 4 步:当 MemStore 达到阈值时,它将数据转储或提交到 HFile。

当初让咱们深刻理解一下 MemStore 在写作过程中的奉献以及它的性能是什么?

HBase 写机制 - MemStore

• MemStore 总是依照字典程序(按字典形式)将存储在其中的数据更新为已排序的 KeyValue。每个列族有一个 MemStore,因而每个列族的更新以排序的形式存储。
• 当 MemStore 达到阈值时,它会以排序的形式将所有数据转储到一个新的 HFile 中。此 HFile 存储在 HDFS 中。HBase 为每个列族蕴含多个 HFile。
• 随着工夫的推移,HFile 的数量随着 MemStore 转储数据而增长。
• MemStore 还保留了最初写入的序列号,因而 Master Server 和 MemStore 都晓得到目前为止提交了什么以及从哪里开始。当区域启动时,读取最初一个序列号,并从该编号开始新的编辑。

正如我屡次探讨过的,HFile 是 HBase 架构中的次要长久存储。最初,所有的数据都提交到 HFile 中,HFile 是 HBase 的永恒存储。因而,让咱们看看 HFile 的属性,它能够在读写时更快地进行搜寻。

HBase 架构:HBase 写入机制 - HFile

• 写入按程序搁置在磁盘上。因而,磁盘读写头的静止非常少。这使得写入和搜寻机制十分快。
• 每当关上 HFile 时,HFile 索引就会加载到内存中。这有助于在单次查找中查找记录。
• 预告片是一个指向 HFile 的元块的指针。它写在提交文件的开端。它蕴含无关工夫戳和布隆过滤器的信息。
• 布隆过滤器有助于搜寻键值对,它会跳过不蕴含所需行键的文件。工夫戳还有助于搜寻文件的版本,它有助于跳过数据。

在理解写入机制和各种组件在使写入和搜寻更快方面的作用之后。我将向您解释读取机制在 HBase 架构中是如何工作的?而后咱们将转向进步 HBase 性能的机制,如压缩、区域拆分和复原。

HBase 架构:读取机制

正如咱们在搜寻机制中所探讨的,如果客户端的缓存中没有它,客户端首先从 .META 服务器中检索区域服务器的地位。而后它按程序执行以下步骤:

• 为了读取数据,扫描器首先在块缓存中查找行单元。这里存储了所有最近读取的键值对。
• 如果 Scanner 未能找到所需的后果,它会挪动到 MemStore,因为咱们晓得这是写缓存内存。在那里,它搜寻最近写入的文件,这些文件尚未转储到 HFile 中。
• 最初,它将应用布隆过滤器和块缓存从 HFile 加载数据。

到目前为止,我曾经探讨了 HBase 的搜寻、读写机制。当初咱们来看看 HBase 机制,它使 HBase 中的搜寻、读取和写入变得疾速。首先,咱们将理解 Compaction,这是其中一种机制。

HBase 架构:压缩

HBase 联合 HFiles 以缩小存储并缩小读取所需的磁盘寻道次数。这个过程称为压缩。Compaction 从一个区域中抉择一些 HFile 并将它们组合起来。如上图所示,有两种类型的压缩。

  1. 主要压缩 :HBase 主动抉择较小的 HFile 并将它们从新提交到较大的 HFile,如上图所示。这称为轻微压实。它执行合并排序以将较小的 HFile 提交到较大的 HFile。这有助于优化存储空间。
  2. Major Compaction:如上图所示,在 Major compaction 中,HBase 将一个区域的较小的 HFiles 合并并从新提交到一个新的 HFile。在这个过程中,雷同的列族被搁置在新的 HFile 中。它会在此过程中删除已删除和过期的单元格。它进步了读取性能。

但在此过程中,输入输出磁盘和网络流量可能会变得拥挤。这称为写放大。因而,它通常安顿在低峰值负载工夫。

当初我将探讨的另一个性能优化过程是 Region Split。这对于负载平衡十分重要。

HBase 架构:区域拆分

下图阐明了 Region Split 机制。

每当一个区域变大时,它就会被分成两个子区域,如上图所示。每个区域正好代表父区域的一半。而后将此拆分报告给 HMaster。这由同一个 Region Server 解决,直到 HMaster 将它们调配给新的 Region Server 以进行负载平衡。

接下来,最初但并非最不重要的一点是,我将向您解释 HBase 如何在产生故障后复原数据。咱们晓得故障复原是 HBase 的一个十分重要的个性,因而让咱们理解 HBase 如何在故障后复原数据。

HBase 架构:HBase 解体和数据恢复

• 每当 Region Server 呈现故障时,ZooKeeper 都会告诉 HMaster 故障。
• 而后 HMaster 将解体的 Region Server 的区域散发并调配给许多流动的 Region Server。为了复原呈现故障的 Region Server 的 MemStore 的数据,HMaster 将 WAL 分发给所有 Region Server。
• 每个 Region Server 从新执行 WAL 来为那个失败的 region 的列族构建 MemStore。
• 数据按工夫程序(按工夫程序)写入 WAL。因而,从新执行该 WAL 意味着进行所有在 MemStore 文件中所做和存储的更改。
• 所以,在所有的 Region Servers 执行完 WAL 之后,所有列族的 MemStore 数据都被复原了。

我心愿这篇博客能帮忙您理解 HBase 数据模型和 HBase 架构。心愿你喜爱它。

点击关注,第一工夫理解华为云陈腐技术~

退出移动版