分享

求教,HBase中块缓存的作用?

HBase的内存结构中,有memstore、块缓存和其他的一些数据结构,比如HFile的块索引等。
这地方,我就不太清楚块缓存的作用?有哪位同学能提供比较细致一点的说明吗?

已有(4)人评论

跳转到指定楼层
xuanxufeng 发表于 2015-1-15 17:50:33
  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读数据服务的。数据块缓存默认是打开的。可以在新建表或者更改表时关闭它:

回复

使用道具 举报

langke93 发表于 2015-1-15 17:52:21
楼上说的不错
这是数据块的参数,希望可以帮助楼主加深对数据块的认识

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占用的内存容量。

回复

使用道具 举报

pengsuyun 发表于 2015-1-19 15:41:21
本帖最后由 pengsuyun 于 2015-1-19 15:44 编辑
xuanxufeng 发表于 2015-1-15 17:50
hbase中的缓存分了两层:memstore和blockcache。

    其中memstore供写使用,这里不在详述。

谢谢你了,能说下你这段描述是出自哪里吗?回头我找出来仔细看看。

还有个问题就是,这段文件感觉和《HBase权威指南》的读过程有点冲突,在《HBase权威指南》里面的读过程中只提到了memstore和hfile,这个怎么解释?
hbase权威指南读过程.jpg
回复

使用道具 举报

xuanxufeng 发表于 2015-1-20 15:12:21
pengsuyun 发表于 2015-1-19 15:41
谢谢你了,能说下你这段描述是出自哪里吗?回头我找出来仔细看看。

还有个问题就是,这段文件感觉和《 ...

没看懂楼主贴出来的内容
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条