本文介绍了HBase MemStore和垃圾回收的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是HBase的新手,但我已经进行了设置,并且了解了一些关于HBase和Hadoop的知识。

当我研究HBase MemStore时,我对MemStore的理解是"MemStore是HBase放置必须写入或读取的数据的内存中位置"。因此,这就是为什么我们希望在何时何地阅读有关memstore的内容,也会看到有关垃圾收集的讨论。

现在我的问题是,memstore的唯一目的是在内存中保存可读和可写的数据吗?我们是否可以调整该内存的大小以获得HBase的快速回复?垃圾收集配置(收集器配置)是否会影响内存存储?因为我认为应该是肯定的。:)

推荐答案

您关于HBase内存存储的看法是正确的。通常,当向HBase写入内容时,首先将其写入内存中的存储(Memstore),一旦此memstore达到一定大小*,就会将其刷新到磁盘中的存储文件中(所有内容也会立即写入日志文件以确保持久性)。

*从全局的角度看,默认情况下,HBase使用堆的40%(有关所有表的所有列族的所有区域的所有内存存储,请参阅属性hbase.regionserver.global.memstore.upperLimit))。如果达到此限制,它将开始刷新一些内存存储区,直到内存存储区使用的内存至少低于堆的35%(lowerLimit属性)。这是可调整的,但您需要经过完美的计算才能进行此更改。

是的,GC确实会影响memstore,您实际上可以通过使用memstore本地分配缓冲区来修改此行为。我建议您阅读关于"使用MemStore-Local Allocation Buffers避免HBase中的全部GC"的第3部分文章,如下所示:http://www.cloudera.com/blog/2011/02/avoiding-full-gcs-in-hbase-with-memstore-local-allocation-buffers-part-1/

这篇关于HBase MemStore和垃圾回收的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-19 12:38