HBase如何计算flush size?
How does HBase calculate the flush size?
我正在努力更好地理解 HBase 中的 memstore 刷新算法。
我有一个简单的(snappy-compressed)table,它有 1 个列族,我按如下方式配置了 HBase(我在这个区域服务器上有几个区域):
- hbase.hregion.memstore.flush.size: 128 mib
- Java HBase RegionServer 的堆大小(字节):10 Gib
- hbase.regionserver.global.memstore.upperLimit: 0.4
- hbase.regionserver.global.memstore.size.lower.limit: 0.95
根据日志,似乎刷新发生在 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.size
和 hbase.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 时发生刷新。日志可能会指出这一点。
我正在努力更好地理解 HBase 中的 memstore 刷新算法。
我有一个简单的(snappy-compressed)table,它有 1 个列族,我按如下方式配置了 HBase(我在这个区域服务器上有几个区域):
- hbase.hregion.memstore.flush.size: 128 mib
- Java HBase RegionServer 的堆大小(字节):10 Gib
- hbase.regionserver.global.memstore.upperLimit: 0.4
- hbase.regionserver.global.memstore.size.lower.limit: 0.95
根据日志,似乎刷新发生在 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.size
和 hbase.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 时发生刷新。日志可能会指出这一点。