HBase - WAL 和 MemStore 有什么区别?

HBase - What's the difference between WAL and MemStore?

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

Write Ahead LogsMemstore,都是用来存储还没有持久化到permanent storage.

的新数据

WAL 和 MemStore 有什么区别?

更新:

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

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

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

请通过以下内容了解更多...

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

  • Write Ahead Log (WAL) 记录了 HBase 中数据的所有更改,以文件为基础的存储。如果 RegionServer 在刷新 MemStore 之前崩溃或变得不可用,WAL 确保可以重播对数据的更改。

  • 每个 RegionServer 有一个 WAL,RegionServer 必须串行写入 WAL,因为 HDFS 文件必须是顺序的。这导致 WAL 成为性能瓶颈。

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

    来完成的

Mutation.writeToWAL(false)

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

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

工作

请看Hbase architecture section