HBase-1.2.4 CombinedBlockCache和InclusiveCombinedBlockCache

一、综述

        在《HBase-1.2.4 Allow block cache to be external分析》一文的最后,讲解了如何实例化外部缓存MemcachedBlockCache。本文将对上文中提到的几种缓存中的InclusiveCombinedBlockCache和CombinedBlockCache做个综述。

        上文中提到的缓存实现,有以下几种:

        1、单独LruBlockCache

        2、启用外部缓存:InclusiveCombinedBlockCache

        3、启用混合缓存CombinedBlockCache

二、CombinedBlockCache

        CombinedBlockCache是一个混合缓存,它是由LruBlockCache和另外一种BlockCache实现的。它的cacheBlock()方法,会根据参数inMemory和cacheDataInL1来确定缓存的地址是LruBlockCache还是另外一种BlockCache,如下:

  @Override
  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory,
      final boolean cacheDataInL1) {
    boolean isMetaBlock = buf.getBlockType().getCategory() != BlockCategory.DATA;
    if (isMetaBlock || cacheDataInL1) {
      lruCache.cacheBlock(cacheKey, buf, inMemory, cacheDataInL1);
    } else {
      l2Cache.cacheBlock(cacheKey, buf, inMemory, false);
    }
  }

       而获取缓存时,则是先从LruBlockCache中获取,获取不到时再从另外一种BlockCache中获取,如下:

  @Override
  public Cacheable getBlock(BlockCacheKey cacheKey, boolean caching,
      boolean repeat, boolean updateCacheMetrics) {
    // TODO: is there a hole here, or just awkwardness since in the lruCache getBlock
    // we end up calling l2Cache.getBlock.
    if (lruCache.containsBlock(cacheKey)) {
      return lruCache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);
    }
    Cacheable result = l2Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);

    return result;
  }

        回收缓存亦是如此,如下:

  @Override
  public boolean evictBlock(BlockCacheKey cacheKey) {
    return lruCache.evictBlock(cacheKey) || l2Cache.evictBlock(cacheKey);
  }

三、InclusiveCombinedBlockCache

        InclusiveCombinedBlockCache是外部缓存的集中体现,它继承自CombinedBlockCache,但是对于缓存及其获取做了特别的声明,如下:

        1、获取缓存时从lruCache中获取,因为启用外部缓存时会同时写入lru和外部缓存,并且,lru有一种机制,即存在victimHandler且!repeat的情况下,会尝试从另外一种缓存中获取;

        2、缓存时则是lruCache和l2Cache同时缓存。

时间: 2024-07-30 05:08:50

HBase-1.2.4 CombinedBlockCache和InclusiveCombinedBlockCache的相关文章

HBase-1.2.4 Allow block cache to be external分析

一.简介         从HBase-1.1.0起,HBase可以使用memcached作为外部BlockCache,这是一个在设备失效或者升级时不会发生完全的冷缓存的很好的特性.用句通俗的话讲,就是HBase出现故障或者升级时,缓存轻易不会丢失. 二.启动         通过配置以下两个参数实现Allow block cache to be external的启动:         配置hbase.blockcache.use.external为true,并且通过配置hbase.cache

HBase BlockCache系列 - 性能对比测试报告

HBase BlockCache系列文章到了终结篇,几个主角的是是非非也该有个了断了,在SlabCache被早早地淘汰之后,站在华山之巅的也就仅剩LRU君(LRUBlockCache)和CBC君(CombinedBlockCache).谁赢谁输,我说了不算,你说了也不算,那就来让数据说话.这篇文章主要对比LRU君和CBC君(offheap模式)分别在四种场景下几种指标(GC.Throughput.Latency.CPU.IO等)的表现情况.四种场景分别是缓存全部命中.少大部分缓存命中.少量缓存命

HBase BlockCache系列 – 走进BlockCache

和其他数据库一样,优化IO也是HBase提升性能的不二法宝,而提供缓存更是优化的重中之重.最理想的情况是,所有数据都能够缓存到内存,这样就不会有任何文件IO请求,读写性能必然会提升到极致.然而现实是残酷的,随着请求数据的不断增多,将数据全部缓存到内存显得不合实际.幸运的是,我们并不需要将所有数据都缓存起来,根据二八法则,80%的业务请求都集中在20%的热点数据上,因此将这部分数据缓存起就可以极大地提升系统性能. HBase在实现中提供了两种缓存结构:MemStore和BlockCache.其中M

hbase+hive应用场景

一.Hive应用场景 本文主要讲述使用 Hive 的实践,业务不是关键,简要介绍业务场景,本次的任务是对搜索日志数据进行统计分析. 集团搜索刚上线不久,日志量并不大 .这些日志分布在 5 台前端机,按小时保存,并以小时为周期定时将上一小时产生的数据同步到日志分析机,统计数据要求按小时更新.这些统计项, 包括关键词搜索量 pv ,类别访问量,每秒访问量 tps 等等. 基于 Hive ,我们将这些数据按天为单位建表,每天一个表,后台脚本根据时间戳将每小时同步过来的 5 台前端机的日志数据合并成一个

利用importtsv导入数据到hbase。假如数据第一列不是唯一怎么办

问题描述 利用importtsv导入数据到hbase.假如数据第一列不是唯一怎么办 利用importtsv导入数据,假如数据文件里第一列不是唯一的,请问怎么导入?可以指定主键吗?比如指定主键是两个字段相加 解决方案 可以使用HBASE_ROWKEY关键字指定主键

zookeeker如何解决HBase单节点故障

HBase架构是一个Master与多个RegionServer,Master负责维护Region等一些工作,但是客户端访问Hbase并不需要通过Master.ZK通过监控选举Master来保证集群始终有一个可用的Master,即访问Master需要通过ZK,当ZK发现Master挂掉之后,会从其他机器中进行选举产出新的Master提供服务. Zookeeper作用 通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册 存贮

关于java开发hbase的框架

问题描述 关于java开发hbase的框架 刚接触hbase,需要java客户端的编程.目前之了解到hbase客户端的API的编写.就是get,put之类的层次.但以往开发关系型数据库的时候都有很多框架.请问,有经验的朋友是如何快速开发基于hbase的程序的?谢谢?比如是用什么可以使用sql语言来查询之类的.谢谢

Ganglia监控Hadoop与HBase集群

以下基于上篇Hadoop2.6与HBase1.0集群架构: http://lizhenliang.blog.51cto.com/7876557/1665130 http://lizhenliang.blog.51cto.com/7876557/1661354  Hadoop集群基本部署完成,接下来就需要有一个监控系统,能及时发现性能瓶颈,给故障排除提供有力依据.监控hadoop集群系统好用的比较少,自身感觉ambari比较好用,但不能监控已有的集群环境,挺悲催的.ganglia在网上看到原生支持

hbase导出表数据到hdfs

问题描述 hbase导出表数据到hdfs 我需要把hbase中的表数据导入到hdfs 使用的命令 hbase org.apache.hadoop.hbase.mapreduce.Driver import user hdfs://master:9000/user 显示一直重新连接.连接九次后停住不到,已经被这个问题弄疯了 能解答吗各位 报错的信息是: 2015-01-22 00:43:32,293 INFO [main] ipc.Client: Retrying connect to serve