我是 Hbase 新手,发现 Hbase 会将所有操作写入 WAL 和 memstore。
Q1:我想知道为什么 Hbase 需要 WAL?
Q2:Hbase每次放或删除数据都必须写入WAL,为什么不直接在它的数据文件中操作呢?
Q1) 为什么 Hbase 需要 WAL?
WAL
是为了恢复目的。让我们通过MapR docs近距离了解 hbase 架构。
当客户端发出 Put 请求时,第一步是将数据写入预写日志,即 WAL:
一旦数据被写入 WAL,它就会被放置在 MemStore 中。然后,put 请求确认返回给客户端。
Q2) Hbase每次放或删除数据都必须写入WAL,为什么不直接在它的数据文件中操作呢?
如果启用..是WAL
_
如果WAL
被禁用,它可以通过删除额外的写入开销来直接对文件进行操作WAL
。
笔记:
WAL
出于突变(行级突变)/写入性能目的,将禁用一般情况。如果这样做,潜在的警告是,将无法恢复……意味着数据丢失。此外,如果您使用 SOLR,它将起作用WAL
,因此不会更新 SOLR 文档。如果没有这种情况,您可以继续禁用WAL
进一步阅读请参阅我的答案here
HBase 是它的:http own ACID semantics
: //hbase.apache.org/acid-semantics.html
它需要一个 WAL,以便它可以在 RegionServer 失败的情况下重播编辑。WAL 在提供持久性保证方面起着重要作用。
WAL 是可选的。您可以在 HBase 写入期间禁用 WAL。如果它被禁用,您将看到一些性能改进。但是,可能存在一些集群故障/灾难场景,您可能会丢失一些数据。因此,这是一个取决于您的用例的权衡。
如果 RegionServer 崩溃,我们可以从 WAL 恢复编辑,如果没有 WAL,则在刷新每个 MemStore 并写入新的 StoreFiles 之前 RegionServer 故障的情况下,可能会丢失数据。你可以在这里找到更多信息