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. BLE低功耗蓝牙关键技术解析与应用

    BLE基础知识 1.传统蓝牙的传输距离几十米到几百米不等,BLE 则规定为 100 米(实际上没有那么远,50米以内比较稳定,和设备发射功率有关) 2.为了实现极低的功耗,BLE 协议设计为:在不必要 ...

  2. <NET CLR via c# 第4版>笔记 第13章 接口

    13.1 类和接口继承 13.2 定义接口 C#用 interface 关键字定义接口.接口中可定义方法,事件,无参属性和有参属性(C#的索引器),但不能定义任何构造器方法,也不能定义任何实例字段. ...

  3. workflow

    一:项目进程 1研发部设计demo (选择方案--方案确认--设计电路图layout--固件开发--软件开发-打样板--调试demo--可靠性分析--稳定性检测) 2进入ES阶段(engineer s ...

  4. JDBC事务控制管理(转载)

    JDBC事务控制管理 转载于 2018年01月26日 15:46:11 1.事务 (1)事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐, ...

  5. sprintf 函数

    //$tick 保留{$decimalplaces}位小数,不够位数的小数点后面用0 填充$tick = sprintf( "%.0${decimalplaces}lf ", $i ...

  6. 多重条件判断SQL:用于用户名称,密码,权限的检测和判断

    string sqlstr = "select count(*) from tb_admin where 用户名='"+UserName+"'and 密码='" ...

  7. Python学习(001)--计算机基础

    操作系统发展历史 操作系统并不是与计算机硬件一起诞生的,它是在人们使用计算机的过程中,为了满足两大需求:提高资源利用率.增强计算机系统性能,伴随着计算机技术本身及其应用的日益发展,而逐步地形成和完善起 ...

  8. magento如何改变首页的布局

    打开MAGENTO_INSTALLED_DIR/app/design/frontend/default/default/layout/page.xml 找到名字为'root'的block定义 < ...

  9. vector类转换Mat类

    前言 一个个数据push back到vector之后,可以使用Mat()函数将vector类型转换为Mat类型. 在opencv中Mat类的构造函数中有一个构造函数可以直接把vector类转换为Mat ...

  10. QT-This application failed to start because it could not find or load the Qt platform plugin "windows"

    前言 将qt的vs工程生成Release版本,不过出现错误,现将可以解决该问题的方法记录下来. 项目环境 系统:win7_64 软件:VS2013.QT5.6.2.qt-vs-addin-1.2.5 ...