我正在尝试了解HBase
架构。我可以看到两个不同的术语用于同一目的。
Write Ahead Logs
和Memstore
都用于存储尚未保留到permanent storage
的新数据。
WAL
和MemStore之间的区别是什么?
更新
WAL - 用于在服务器崩溃时恢复尚未保留的数据。 MemStore - 将更新作为Sorted Keyvalue存储在内存中。
在将数据写入磁盘之前,似乎有很多重复数据。
答案 0 :(得分:6)
WAL
用于恢复,不用于数据复制。请到下面了解更多...
Hbase商店托管一个MemStore和0个或更多StoreFiles(HFiles)。商店对应于给定地区的表的列族。
预写日志(WAL)将对HBase中数据的所有更改记录到基于文件的存储。如果在刷新MemStore之前RegionServer崩溃或变得不可用,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上工作。