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. ubuntu下没有Language Support

    sudo apt-get installlanguage-selector-gnome

  2. 【转】C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码

    本文介绍在 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码.网上文章大多只是简单介绍内置参数的设置,根据我的使用目的,增加了自定义目标二维码图片尺寸和白边 ...

  3. HeaderExchangeClient

    HeaderExchangeClient 注释是DefaultMessageClient,类中定义了心跳定时器HeaderExchangeChannel 发送请求HeaderExchangeHandl ...

  4. conv1d UpSampling1D aotoencoder 自编码代码摘录

    https://www.quora.com/How-do-I-implement-a-1D-Convolutional-autoencoder-in-Keras-for-numerical-datas ...

  5. spring cloud学习(三)使用Ribbon实现客户端负载均衡

    使用Ribbon实现客户端的负载均衡 * 个人博客空间 : https://zggdczfr.cn/ * Ribbon Spring Cloud Netflix Ribbon 是一个客户端负载均衡的组 ...

  6. visual Studio里面的代码前面多出好多小点应该怎么设置

    如果是vs中前面绿色的点的话你试试 ctrl + R 然后 ctrl + W 试试看能不能去掉

  7. 51nod1288汽油补给

    考虑当前这个汽油站加的情况. 如果在t以内的范围有一个加油站比当前加油站便宜,那么就只需要加油加到足够开到最近的比自己便宜的加油站. 否则加满. 但是寻找超时 我们可以先加满,找到一个便宜的加油站之后 ...

  8. 一个Flex 对话框的坑

    最近在项目中遇到一个问题,在Flex中使用Alert.show("this is content!", "title");发现对话框可以弹出来,但是文本始终不显 ...

  9. Java——IO类,转换流简化写法

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

  10. 微软IE团队发布《逃离XP》浏览器小游戏

    微软IE团队今天发布了一个有趣的小游戏<逃离Windows XP>,这款游戏可以工作在所有现代浏览器下,简单的街机风格可以让你尽情对XP施展破坏欲.微软发布XP及提供支持服务已经史无前例地 ...