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

apeeds0o  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(388)

我在监视hbase(0.94.18)数据存储时发现memstore大小和刷新存储的数据大小不一样。
当memstore数据大小增长到128mb时,它会被刷新到hfile。但磁盘上的存储文件大小差异是36.8 mb。压缩已关闭。每次冲水都会重复。
为什么会这样?我错过什么了吗?
我使用hbaseadmin+“hadoop fs-du”用一些java util监视hbase。
表说明:
数据块编码=>'无',磁盘编码=>'真'
hbase日志:

2015-05-14 13:48:06,192 INFO  regionserver.StoreFile (StoreFile.java:close(1334)) - NO General Bloom and NO DeleteFamily was added to HFile (hdfs://localhost:8020/hbase/sometable/8854a960778fe379d454a79e27b653a1/.tmp/dea0e9ac00be44a1a3acba3b900bdf54)
2015-05-14 13:48:06,192 INFO  regionserver.Store (Store.java:internalFlushCache(921)) - Flushed , sequenceid=4460077, memsize=128.0m, into tmp file hdfs://localhost:8020/hbase/sometable/8854a960778fe379d454a79e27b653a1/.tmp/dea0e9ac00be44a1a3acba3b900bdf54
2015-05-14 13:48:06,232 INFO  regionserver.Store (Store.java:commitFile(968)) - Added hdfs://localhost:8020/hbase/sometable/8854a960778fe379d454a79e27b653a1/r/dea0e9ac00be44a1a3acba3b900bdf54, entries=742515, sequenceid=4460077, filesize=36.8m
2015-05-14 13:48:06,233 INFO  regionserver.HRegion (HRegion.java:internalFlushcache(1776)) - Finished memstore flush of ~128.0m/134226872, currentsize=428.4k/438664 for region sometable,,1431608601110.8854a960778fe379d454a79e27b653a1. in 3043ms, sequenceid=4460077, compaction requested=false
daupos2t

daupos2t1#

memstore以concurrentskiplistmap结构存储keyvalues(kv),在64位jvm上每kv的开销为124字节。如果put的有效负载很小,例如一列有几个字节的值,那么您将观察到kv堆大小和它们在磁盘上的大小之间的实质性差异。当kvs持久化在磁盘上时,concurrentskiplistmap、对象和引用的开销显然不存在。这意味着,如果您正在编写大量的小型put,memstore刷新将运行得更快,但会在磁盘上生成比预期更小的hfiles。您可能需要相应地调整hbase压缩设置,例如通过增加hfiles的最大数量。

相关问题