【问题标题】:Why Hbase need WAL?为什么 Hbase 需要 WAL?
【发布时间】:2015-09-19 11:17:26
【问题描述】:

我是Hbase的新手,发现Hbase会把所有的操作都写到WAL和memstore。

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

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

【问题讨论】:

  • 与任何其他数据库相同的原因是为了持久性。 WAL 文件可以在中断的情况下重播。
  • 但是 Hbase 不支持 ACID 和事务。我不认为它的存在是为了耐用
  • 行级突变是原子的。

标签: hbase wal


【解决方案1】:

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

进一步阅读见my answer here

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2020-05-03
      相关资源
      最近更新 更多