hbase 随机写入的工作原理

Posted

技术标签:

【中文标题】hbase 随机写入的工作原理【英文标题】:how hbase random write works 【发布时间】:2014-12-05 06:37:45 【问题描述】:

我是 Hbase 的新手。Hbase 非常适合随机更新(放置或删除)表,但我无法理解 hbase 是如何执行的。因为 hbase 使用 HDFS 进行存储,并且无法更新 HDFS 中的任何内容。 Hbase 使用 memstore 更新记录并首先将任何编辑写入 memstore。所以 MemStore 包含按排序键顺序的任意数量的更新行。当它将数据转储到磁盘到 hfile 时,此 hfile 是否与其他 hfile 全局排序.

转储所有 hfile 后,hfile 被复制到 HDFS。WAL 编辑日志的问题相同。WAL 日志文件是否也在 HDFS 中复制。对于每次更新,我们都将更新复制到 HDFS。

【问题讨论】:

【参考方案1】:

这些博文可能对您有所帮助 http://blog.cloudera.com/blog/2012/06/hbase-io-hfile-input-output/ http://blog.cloudera.com/blog/2012/06/hbase-write-path/

但基本上,您发送一个写入 wal(用于恢复)和 memstore 的 put(key, value)。 当 memstore 达到阈值时,memstore 会按排序顺序写入磁盘 (hfile)。 一段时间后,您的磁盘上有多个 hfile。由于您知道每个文件都有排序的内容,因此您可以执行(排序的)合并来查询您的数据。

WAL 只是在崩溃的情况下使用,如果您的数据在 memstore 中并且机器崩溃了,那么您拥有的唯一副本是在 WAL 中。刷新数据后,可以删除包含 memstore 数据的 WAL。

【讨论】:

感谢您的回答。这个博客解释了一切......但是对序列文件还有一个疑问......序列文件中的每个附加都会被复制到所有块中。 那是 HDFS 的一部分。 HDFS 正在做与 HBase 类似的工作。您使用 OutputStream 写入数据。该数据被缓冲到一个块大小,然后一旦块达到该大小,就将其复制到 N 台机器上。或多或少是它的工作原理,您必须认为一切都是不可变的,因此您没有“记录”的概念,当您将某些内容添加到内存中并且达到阈值时,数据将被合并(在块)然后复制。 非常感谢..这个问题让我一整天都在想。从更多阅读中,我得到了所有区域共享的相同 HLog 实例来写入 wal。我认为wal 实例(fsOutputStream)在任何写入之间都没有关闭。 更正目前每个 RegionServer(机器)对于它所托管的所有区域都有一个 HLog(预写日志)。因此,当您向该 RegionServer 写入内容时,它会附加到 WAL。为了确保一致性,WAL 强制 sync() 告诉 HDFS 即使块没有完成,我们也希望数据能够被持久化和复制。 memstore 到 hfile 的刷新不需要同步,因为我们在日志中有数据,所以我们只依赖 hdfs 缓冲。

以上是关于hbase 随机写入的工作原理的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch原理架构

Hbase的介绍和工作原理

HBase介绍和工作原理

2021年大数据HBase(十四):HBase的原理及其相关的工作机制

2021年大数据HBase(十四):HBase的原理及其相关的工作机制

HBase架构与工作原理