You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ns...@apache.org on 2011/10/11 19:44:29 UTC
svn commit: r1181962 - in
/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase:
io/hfile/LruBlockCache.java regionserver/StoreFile.java
Author: nspiegelberg
Date: Tue Oct 11 17:44:28 2011
New Revision: 1181962
URL: http://svn.apache.org/viewvc?rev=1181962&view=rev
Log:
Making block cache bucket sizes configurable in hbase-89
Summary: Porting part of D191289 from hbase-90 to hbase-89 to make block
cache's per-priority bucket sizes (single-accessed blocks, multiply-accessed
blocks, and in-memory blocks) configurable. Also replacing exact floating point
comparison with an approximate one when checking that bucket sizes sum up to
one.
Test Plan: Unit tests, dark launch
Reviewers: kannan, jgray, kranganathan
Reviewed By: kannan
CC: , hbase@lists, kannan
Differential Revision: 315950
Revert Plan: OK
Modified:
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
Modified: hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java?rev=1181962&r1=1181961&r2=1181962&view=diff
==============================================================================
--- hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java (original)
+++ hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java Tue Oct 11 17:44:28 2011
@@ -30,6 +30,7 @@ import java.util.concurrent.TimeUnit;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.io.hfile.HFileBlockInfo;
import org.apache.hadoop.hbase.io.HeapSize;
import org.apache.hadoop.hbase.regionserver.HRegion;
@@ -174,6 +175,32 @@ public class LruBlockCache implements Bl
}
/**
+ * Constructor that takes parameters from configuration.
+ * @param maxSize
+ * @param blockSize
+ * @param conf
+ */
+ public LruBlockCache(long maxSize, long blockSize, Configuration conf) {
+ this(maxSize, blockSize,
+ conf.getBoolean("hbase.rs.blockcache.lru.evictionthread", true),
+ (int)Math.ceil(1.2*maxSize/blockSize),
+ conf.getFloat("hbase.rs.blockcache.lru.map.factor",
+ DEFAULT_LOAD_FACTOR),
+ conf.getInt("hbase.rs.blockcache.lru.map.concurrency",
+ DEFAULT_CONCURRENCY_LEVEL),
+ conf.getFloat("hbase.rs.blockcache.lru.watermark.low",
+ DEFAULT_MIN_FACTOR),
+ conf.getFloat("hbase.rs.blockcache.lru.watermark.high",
+ DEFAULT_ACCEPTABLE_FACTOR),
+ conf.getFloat("hbase.rs.blockcache.lru.bucket.single",
+ DEFAULT_SINGLE_FACTOR),
+ conf.getFloat("hbase.rs.blockcache.lru.bucket.multi",
+ DEFAULT_MULTI_FACTOR),
+ conf.getFloat("hbase.rs.blockcache.lru.bucket.inmemory",
+ DEFAULT_MEMORY_FACTOR));
+ }
+
+ /**
* Configurable constructor. Use this constructor if not using defaults.
* @param maxSize maximum size of this cache, in bytes
* @param blockSize expected average size of blocks, in bytes
@@ -191,9 +218,10 @@ public class LruBlockCache implements Bl
int mapInitialSize, float mapLoadFactor, int mapConcurrencyLevel,
float minFactor, float acceptableFactor,
float singleFactor, float multiFactor, float memoryFactor) {
- if(singleFactor + multiFactor + memoryFactor != 1) {
- throw new IllegalArgumentException("Single, multi, and memory factors " +
- " should total 1.0");
+ if (Math.abs(singleFactor + multiFactor + memoryFactor - 1.0) > 1e-8) {
+ throw new IllegalArgumentException("Single, multi, and memory factors "
+ + " should total 1.0: singleFactor=" + singleFactor
+ + ", multiFactor=" + multiFactor + ", memoryFactor=" + memoryFactor);
}
if(minFactor >= acceptableFactor) {
throw new IllegalArgumentException("minFactor must be smaller than acceptableFactor");
Modified: hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java?rev=1181962&r1=1181961&r2=1181962&view=diff
==============================================================================
--- hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java (original)
+++ hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java Tue Oct 11 17:44:28 2011
@@ -382,7 +382,8 @@ public class StoreFile {
long cacheSize = (long)(mu.getMax() * cachePercentage);
LOG.info("Allocating LruBlockCache with maximum size " +
StringUtils.humanReadableInt(cacheSize));
- hfileBlockCache = new LruBlockCache(cacheSize, DEFAULT_BLOCKSIZE_SMALL);
+ hfileBlockCache = new LruBlockCache(cacheSize, DEFAULT_BLOCKSIZE_SMALL,
+ conf);
return hfileBlockCache;
}