我是HBase的新手,但是我已经进行了设置并了解了有关HBase和Hadoop的一些知识。
当我研究HBase MemStore时,我对MemStore的全部了解是“MemStore是HBase放置必须写入或读取的数据的内存位置”。
因此,这就是为什么我们想在何时何地阅读有关memstore的内容时,还会看到有关垃圾回收的讨论。
现在我的问题是,存储区的唯一目的是在内存中保存可读和可写的数据吗?我们是否可以调整该内存的大小以从hbase获得快速回复?垃圾收集配置(收集器配置)会影响memstore吗?我认为应该是。 :)
最佳答案
您对Hbase Memstore的看法是正确的。通常,将某些内容写入HBase时,会先将其写入内存中的存储区(memstore),一旦此存储区达到一定大小*,它就会刷新到磁盘上并存储到存储文件中(所有内容也会立即写入日志中耐久性文件)。
*从全局 Angular 来看,HBase默认将所有表的所有列族的所有区域的所有内存存储区使用40%的堆(请参阅属性hbase.regionserver.global.memstore.upperLimit)。如果达到此限制,它将开始刷新某些内存,直到内存所使用的内存低于堆的35%(lowerLimit属性)为止。这是可调的,但您需要进行完美的计算才能进行此更改。
是的,GC确实会影响memstore,您实际上可以通过使用Memstore-local分配缓冲区来修改此行为。我建议您阅读有关“使用MemStore-Local分配缓冲区避免在HBase中使用完整GC”的3部分文章:
http://www.cloudera.com/blog/2011/02/avoiding-full-gcs-in-hbase-with-memstore-local-allocation-buffers-part-1/