hbase缓存机制

2018-01-24 10:30:03来源:网络收集作者:管理员人点击

分享

[var1]

regionserver的缓存包含了memestore和blockcache两种,其中memstore用于写缓存(读缓存也包括),blockcache用于读缓存。regionserver给每一个region都分配一个memstore,数据写入的过程中先写入到memstore,当memstore达到设定的阈值后(由hbase.hregion.memstore.flush.size参数控制),会触发flush操作将数据溢写到磁盘,或者达到heapsize
*hbase.regionserver.global.memstore.upperLimit * 0.9时,会强行启动flush进程,从最大的memstore开始flush直到低于限制。


而每个regionserver只有一个blockcache,读取数据时,首先到memestore上读数据,找不到再到blockcahce上找数据,再查不到则到磁盘查找,并把读入的数据同时放入blockcache。


blockcache使用的是LRU策略(最近最少使用策略,我觉得应该是LRU-2),当blockcache达到上限时,会触发缓存淘汰机制,将最近很少使用的比较老的数据淘汰掉。当blockcache达到heapsize * hfile.block.cache.size
* 0.85时,会启用淘汰机制。


blockcache实现基于On-heap ConcurrentHashMap。map的key是BlockCacheKey类型的对象,包括了ooffset、hfileName等成员变量,map的value是LruCachedBlock类型的对象,表示缓存的实体,该对象中定义了成员变量的accesstime,用于LRU淘汰时的依据。


在注重读响应时间的应用场景下,可以将 BlockCache设置大些,Memstore设置小些,以加大缓存的命中率。


blockcache基于客户端对数据的访问频率,定义了三个不同的优先级,如下:


Single:如果一个block被第一次访问,则该block放在这一优先级队列;


Multi:如果一个block经常被访问,则从Single移到Multi;


inMemrory :用户自己定义,可以将重要的数据放在其中,如Meta或者namespace的元数据信息


通过区分Single和Multi类型Cache,可以防止由于Scan操作带来的Cache频繁颠簸,将最少使用的
Block加入到淘汰算法中,默认配置下,对于整个BlockCache的内存,按照以下百分比分配给Single、Multi、InMemory使用:0.25、0.50和0.25


相关文章

    无相关信息

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台