HBase如何计算flush size?

How does HBase calculate the flush size?

我正在努力更好地理解 HBase 中的 memstore 刷新算法。

我有一个简单的(snappy-compressed)table,它有 1 个列族,我按如下方式配置了 HBase(我在这个区域服务器上有几个区域):

根据日志,似乎刷新发生在 70mb 标记处,我在日志中反复看到的内容与此类似

DefaultStoreFlusher Flushed memstore data size=68.14 MB at sequenceid=12561

为什么不是 128 MB?

现在 hbase.regionserver.global.memstore.upperLimit 已被 hbase.regionserver.global.memstore.size

弃用

如果 one memstore 的大小达到 hbase.hregion.memstore.flush.size 那么该区域的 all memstores 将被刷新(即使那些是小于 128 mb)还有一个区域服务器设置触发由 hbase.regionserver.global.memstore.sizehbase.regionserver.global.memstore.size.lower.limit 调整的刷新,如果区域服务器中所有 memstore 大小的总和超过 Heap * hbase.regionserver.global.memstore.size.lower.limit * hbase.regionserver.global.memstore.size 那么该区域中的所有 memstores 都将被刷新

数据大小是单元格数据的总和(关键字节 + 值字节)。这是将刷新到 Hfile 的实际数据。 但是相同数据的堆使用通常更多。除了单元格的数据,它还包括元数据和索引。当堆大小达到 hbase.hregion.memstore.flush.size 时发生刷新。日志可能会指出这一点。