BlockCache
首先要明白Block,在HBase里面存储的最小单元;在memstore向硬盘刷的时候,如果目标block的大小+size之后大于MAX_SIZE,将会新创建一个block来存储数据。
Block有四种类型:data,meta,index以及bloom;data就是存储数据的block;index和bloom目的都是了高效获取数据的block以及运用bloom算法获得;meta则是存储HFile的基本信息以及表信息(元数据)
为了高效获取数据,HBase设置了BlockCache机制,内存中缓存block,Block大体来分为两类,一类是JVM的heap内存,一类是heap off内存;第一类的cache策略叫做LRUCache,第二类Cache策略有SlabCache以及BucketCache两类;
LRUCache(LC)就是最近未用策略,这个很好理解;里面被划分为上区域,分别是单次请求( single-access),多次请求(multi-access)以及内存数据(in-memory);占比为25%,50%,25%;一个数据缓存首先是放置到sa域,第二被请求放到ma域;memory域则是存放column family设置为IN-MEMORY的数据;
SlabCache(SC)内部结构是划分为两块,80%和20%;缓存的数据如小于等于blocksize,则放在在前面的区域(80%区域);如果block大于1x但是小于2x将会放置到后面区域(20%区域);如果大于2x则不进行缓存;
BucketCache(BC)和上面主要区别在于提供了三种存储模式,分别是heap(JVM堆内存),offheap(DirectByteBuffer,堆外内存)以及file(存储在SSD或者内存性文件系统),BucketCache和LUR相似的地方在于它也是在整体上把内存三部分(25%,50%,25%);但是BucketCache做的更进一步,将整体的cache区域划分为了14个bucket(每个bucket大小不同);
SC和BC被设计成多级缓存策略;LC为一级缓存,BC/SC为二级缓存;但是LC-BC和LC-SC是不一样的;LC-BC为L1(LC)级缓存负责Index和bloom块,L2(BC)负责data块;LC-SC的策略则是L1和L2彼此独立;
什么时候考虑SL和BL呢?当JVM的Heap内存告急以及JVM因为回收导致响应慢的时候,考虑他们。
那么测试的结论是什么呢?
下面的评测是只有一级缓存的情况下的测试;
LC在hold30G一下JVM没有问题;但是到达50之后延迟就比较严重了;
SC和BC相比较,BC有比较明显的性能优势;而且BC里面的tmpfs模式性能最佳,offheap的方式位于第二;但是offheap的配置非常简单,tmpfs的配置则要复杂得多;权衡一下其实offheap就可以,但是如果内存如果吃紧,那么就采用tmpfs模式;
下面是二级缓存的评测结果:
L1(LC)+L2(BC)的效率是最高的,而且由于LC和BC一级Cache的效果。
 
作者最后总结道:如果数据量能够全部装入到JVM内存中(fit into memory)则OK,采用LRU是最高效;但是如果数据量是大于JVM内存2x,则考虑二级缓存,L1采用LC,L2采用BC。
 
参考:
 
 

HBase的BlockCache的更多相关文章

  1. HBase之BlockCache数据读取(转)

    转自:http://blog.csdn.net/u014297175/article/details/47976909 Hbase上Regionserver的内存分为两个部分,一部分作为Memstor ...

  2. HBase BlockCache

    1. Cache 读写  调用逻辑:  hmaster.handleCreateTable->HRegion.createHRegion-> HRegion. initialize-> ...

  3. HBase设计与开发性能优化(转)

    本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,这里涉及的不多,这部分可以参考:淘宝Ken Wu同学的博客. 1. 表的设计 1.1 Pr ...

  4. HBase性能优化方法总结(转)

    本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,这里涉及的不多,这部分可以参考:淘宝Ken Wu同学的博客. 1. 表的设计 1.1 Pr ...

  5. 第五章:大数据 の HBase 进阶

    本课主题 HBase 读写数据的流程 HBase 性能优化和最住实践 HBase 管理和集群操作 HBase 备份和复制 引言 前一篇 HBase 基础 (HBase 基础) 简单介绍了NoSQL是什 ...

  6. hbase性能优化总结

    hbase性能优化总结 1. 表的设计 1.1 Pre-Creating Regions 默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都 ...

  7. 在Ubuntu18.04下配置HBase

    HBase在HDFS基础上提供了高可靠, 列存储, 可扩展的数据库系统. HBase仅能通过主键(row key)和主键的range来检索数据, 主要用来存储非结构化和半结构化的松散数据. 与Hado ...

  8. hbase的写和读,大合并和小合并

    Hbase写: 客户端向hbase服务器端发送写的请求时,hbase会同时进行两个动作,把记录写在WAL(write ahead log)日志文件中,每台服务器所有表都共享这个WAL文件.然后会写到m ...

  9. hbase 性能调

    一. HBase的通用优化 1 高可用 在 HBase 中 Hmaster 负责监控 RegionServer 的生命周期,均衡 RegionServer 的负载,如果 Hmaster 挂掉了,那么整 ...

随机推荐

  1. 一、Object类

    1.Object类是所有类的父类 声明一个类的时候,实际上已经默认继承了Object类 package property; public class Hero extends Object{ Stri ...

  2. Oracle12c新特性之基本操作

    1.  服务器端连接并启动数据库: sqlplus / as sysdba startup; 2.  服务器端连接并关闭数据库: sqlplus / as sysdba shutdown immedi ...

  3. sql server2008 如何获取上月、上周、昨天、今天、本周、本月的查询周期(通过存储过程)

    我这边有一个需求要统计订单数据,需要统计订单的上传日期,统计的模块大概是 那么上月.上周.昨天.今天.本周.本月应该是怎样呢? 1.数据分析 因为今天是动态数据,我要查月份(上月.本月),应该是一个日 ...

  4. ZOJ 3829 Known Notation 贪心 难度:0

    Known Notation Time Limit: 2 Seconds      Memory Limit: 65536 KB Do you know reverse Polish notation ...

  5. 关于这个 SDK.InvalidRegionId : Can not find endpoint to access

    String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)       TM 调试了半天,一直报错.原来是因为我改了上面的 Dysm ...

  6. pymysql 单独获取表的栏位名称

    有时需要获取表的栏位+数值,请参考 https://www.cnblogs.com/xibuhaohao/p/9996571.html 有时只需要栏位名称,那么可以使用 col=self.cursor ...

  7. Java——文件过滤器

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  8. LINK : fatal error LNK1123

    转: LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 这个是由于日志文件引起的,可以将 项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来 ...

  9. DevExpress v17.2新版亮点——CodeRush篇(三)

    用户界面套包DevExpress v17.2日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了CodeRush v17.2 的新功能,快来下载试用新版本! 代码格式和清理 文档 ...

  10. http指定状态码

    Http状态代码 1.指定状态码: setStatus HttpServletResponse的setStatus方法.如果响应的状态代码比较特殊,并且伴有相关的文档内容,那么一定要在用PrintWr ...