关于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

最新文章

  1. 3-4 linux 用户及权限管理
  2. iOS中获取各种文件的目录路径的方法
  3. LUA 函数式编程demo
  4. 【C++】运算符重载
  5. angular service讲解
  6. UltraEdit20 注册
  7. 【LeetCode】231 - Power of Two
  8. 小白日记18:kali渗透测试之缓冲区溢出实例(二)--Linux,穿越火线1.9.0
  9. Http Request Process
  10. java中获取类加载路径和项目根路径的5种方法
  11. PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)】
  12. Linux内存管理 (12)反向映射RMAP
  13. MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)
  14. UVa 11636 - Hello World! 二分,水题 难度: 0
  15. Python 使用for...in...和 while 循环 实现8种格式的 九九乘法表
  16. lor框架代码分析
  17. echarts实现柱状图分页展示
  18. Java虚拟机(一)之开篇
  19. line1: 1: Syntax error: word unexpected (expecting &quot;)&quot;)
  20. java面试95题

热门文章

  1. css Gradients(渐变)
  2. Swift - 计算次方(2的N次方,2的随机次方)
  3. Swift - 分段选择控件(UISegmentedControl)的用法
  4. Qt 4.7.4 完美动态编译发布动态调试,以及静态编译发布
  5. 使用函数指针和多态代替冗长的if-else或者switch-case
  6. JavaScript 中的事件类型4(读书笔记思维导图)
  7. OCP读书笔记(7) - 使用RMAN执行恢复
  8. hdu 1392(凸包)
  9. hdu4223(dp)
  10. Qt笔记——MOC(莫克)