From 123d26ed907a9d1532386ce965ff2c388e44fe39 Mon Sep 17 00:00:00 2001 From: Enis Soztutar Date: Tue, 8 Nov 2016 15:43:41 -0800 Subject: [PATCH] HBASE-17017 Remove the current per-region latency histogram metrics --- .../MetricsRegionServerSource.java | 5 +- .../regionserver/MetricsRegionSource.java | 12 ----- .../regionserver/MetricsRegionSourceImpl.java | 52 ++++++------------- .../hadoop/hbase/regionserver/HRegion.java | 7 +-- .../hbase/regionserver/MetricsRegion.java | 8 --- .../hbase/regionserver/RSRpcServices.java | 1 - .../regionserver/TestRegionServerMetrics.java | 12 ++--- 7 files changed, 25 insertions(+), 72 deletions(-) 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 47fbee00488..b8266095885 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 @@ -317,7 +317,7 @@ public interface MetricsRegionServerSource extends BaseSource, JvmPauseMonitorSo String BLOCK_CACHE_GENERAL_BLOOM_META_HIT_COUNT = "blockCacheGeneralBloomMetaHitCount"; String BLOCK_CACHE_DELETE_FAMILY_BLOOM_HIT_COUNT = "blockCacheDeleteFamilyBloomHitCount"; String BLOCK_CACHE_TRAILER_HIT_COUNT = "blockCacheTrailerHitCount"; - + String RS_START_TIME_NAME = "regionServerStartTime"; String ZOOKEEPER_QUORUM_NAME = "zookeeperQuorum"; String SERVER_NAME_NAME = "serverName"; @@ -336,6 +336,7 @@ public interface MetricsRegionServerSource extends BaseSource, JvmPauseMonitorSo String MUTATE_KEY = "mutate"; String APPEND_KEY = "append"; String REPLAY_KEY = "replay"; + String SCAN_KEY = "scan"; String SCAN_SIZE_KEY = "scanSize"; String SCAN_TIME_KEY = "scanTime"; @@ -447,6 +448,6 @@ public interface MetricsRegionServerSource extends BaseSource, JvmPauseMonitorSo 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 = + String AVERAGE_REGION_SIZE_DESC = "Average region size over the region server including memstore and storefile sizes."; } diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java index 12ef07c64ab..decf841b7ea 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java @@ -59,24 +59,12 @@ public interface MetricsRegionSource extends Comparable { */ void updateDelete(); - /** - * Update count and sizes of gets. - * @param getSize size in bytes of the resulting key values for a get - */ - void updateGetSize(long getSize); - /** * Update time of gets * @param mills time for this get operation. */ void updateGet(long mills); - /** - * Update the count and sizes of resultScanner.next() - * @param scanSize Size in bytes of the resulting key values for a next() - */ - void updateScanSize(long scanSize); - /** * Update time used of resultScanner.next(). * */ diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java index 16f36bb9ee7..8f17e93fbef 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java @@ -24,7 +24,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.classification.InterfaceAudience; import org.apache.hadoop.hbase.metrics.Interns; -import org.apache.hadoop.metrics2.MetricHistogram; import org.apache.hadoop.metrics2.MetricsRecordBuilder; import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry; import org.apache.hadoop.metrics2.lib.MutableFastCounter; @@ -48,21 +47,22 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource { private final String regionNamePrefix; private final String regionPutKey; private final String regionDeleteKey; - private final String regionGetSizeKey; private final String regionGetKey; private final String regionIncrementKey; private final String regionAppendKey; - private final String regionScanSizeKey; - private final String regionScanTimeKey; + private final String regionScanKey; + /* + * Implementation note: Do not put histograms per region. With hundreds of regions in a server + * histograms allocate too many counters. See HBASE-17016. + */ private final MutableFastCounter regionPut; private final MutableFastCounter regionDelete; private final MutableFastCounter regionIncrement; private final MutableFastCounter regionAppend; - private final MetricHistogram regionGetSize; - private final MetricHistogram regionGet; - private final MetricHistogram regionScanSize; - private final MetricHistogram regionScanTime; + private final MutableFastCounter regionGet; + private final MutableFastCounter regionScan; + private final int hashCode; public MetricsRegionSourceImpl(MetricsRegionWrapper regionWrapper, @@ -95,17 +95,11 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource { regionAppendKey = regionNamePrefix + MetricsRegionServerSource.APPEND_KEY + suffix; regionAppend = registry.getCounter(regionAppendKey, 0L); - regionGetSizeKey = regionNamePrefix + MetricsRegionServerSource.GET_SIZE_KEY; - regionGetSize = registry.newSizeHistogram(regionGetSizeKey); + regionGetKey = regionNamePrefix + MetricsRegionServerSource.GET_KEY + suffix; + regionGet = registry.getCounter(regionGetKey, 0L); - regionGetKey = regionNamePrefix + MetricsRegionServerSource.GET_KEY; - regionGet = registry.newTimeHistogram(regionGetKey); - - regionScanSizeKey = regionNamePrefix + MetricsRegionServerSource.SCAN_SIZE_KEY; - regionScanSize = registry.newSizeHistogram(regionScanSizeKey); - - regionScanTimeKey = regionNamePrefix + MetricsRegionServerSource.SCAN_TIME_KEY; - regionScanTime = registry.newTimeHistogram(regionScanTimeKey); + regionScanKey = regionNamePrefix + MetricsRegionServerSource.SCAN_KEY + suffix; + regionScan = registry.getCounter(regionScanKey, 0L); hashCode = regionWrapper.getRegionHashCode(); } @@ -134,14 +128,8 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource { registry.removeMetric(regionDeleteKey); registry.removeMetric(regionIncrementKey); registry.removeMetric(regionAppendKey); - registry.removeMetric(regionGetSizeKey); registry.removeMetric(regionGetKey); - registry.removeMetric(regionScanSizeKey); - registry.removeMetric(regionScanTimeKey); - registry.removeHistogramMetrics(regionGetSizeKey); - registry.removeHistogramMetrics(regionGetKey); - registry.removeHistogramMetrics(regionScanSizeKey); - registry.removeHistogramMetrics(regionScanTimeKey); + registry.removeMetric(regionScanKey); regionWrapper = null; } @@ -157,24 +145,14 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource { regionDelete.incr(); } - @Override - public void updateGetSize(long getSize) { - regionGetSize.add(getSize); - } - @Override public void updateGet(long mills) { - regionGet.add(mills); - } - - @Override - public void updateScanSize(long scanSize) { - regionScanSize.add(scanSize); + regionGet.incr(); } @Override public void updateScanTime(long mills) { - regionScanTime.add(mills); + regionScan.incr(); } @Override diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index a93b54f6c11..4674b4d0924 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -258,7 +258,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi */ protected volatile long lastReplayedOpenRegionSeqId = -1L; protected volatile long lastReplayedCompactionSeqId = -1L; - + // collects Map(s) of Store to sequence Id when handleFileNotFound() is involved protected List storeSeqIds = new ArrayList<>(); @@ -7085,11 +7085,6 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi void metricsUpdateForGet(List results, long before) { if (this.metricsRegion != null) { - long totalSize = 0L; - for (Cell cell : results) { - totalSize += CellUtil.estimatedSerializedSizeOf(cell); - } - this.metricsRegion.updateGetSize(totalSize); this.metricsRegion.updateGet(EnvironmentEdgeManager.currentTime() - before); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java index 94be034db17..0364e912e4e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java @@ -49,18 +49,10 @@ public class MetricsRegion { source.updateDelete(); } - public void updateGetSize(final long getSize) { - source.updateGetSize(getSize); - } - public void updateGet(final long t) { source.updateGet(t); } - public void updateScanSize(final long scanSize) { - source.updateScanSize(scanSize); - } - public void updateScanTime(final long t) { source.updateScanTime(t); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java index 26fec146949..57566b683e8 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java @@ -2718,7 +2718,6 @@ public class RSRpcServices implements HBaseRPCErrorHandler, region.updateReadRequestsCount(i); long end = EnvironmentEdgeManager.currentTime(); long responseCellSize = context != null ? context.getResponseCellSize() : 0; - region.getMetrics().updateScanSize(responseCellSize); region.getMetrics().updateScanTime(end - before); if (regionServer.metricsRegionServer != null) { regionServer.metricsRegionServer.updateScanSize(responseCellSize); 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 d068217391f..e2ca677db84 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 @@ -157,7 +157,7 @@ public class TestRegionServerMetrics { "_table_"+tableNameString + "_region_" + i.getEncodedName()+ "_metric"; - metricsHelper.assertCounter(prefix + "_getNumOps", 10, agg); + metricsHelper.assertCounter(prefix + "_getCount", 10, agg); metricsHelper.assertCounter(prefix + "_mutateCount", 31, agg); } } @@ -229,8 +229,8 @@ public class TestRegionServerMetrics { "_table_"+tableNameString + "_region_" + i.getEncodedName()+ "_metric"; - metricsHelper.assertCounter(prefix + "_getSizeNumOps", 10, agg); - metricsHelper.assertCounter(prefix + "_getNumOps", 10, agg); + metricsHelper.assertCounter(prefix + "_getCount", 10, agg); + metricsHelper.assertCounter(prefix + "_getCount", 10, agg); } metricsHelper.assertCounterGt("Get_num_ops", 10, serverSource); } @@ -446,7 +446,7 @@ public class TestRegionServerMetrics { "_table_"+tableNameString + "_region_" + i.getEncodedName()+ "_metric"; - metricsHelper.assertCounter(prefix + "_scanSizeNumOps", NUM_SCAN_NEXT, agg); + metricsHelper.assertCounter(prefix + "_scanCount", NUM_SCAN_NEXT, agg); } metricsHelper.assertCounterGt("ScanSize_num_ops", numScanNext, serverSource); } @@ -496,7 +496,7 @@ public class TestRegionServerMetrics { "_table_"+tableNameString + "_region_" + i.getEncodedName()+ "_metric"; - metricsHelper.assertCounter(prefix + "_scanTimeNumOps", NUM_SCAN_NEXT, agg); + metricsHelper.assertCounter(prefix + "_scanCount", NUM_SCAN_NEXT, agg); } metricsHelper.assertCounterGt("ScanTime_num_ops", numScanNext, serverSource); } @@ -548,7 +548,7 @@ public class TestRegionServerMetrics { "_table_"+tableNameString + "_region_" + i.getEncodedName()+ "_metric"; - metricsHelper.assertCounter(prefix + "_scanSizeNumOps", NUM_SCAN_NEXT, agg); + metricsHelper.assertCounter(prefix + "_scanCount", NUM_SCAN_NEXT, agg); } metricsHelper.assertCounterGt("ScanSize_num_ops", numScanNext, serverSource); }