1

我是 Hbase 新手,发现 Hbase 会将所有操作写入 WAL 和 memstore。

Q1:我想知道为什么 Hbase 需要 WAL?

Q2:Hbase每次放或删除数据都必须写入WAL,为什么不直接在它的数据文件中操作呢?

4

3 回答 3

3

Q1) 为什么 Hbase 需要 WAL?

WAL是为了恢复目的。让我们通过MapR docs近距离了解 hbase 架构。

当客户端发出 Put 请求时,第一步是将数据写入预写日志,即 WAL:

  • 编辑附加到存储在磁盘上的 WAL 文件的末尾。
  • WAL 用于在服务器崩溃时恢复尚未持久化的数据。

在此处输入图像描述

一旦数据被写入 WAL,它就会被放置在 MemStore 中。然后,put 请求确认返回给客户端。

在此处输入图像描述

Q2) Hbase每次放或删除数据都必须写入WAL,为什么不直接在它的数据文件中操作呢?

如果启用..WAL_

如果WAL禁用,它可以通过删除额外的写入开销来直接对文件进行操作WAL

笔记:

WAL出于突变(行级突变)/写入性能目的,将禁用一般情况。如果这样做,潜在的警告是,将无法恢复……意味着数据丢失。此外,如果您使用 SOLR,它将起作用WAL,因此不会更新 SOLR 文档。如果没有这种情况,您可以继续禁用WAL

进一步阅读请参阅我的答案here

于 2019-08-05T19:51:53.180 回答
1

HBase 是它的:http own ACID semantics: //hbase.apache.org/acid-semantics.html

它需要一个 WAL,以便它可以在 RegionServer 失败的情况下重播编辑。WAL 在提供持久性保证方面起着重要作用。

WAL 是可选的。您可以在 HBase 写入期间禁用 WAL。如果它被禁用,您将看到一些性能改进。但是,可能存在一些集群故障/灾难场景,您可能会丢失一些数据。因此,这是一个取决于您的用例的权衡。

于 2015-09-20T20:43:52.490 回答
1

如果 RegionServer 崩溃,我们可以从 WAL 恢复编辑,如果没有 WAL,则在刷新每个 MemStore 并写入新的 StoreFiles 之前 RegionServer 故障的情况下,可能会丢失数据。你可以在这里找到更多信息

于 2017-05-03T12:49:14.587 回答