根据 HBase 中的 LSM-tree 模型,数据由两部分组成 - 包含数据最近更新的内存树和将数据的其余部分排列成不可变顺序 B 形式的磁盘存储树树位于硬盘驱动器上。 HBase 服务有时会决定它在内存中有足够的更改以将它们刷新到文件存储中。在这种情况下,它执行从虚拟空间到磁盘的数据滚动合并,执行类似于合并排序算法的合并步骤的操作。
在 HBase 基础架构中,此类数据模型基于多个组件,这些组件将集群中的所有数据组织为位于从属服务器上并由主主服务驱动的 LSM 树的集合。该系统由以下组件驱动:
HMaster - 主要的 HBase 服务,通过管理和平衡它们之间的数据来维护从属 Region Server 节点的正确状态。此外,它还驱动存储中元数据信息的更改,例如表或列的创建和更新。
Zookeeper - 表示 HBase 服务及其客户端使用的分布式缓存,用于存储协调一致的有关命名和配置的最新信息。
区域服务器 - HBase 工作节点,以 LSM-tree 方式执行信息片段的管理和存储
HDFS - 由区域服务器在后台用于实际存储数据
从底层开始,HBase 功能的大部分位于区域服务器中,该服务器对表执行读写工作。从技术上讲,每个表都可以作为称为 HRegions 的单独部分的集合分布在不同的区域服务器上。单个区域服务器节点可以容纳一个表的多个 HRegions。每个 HRegion 保存一定范围的内存和磁盘空间之间共享的行,并按 key 属性排序。这些范围在不同区域之间不相交,因此我们可以在集群中传递它们的顺序行为。单个区域服务器 HRegion 包括以下部分:
预写日志 (WAL) 文件 - 数据在每次写入操作进入内存之前被持久化的第一个位置。正如我之前提到的,LSM 树的第一部分保存在内存中,这意味着它可能会受到一些外部因素的影响,例如示例中的功率损耗。将此类操作的日志文件保存在单独的位置可以轻松恢复此部分而不会丢失。
Memstore - 将最近更新信息的有序集合保存在内存中。它是前面描述的 LMS-tree 结构第一部分的实际实现。定期将滚动合并到本地硬盘上称为 HFiles 的存储文件中
HFile - 表示从 Memstore 接收并保存在 HDFS 中的一小段日期。每个 HFile 包含排序的 KeyValues 集合和 B-Tree+ 索引,允许在不读取整个文件的情况下查找数据。 HBase 会定期对这些文件进行归并排序操作,使它们符合标准 HDFS 块的配置大小,避免小文件问题
您可以通过推送数据并将其传递给整个 LSM-tree 过程来手动遍历这些元素。我在最近的文章中描述了如何做到这一点:
https://oyermolenko.blog/2017/02/21/hbase-as-primary-nosql-hadoop-storage/