文档章节

HBase Block Cache的重要实现细节和In-Memory Cache的特点

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 649
阅读 15
收藏 0
注:本文基于HBase 0.94.1的源码进行分析。本文原文连接: http://blog.csdn.net/bluishglc/article/details/21516067,转载请著明出处!

每load一个block到cache时,都会检查当前cache的size是否已经超过了“警戒线”,这个“警戒线”是一个规定的当前block cache总体积占额定体积的安全比例,默认该值是0.85,即当加载了一个block到cache后总大小超过了既定的85%就开始触发异步的evict操作了。

evict的逻辑是这样的:遍历cache中的所有block,根据它们所属的级别(single,multi,in-memory)分拨到三个优先级队列中,队头元素是最旧(最近访问日间值最小)的那个block。对这个三队列依次驱逐对头元素,释放空间。

所以说:in-memory的block与其他类型的block并无本质上的不同,它不会长久驻留cache而不被逐出cache, 当不断有新的in-memory的block被访问,而现有in-memory cache已达到上限时,旧的in-memory block就会被替换出去,除非,所有in-memory的block的总体积小于in-memory cache。

但是in-memory的block确实不同于其他两种block的地方在于它的这个“in-memory”特征是静态指定的(在column family上设置),不会像其他两种cache会因访问频率而发生改变,这就决定了它的独立性,另外两种block访问次数再多也不会被放到in-memory的区段里去,in-memory的block不管是第几次访问,总是被放置到in-memory的区段中。

从in-memory cache的这些特性上来看,需要特别强调的是:

1. 标记IN_MEMORY=>'true'的column family的总体积最好不要超过in-memory cache的大小(in-memory cache = heap size * hfile.block.cache.size * 0.85 * 0.25),特别是当总体积远远大于了in-memory cache时,会在in-memory cache上发生严重的颠簸。

2. 换个角度再看,普遍提到的使用in-memory cache的场景是把元数据表的column family声明为IN_MEMORY=>'true。实际上这里的潜台词是:元数据表都很小。其时我们也可以大胆地把一些需要经常访问的,总体积不会超过in-memory cache的column family都设为IN_MEMORY=>'true'从而更加充分地利用cache空间。就像前面提到的,普通的block永远是不会被放入in-memory cache的,只存放少量metadata是对in-memory cache资源的浪费(未来的版本应该提供三种区段的比例配置功能)。

本文转载自:http://blog.csdn.net/bluishglc/article/details/21516067

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
看我72变,阿里HBase数据压缩编码探索

福利: 国际顶级盛会HBaseCon Asia 2018将于8月在北京举行,目前正免费开放申请中,更多详情参考https://yq.aliyun.com/promotion/631 如果你对大数据存储、分布式数据库、HBase等感兴趣,欢...

轶俗xf
07/25
0
0
Hive查询HBase调用MapReduce性能优化

折腾了很久,被领导天天督促&指点,算是有个最基本的性能优化。 1. 背景介绍: Hive使用hive-hbase-handler建立HBase external table。在hive查询包含count(*)、join、以及Predicate Pushdow...

orisonchan
08/09
0
0
期待已久的Apache HBase2.0正式发布

激动 期待已久的HBase 2.0发布啦! 膜拜 拜读stack大神announce email原文,激动人心的时刻: 邮件简述了HBase 2.0.0 有新版Assignment Manager V2,offhead read/write, in-memory compactio...

tins.wzy
05/02
0
0
HBase运维基础――元数据逆向修复原理

  【IT168 评论】   背景   鉴于上次一篇文章――“云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据”的读者反馈,对HBase的逆向工程比较感兴趣,并咨询如何使用相应工具进行运...

云栖社区
05/02
0
0
Facebook的时序数据库技术(上)

本文介绍Facebook内部监控系统所用到的时序数据库技术,为了避免文章过长,将拆成两篇文章来介绍,此为上篇。 声明:此文核心内容源自Facebook在2015年发表的论文《Gorilla: A Fast, Scalab...

HBase技术社区
08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

谷歌 Fuchsia 上手体验,将取代Android/win10

在手机市场领域,Google表现很抢眼,毫无疑问,Android 至今在移动操作系统的市场份额占据绝对领先地位,但是 Android 仍然存在不少问题,碎片化问题严重,在平板以及大屏幕设备上表现糟糕,...

linux-tao
15分钟前
1
0
List、Array与ArrayList

数组在内存中是连续存储的,所以它的索引速度很快,而且赋值和修改元素也非常快,比如: string[] s=new string[3];//赋值 s[0]="a"; s[1]="b"; s[2]="c";//修改 s[1]="b1"; 但是数组...

shimmerkaiye
18分钟前
0
0
Linux 的Lnmp环境下为mysql添加环境变量

一.问题 在Linux 安装完Lnmp 环境后 , 连接Mysql 告诉没有这条命令 mysql -uroot -p 命令失效 因为是源码安装的,所以会出现这样的的原因 。集成环境是不会出现的。 其实很简单,只需要给m...

15834278076
20分钟前
2
0
apolloxlua include函数

include函数不是单独使用的函数, 他并不是标准库的一部分, 你可以使用include函数将某个后缀为 .aop的文档包含到你的文档流中。 因为include是单独处理流, 所以不会在主处理流程中有所表示...

钟元OSS
24分钟前
0
0
【转载分享】做一名较真的工程师

近些年与我共事过的同事,一定知道我至今仍有一个较真的性格。我会:指出同事所写代码的不当命名问题(并帮助改进);指出同事所写文档中的逻辑混乱问题(并辅以修订);指出同事所写PPT中乱...

HellerZhang
25分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部