关于Hbase的cache配置,Hbasecache配置


关于Hbase的cache配置
在hbase中的hfilecache中,0.96版本中新增加了bucket cache,
bucket cache通过把hbase.offheapcache.percentage配置为0来启用,
如果hbase.offheapcache.percentage的配置值大于0时,直接使用堆外内存来管理hbase的cache,
通过把hfile.block.cache.size的值设置为0会禁用HBASE的cache功能。
首先在CacheConfig.instantiateBlockCache函数中。
1.首先检查hbase的hfile cache是否开启,如果设置为0表示禁用cache,同时配置不能大于1.0
float cachePercentage = conf.getFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY,
      HConstants.HFILE_BLOCK_CACHE_SIZE_DEFAULT);
    if (cachePercentage == 0L) {
      blockCacheDisabled = true;
      return null;
    }
    if (cachePercentage > 1.0) {
      throw new IllegalArgumentException(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY +
        " must be between 0.0 and 1.0, and not > 1.0");
    }
2.检查 hbase.offheapcache.percentage是否是小于或等于0的值,如果是表示开启bucket cache
MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
    long lruCacheSize = (long) (mu.getMax() * cachePercentage);
    int blockSize = conf.getInt("hbase.offheapcache.minblocksize", HConstants.DEFAULT_BLOCKSIZE);
    long offHeapCacheSize =
      (long) (conf.getFloat("hbase.offheapcache.percentage", (float) 0) *
          DirectMemoryUtils.getDirectMemorySize());
    if (offHeapCacheSize <= 0) {
      bucket cache......
    }else {
      使用堆外内存进行cache
    }


3.bucket cache的具体配置
a.首先读取hbase.bucketcache.ioengine配置的值,可配置项为
    file:/path/cache.data  基中的/path表示具体的文件路径,也就是SSD这类的高速磁盘
  offheap  使用堆外内存
  heap   不使用堆外内存


b.通过hbase.bucketcache.size配置cache的大小,
这里注意下规则;如果配置的值是0-1之间的小数时,表示hbase堆的百分比
否则表示配置的多少个MB的值,如此处配置为1024那么表示配置有1GB的cache
float bucketCachePercentage = conf.getFloat(BUCKET_CACHE_SIZE_KEY, 0F);
      // A percentage of max heap size or a absolute value with unit megabytes
      long bucketCacheSize = (long) (bucketCachePercentage < 1 ? mu.getMax()
          * bucketCachePercentage : bucketCachePercentage * 1024 * 1024);


c.如果配置的为二级缓存,也就是非内存的缓存时,设置hbase.bucketcache.combinedcache.enabled的值为false

配置高速缓冲存储器(Cache)是为了解决

为了解决内存速度与CPU速度差别太大的问题,L1 Cache一般是全速,L2 Cache一般是半速。
 

微型计算机内,配置高速缓冲存储器,是为了解决什?

打个比方来说,电脑是一座工厂,CPU就是技工,他动作很快很准确,但是就是记性太差,每天做的东西他也记不住,所以他要看着图纸工作。
CPU这个技工每天的工作量很大,他要根据图纸把原材料加工成需要的样子,然后交给其他人去处理。因为工作量太大了,所以图纸很多,材料也很多,一会儿就要换图纸和材料。
但是他如果走很远去库房(硬盘)取材料和图纸,那样就很慢,所以厂长就干脆在厂房里给他安了个大桌子(内存),这样CPU就不用经常去库房拿东西了,加工速度快了很多。
但是还有个问题,就是这个大桌子还是远了点,CPU还是需要走一段路才能看图纸和拿到材料。于是CPU干脆就自己带了一张小桌子(内置缓存),就放在自己旁边,上面就放最近最常用到的图纸和材料,想看图纸?歪个脑袋就行,想换工具?伸个手就行,等桌子上的材料和图纸用不着了,CPU才施施然的走到大桌子上,换图纸换材料,然后又抱着要用的图纸和材料,快乐的回到了自己的岗位。
 

相关内容

    暂无相关文章