6

我正在研究 Hbase。我对 Hbase 如何使用 LSM 按排序顺序存储数据有疑问。

据我了解,Hbase 在大规模数据处理中使用 LSM Tree 进行数据传输。当数据来自客户端时,它首先顺序存储在内存中,然后排序并存储为 B-Tree 作为存储文件。比它将 Store 文件与 Disk B-Tree(of key) 合并。这是正确的吗 ?我错过了什么吗?

  • 如果是,则比在集群环境中。有多个 RegionServers 接受客户端请求。在那种情况下,(每个 regionServer 的)所有 Hlogs 如何与磁盘 B-Tree 合并(作为分布在所有 dataNode 磁盘上的现有密钥)?

  • 是不是像 Hlog 只将数据与同一 regionServer 的 Hfile 合并?

4

2 回答 2

10

你可以看看这两篇描述你想要什么的文章

http://blog.cloudera.com/blog/2012/06/hbase-io-hfile-input-output/

http://blog.cloudera.com/blog/2012/06/hbase-write-path/

简单来说:

  • 客户端向负责处理密钥的区域服务器发送数据
  • (.META. 包含每个区域的关键范围)
  • 用户操作(例如put)被写入Write-Ahead-Log(WAL,HLog)
  • (该日志仅用于“安全”,如果区域服务器崩溃,则重播日志以恢复未写入磁盘的数据)
  • 写入日志后,数据也写入 MemStore
  • ...一旦 memstore 达到阈值(conf 属性)
  • memstore 刷新到磁盘上,创建单个 hfile
  • ...当 hfile 的数量增长过多(conf 属性)时,压缩开始(合并)

在磁盘数据结构方面:http: //blog.cloudera.com/blog/2012/06/hbase-io-hfile-input-output/ 上面的文章涵盖了hfile格式......这是一种仅附加格式,并且可以看作是 b+树。(请记住,这个 b+tree 不能就地修改)

HLog仅用于“安全”,一旦将数据写入hfiles,日志就可以丢弃

于 2012-12-07T13:13:52.900 回答
5

根据 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/

于 2017-02-22T11:10:38.813 回答