我是靠谱客的博主 标致音响,最近开发中收集的这篇文章主要介绍hbase中缓存的优先级,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 今天同事问到hbase中in-memory属性的作用,以前没有注意过,今天仔细看了下代码: 

Java代码   收藏代码
  1. // Instantiate priority buckets  
  2. BlockBucket bucketSingle = new BlockBucket(bytesToFree, blockSize,  
  3.     singleSize());  
  4. BlockBucket bucketMulti = new BlockBucket(bytesToFree, blockSize,  
  5.     multiSize());  
  6. BlockBucket bucketMemory = new BlockBucket(bytesToFree, blockSize,  
  7.     memorySize());  
  8.   
  9. // Scan entire map putting into appropriate buckets  
  10. for(CachedBlock cachedBlock : map.values()) {  
  11.   switch(cachedBlock.getPriority()) {  
  12.     case SINGLE: {  
  13.       bucketSingle.add(cachedBlock);  
  14.       break;  
  15.     }  
  16.     case MULTI: {  
  17.       bucketMulti.add(cachedBlock);  
  18.       break;  
  19.     }  
  20.     case MEMORY: {  
  21.       bucketMemory.add(cachedBlock);  
  22.       break;  
  23.     }  
  24.   }  
  25. }  
  26.   
  27. PriorityQueue<BlockBucket> bucketQueue =  
  28.   new PriorityQueue<BlockBucket>(3);  
  29.   
  30. bucketQueue.add(bucketSingle);  
  31. bucketQueue.add(bucketMulti);  
  32. bucketQueue.add(bucketMemory);  
  33.   
  34. int remainingBuckets = 3;  
  35. long bytesFreed = 0;  
  36.   
  37. BlockBucket bucket;  
  38. while((bucket = bucketQueue.poll()) != null) {  
  39.   long overflow = bucket.overflow();  
  40.   if(overflow > 0) {  
  41.     long bucketBytesToFree = Math.min(overflow,  
  42.       (bytesToFree - bytesFreed) / remainingBuckets);  
  43.     bytesFreed += bucket.free(bucketBytesToFree);  
  44.   }  
  45.   remainingBuckets--;  
  46. }  

    hbase内部的blockcache分三个队列:single、multi以及memory,分别占用25%,50%,25%的大小。这涉及到family属性中的in-memory选项,默认是false。 
    设为false的话,第一次访问到该数据时,会将它写入single队列,否则写入memory队列。当再次访问该数据并且在single中读到了该数据时,single会升级为multi 
    这三个队列其实是在共用blockcache的资源,区别是在LRU淘汰数据时,single会优先淘汰,其次为multi,最后为memory。 

    所以结论有两点: 
    1 同一个family不会占用全部的blockcache资源 
    2 当某些family特别重要时,可以将它的in-memory设为true,单独使用一个缓存队列,保证cache的优先使用

最后

以上就是标致音响为你收集整理的hbase中缓存的优先级的全部内容,希望文章能够帮你解决hbase中缓存的优先级所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部