jas*_*ang 3 performance caching hadoop hbase
我目前正在使用Apache HBase的库存配置,RegionServer堆为4G,BlockCache大小为40%,因此大约为1.6G.没有配置L2/BucketCache.
以下是对RegionServer的~2K请求后的BlockCache指标.正如你所看到的那样,已经有被逐出的区块,可能会导致一些失误.
当我们甚至没有达到极限时,他们为什么被驱逐?
大小2.1 M正在使用的块缓存的当前大小(字节)
Free 1.5 G当前可用于存储更多缓存条目的总可用内存(字节)
计数18块缓存中的块数
被驱逐的14被驱逐的街区总数
驱逐1,645驱逐的总次数
在驱逐时间(秒)平均10,984块的平均年龄
StdDev 5,853,922驱逐时块的年龄标准偏差
命中1,861个缓存命中的数字请求
点击缓存1,854个缓存命中块请求,但只有在未命中时才设置为缓存块的请求
未命中58阻止缓存未命中的请求但设置为缓存丢失的块
未命中缓存58阻止缓存未命中但仅设置为使用块缓存的请求
命中率96.98%命中数除以总请求数
小智 6
您所看到的是LRU处理具有三个优先级的块的影响:单访问,多访问和内存.对于默认的L1 LruBlockCache类,可以使用(括号中的默认值)设置它们的缓存份额:
hbase.lru.blockcache.single.percentage (25%)hbase.lru.blockcache.multi.percentage (50%)hbase.lru.blockcache.memory.percentage (25%)对于4 GB堆示例,以及为缓存预留的40%,您有1.6 GB堆,根据上述百分比,每个优先级进一步分为400 MB,800 MB和400 MB.
当从存储加载块时,它通常被标记为单一访问,除非它所属的列族已被配置为IN_MEMORY = true,将其优先级设置为内存中(显然).对于单访问块,如果另一个读访问请求相同的块,则将其标记为多访问优先级.
该LruBlockCache有一个内部驱逐线程每10秒运行检查,如果每个级别一起块超过其允许的百分比.现在,如果您扫描一个较大的表一次,并假设缓存完全为空,则所有块都标记为单一访问.如果表的大小为1 GB,则已将1 GB加载到400 MB的缓存空间中,然后驱逐线程将在适当的时候减少.实际上,取决于扫描所花费的时间,驱逐线程的10秒在扫描期间会消失,并且一旦超过25%阈值就会开始逐出块.
驱逐将首先从单访问区域,然后是多访问区域驱逐块,最后,如果堆上仍存在压力,则从内存区域驱逐块.这也是为什么您应该确保内存标记列系列的工作集不超过配置的缓存区域的原因.
你能做什么?如果您主要拥有单一访问块,则可以调整上述百分比,以便为LRU的单一访问区域提供更多功能.
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |