【问题标题】:HBase - What's the difference between WAL and MemStore?HBase - WAL 和 MemStore 有什么区别?
【发布时间】:2016-10-16 07:25:32
【问题描述】:

我正在尝试了解HBase 架构。我可以看到两个不同的术语用于相同的目的。

Write Ahead LogsMemstore,都用于存储尚未持久化到permanent storage的新数据。

WAL 和 MemStore 有什么区别?

更新:

WAL - 用于在服务器崩溃时恢复尚未持久化的数据。 MemStore - 将更新存储在内存中作为排序键值。

在将数据写入磁盘之前似乎有很多重复数据。

【问题讨论】:

    标签: hadoop architecture hbase hdfs


    【解决方案1】:

    WAL 用于恢复而不是用于数据复制。(further see my answer here)

    请通过下面了解更多...

    • Hbase Store 托管一个 MemStore 和 0 个或多个 StoreFiles (HFiles)。 Store 对应于给定区域的表的列族。

    • 预写日志 (WAL) 将所有对 HBase 中数据的更改记录到基于文件的存储中。如果在刷新 MemStore 之前 RegionServer 崩溃或变得不可用,WAL 会确保可以重放对数据的更改。

    • 对于每个 RegionServer 一个 WAL,RegionServer 必须串行写入 WAL,因为 HDFS 文件必须是连续的。这会导致 WAL 成为性能瓶颈。

    • WAL 可以禁用以改善性能瓶颈。 这是通过调用 Hbase 客户端字段来完成的

    Mutation.writeToWAL(false)

    一般注意事项:一般做法是在批量加载数据时禁用WAL 以提高速度。但副作用是,如果您禁用 WAL,如果内存崩溃,您将无法取回数据进行重播。

    此外,如果您使用 solr+ HBASE + LILY,即带有 hbase 的 LILY Morphiline NRT 索引,那么如果您出于性能原因禁用 WAL,它将在 WAL 上工作,那么 Solr NRT 索引将不起作用。因为 Lily 在 WAL 工作。

    请看Hbase architecture section

    【讨论】:

    • 如果 WAL 和 memstore 之间发生故障会怎样?当 db 在崩溃后出现时,它会假设 WAL 中的任何内容都已被复制,但情况可能并非如此。
    • WAL 用于恢复。 AFAIK它应该恢复。这就是选择 WAL 的首要原因。否则它会浪费时间和精力来写入 WAL。
    • 我同意,我关心的是does failure of write to memstore has any impact on response code from hbase?如果不是会有不一致的权利吗?如果是,我们会做一个撤消日志吗?我知道这是一个非常极端的案例,但我们在设计数据库时如何考虑这些案例?
    猜你喜欢
    • 2014-09-11
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2012-11-22
    相关资源
    最近更新 更多