• HBase中缓存的优先级


    ava代码  收藏代码
    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的优先使用
  • 相关阅读:
    初级Linux学习指南
    2016/09/29 SQL中的join
    2016/09/27 Hadoop Yarn
    2016/06/27 HDFS概述
    2016/09/26 电能和电功率
    【转】2016/09/22 MapReduce初级案例
    2016/09/22 mapreduce
    2016/09/21 java关键字static
    2016/09/21 Java关键字final
    2016/09/21 java split用法
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205185.html
Copyright © 2020-2023  润新知