HBASE-15412 Add average region size metric (Alicia Ying Shu)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b3fe4ed1 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b3fe4ed1 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b3fe4ed1 Branch: refs/heads/hbase-12439 Commit: b3fe4ed16c45e6411f7163099a8bc4c18c39779e Parents: 2348478 Author: Enis Soztutar <e...@apache.org> Authored: Tue Mar 22 14:46:27 2016 -0700 Committer: Enis Soztutar <e...@apache.org> Committed: Tue Mar 22 14:46:27 2016 -0700 ---------------------------------------------------------------------- .../regionserver/MetricsRegionServerSource.java | 3 +++ .../MetricsRegionServerWrapper.java | 5 +++++ .../MetricsRegionServerSourceImpl.java | 2 +- .../MetricsRegionServerWrapperImpl.java | 13 +++++++++++- .../MetricsRegionServerWrapperStub.java | 5 +++++ .../regionserver/TestRegionServerMetrics.java | 21 ++++++++++++++++++++ 6 files changed, 47 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/b3fe4ed1/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java ---------------------------------------------------------------------- diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java index f097296..9693bba 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java @@ -463,4 +463,7 @@ public interface MetricsRegionServerSource extends BaseSource { String RPC_MUTATE_REQUEST_COUNT = "rpcMutateRequestCount"; String RPC_MUTATE_REQUEST_COUNT_DESC = "Number of rpc mutation requests this region server has answered."; + String AVERAGE_REGION_SIZE = "averageRegionSize"; + String AVERAGE_REGION_SIZE_DESC = + "Average region size over the region server including memstore and storefile sizes."; } http://git-wip-us.apache.org/repos/asf/hbase/blob/b3fe4ed1/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java ---------------------------------------------------------------------- diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java index 3ae6f9c..5ecda04 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java @@ -412,4 +412,9 @@ public interface MetricsRegionServerWrapper { * Get the number of rpc mutate requests to this region server. */ long getRpcMutateRequestsCount(); + + /** + * Get the average region size to this region server. + */ + long getAverageRegionSize(); } http://git-wip-us.apache.org/repos/asf/hbase/blob/b3fe4ed1/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java ---------------------------------------------------------------------- diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java index 0c24cb4..c625d49 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java @@ -328,6 +328,7 @@ public class MetricsRegionServerSourceImpl rsWrap.getNumReferenceFiles()) .addGauge(Interns.info(RS_START_TIME_NAME, RS_START_TIME_DESC), rsWrap.getStartCode()) + .addGauge(Interns.info(AVERAGE_REGION_SIZE, AVERAGE_REGION_SIZE_DESC), rsWrap.getAverageRegionSize()) .addCounter(Interns.info(TOTAL_REQUEST_COUNT, TOTAL_REQUEST_COUNT_DESC), rsWrap.getTotalRequestCount()) .addCounter(Interns.info(READ_REQUEST_COUNT, READ_REQUEST_COUNT_DESC), @@ -450,7 +451,6 @@ public class MetricsRegionServerSourceImpl .addCounter(Interns.info(HEDGED_READS, HEDGED_READS_DESC), rsWrap.getHedgedReadOps()) .addCounter(Interns.info(HEDGED_READ_WINS, HEDGED_READ_WINS_DESC), rsWrap.getHedgedReadWins()) - .addCounter(Interns.info(BLOCKED_REQUESTS_COUNT, BLOCKED_REQUESTS_COUNT_DESC), rsWrap.getBlockedRequestsCount()) http://git-wip-us.apache.org/repos/asf/hbase/blob/b3fe4ed1/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java index 441fea6..6e6d07d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java @@ -104,6 +104,7 @@ class MetricsRegionServerWrapperImpl private volatile long mobFileCacheEvictedCount = 0; private volatile long mobFileCacheCount = 0; private volatile long blockedRequestsCount = 0L; + private volatile long averageRegionSize = 0L; private CacheStats cacheStats; private ScheduledExecutorService executor; @@ -668,7 +669,7 @@ class MetricsRegionServerWrapperImpl long tempMobScanCellsCount = 0; long tempMobScanCellsSize = 0; long tempBlockedRequestsCount = 0; - + int regionCount = 0; for (Region r : regionServer.getOnlineRegionsLocalContext()) { tempNumMutationsWithoutWAL += r.getNumMutationsWithoutWAL(); tempDataInMemoryWithoutWAL += r.getDataInMemoryWithoutWAL(); @@ -726,6 +727,7 @@ class MetricsRegionServerWrapperImpl if (r.getRegionInfo().getReplicaId() != HRegionInfo.DEFAULT_REPLICA_ID) { hdfsBlocksDistributionSecondaryRegions.add(distro); } + regionCount++; } float localityIndex = hdfsBlocksDistribution.getBlockLocalityIndex( regionServer.getServerName().getHostname()); @@ -765,6 +767,9 @@ class MetricsRegionServerWrapperImpl memstoreSize = tempMemstoreSize; storeFileSize = tempStoreFileSize; maxStoreFileAge = tempMaxStoreFileAge; + if (regionCount > 0) { + averageRegionSize = (memstoreSize + storeFileSize) / regionCount; + } if (tempMinStoreFileAge != Long.MAX_VALUE) { minStoreFileAge = tempMinStoreFileAge; } @@ -828,4 +833,10 @@ class MetricsRegionServerWrapperImpl public long getBlockedRequestsCount() { return blockedRequestsCount; } + + @Override + public long getAverageRegionSize() { + return averageRegionSize; + } + } http://git-wip-us.apache.org/repos/asf/hbase/blob/b3fe4ed1/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java index 65c6b76..9aa49ba 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java @@ -404,4 +404,9 @@ public class MetricsRegionServerWrapperStub implements MetricsRegionServerWrappe public double getMobFileCacheHitPercent() { return 50; } + + @Override + public long getAverageRegionSize() { + return 10000000; + } } http://git-wip-us.apache.org/repos/asf/hbase/blob/b3fe4ed1/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java index b9e54f0..2087097 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java @@ -676,4 +676,25 @@ public class TestRegionServerMetrics { table.close(); } + + @Test + public void testAverageRegionSize() throws Exception { + TableName tableName = TableName.valueOf("testAverageRegionSize"); + byte[] cf = Bytes.toBytes("d"); + byte[] row = Bytes.toBytes("rk"); + byte[] qualifier = Bytes.toBytes("qual"); + byte[] val = Bytes.toBytes("Value"); + + //Force a hfile. + Table t = TEST_UTIL.createTable(tableName, cf); + Put p = new Put(row); + p.addColumn(cf, qualifier, val); + t.put(p); + TEST_UTIL.getHBaseAdmin().flush(tableName); + + metricsRegionServer.getRegionServerWrapper().forceRecompute(); + assertTrue(metricsHelper.getGaugeDouble("averageRegionSize", serverSource) > 0.0); + + t.close(); + } }