pengsuyun 发表于 2015-1-19 15:41 没看懂楼主贴出来的内容 |
楼上说的不错 这是数据块的参数,希望可以帮助楼主加深对数据块的认识 hbase.regionserver.blockCacheCount :内存中缓存块(block cache)数。缓存中StoreFiles(HFiles)的块(block)数量。 hbase.regionserver.blockCacheEvictedCount :因超出堆大小限制,从缓存中释放的块数量。 hbase.regionserver.blockCacheFree: 可用的缓存块容量。 hbase.regionserver.blockCacheHitCachingRatio:缓存块的缓存命中率(0-100)。读取的缓存命中率被配置为查看缓存(如cacheblocks=true)。 hbase.regionserver.blockCacheHitCount :StoreFiles(HFiles) 从缓存中读取的块数量。 hbase.regionserver.blockCacheHitRatio:缓存块的命中率(0-100).包括所有读请求,尽管cacheBlocks=false 的读出会被计为cache丢失。 hbase.regionserver.blockCacheMissCount:被StoreFiles (HFiles)请求但是未从缓存中读出的块数量。 hbase.regionserver.blockCacheSize:内存中块缓存的容量,特指被blockcache占用的内存容量。 |
hbase中的缓存分了两层:memstore和blockcache。 其中memstore供写使用,这里不在详述。 blockcache主要提供给读使用。读请求先到memstore中查数据,查不到就到blockcache中查,再查不到就会到磁盘上读,并把读的结果放入blockcache。由于blockcache是一个LRU,因此blockcache达到上限(heapsize * hfile.block.cache.size * 0.85)后,会启动淘汰机制,淘汰掉最老的一批数据。 一个regionserver上有一个blockcache和N个memstore,它们的大小之和不能大于等于heapsize * 0.8,否则hbase不能启动。默认blockcache为0.2,而memstore为0.4。对于注重读响应时间的系统,应该将blockcache设大些,比如设置blockcache=0.4,memstore=0.39。这会加大缓存命中率。 总的来说blockcache是为了hbase读数据服务的。数据块缓存默认是打开的。可以在新建表或者更改表时关闭它: |