为什么hbase memstore大小和刷新的数据大小不相等?

时间:2015-05-14 14:44:33

标签: hbase flush

我正在监控hbase(0.94.18)数据存储,发现存储库大小和刷新的存储数据大小不一样。

当memstore数据大小增加到 128 Mb 时,它会刷新到HFile。但是磁盘上的存储文件大小差异 36.8 Mb 。压缩已关闭。它重复每次冲洗。

为什么会这样?我错过了什么吗?

我使用HbaseAdmin +“hadoop fs -du”监视一些java util的hbase。

表格描述:

DATA_BLOCK_ENCODING => 'NONE',ENCODE_ON_DISK => '真正的'

Hbase日志:

{{1}}

1 个答案:

答案 0 :(得分:0)

MemStore在ConcurrentSkipListMap结构中存储KeyValues(KV),在64位JVM上每个KV的开销为124字节。如果您的put有很小的有效负载,例如一个具有几个字节值的列,那么您将观察到KV堆大小与它们在磁盘上的大小之间存在很大差异。当KV持久存储在磁盘上时,ConcurrentSkipListMap,对象和引用的开销显然不存在。这意味着如果你写了很多小的看跌期权,你的memstore刷新会运行得更快,但会在磁盘上产生比预期更小的HFile。您可能需要相应地调整HBase压缩设置,例如通过增加HFiles的最大数量。