Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/MetricsMaster.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/MetricsMaster.java (revision 1513325) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/MetricsMaster.java (working copy) @@ -57,6 +57,14 @@ masterSource.updateSplitTime(time); masterSource.updateSplitSize(size); } + + /* + * Record one balancer run + * @param time time that the balance() took + */ + public void addBalance(long time) { + masterSource.updateBalance(time); + } /** * Record a single instance of a split Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (revision 1513325) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (working copy) @@ -1488,6 +1488,7 @@ // Do this call outside of synchronized block. int maximumBalanceTime = getBalancerCutoffTime(); boolean balancerRan; + long start; synchronized (this.balancer) { // Only allow one balance run at at time. if (this.assignmentManager.getRegionStates().isRegionsInTransition()) { @@ -1516,6 +1517,7 @@ } } + start = System.currentTimeMillis(); Map>> assignmentsByTable = this.assignmentManager.getRegionStates().getAssignmentsByTable(); @@ -1557,6 +1559,7 @@ } } } + metricsMaster.addBalance(System.currentTimeMillis() - start); return balancerRan; } Index: hbase-hadoop1-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java =================================================================== --- hbase-hadoop1-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java (revision 1513325) +++ hbase-hadoop1-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java (working copy) @@ -45,6 +45,7 @@ private MetricMutableGaugeLong ritOldestAgeGauge; private MetricMutableHistogram splitTimeHisto; private MetricMutableHistogram splitSizeHisto; + private MetricMutableHistogram balanceHisto; private MetricMutableStat snapshotTimeHisto; private MetricMutableStat snapshotCloneTimeHisto; private MetricMutableStat snapshotRestoreTimeHisto; @@ -73,6 +74,7 @@ ritOldestAgeGauge = metricsRegistry.newGauge(RIT_OLDEST_AGE_NAME, "", 0l); splitSizeHisto = metricsRegistry.newHistogram(SPLIT_SIZE_NAME, SPLIT_SIZE_DESC); splitTimeHisto = metricsRegistry.newHistogram(SPLIT_TIME_NAME, SPLIT_TIME_DESC); + balanceHisto = metricsRegistry.newHistogram(BALANCE_NAME, BALANCE_DESC); snapshotTimeHisto = metricsRegistry.newStat( SNAPSHOT_TIME_NAME, SNAPSHOT_TIME_DESC, "Ops", "Time", true); snapshotCloneTimeHisto = metricsRegistry.newStat( @@ -105,6 +107,11 @@ } @Override + public void updateBalance(long size) { + balanceHisto.add(size); + } + + @Override public void updateSplitSize(long size) { splitSizeHisto.add(size); } Index: hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java =================================================================== --- hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java (revision 1513325) +++ hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java (working copy) @@ -42,6 +42,7 @@ private MutableGaugeLong ritOldestAgeGauge; private MutableHistogram splitTimeHisto; private MutableHistogram splitSizeHisto; + private MutableHistogram balanceHisto; private MutableStat snapshotTimeHisto; private MutableStat snapshotCloneTimeHisto; private MutableStat snapshotRestoreTimeHisto; @@ -74,6 +75,7 @@ ritCountOverThresholdGauge = metricsRegistry.newGauge(RIT_COUNT_OVER_THRESHOLD_NAME, "", 0l); ritOldestAgeGauge = metricsRegistry.newGauge(RIT_OLDEST_AGE_NAME, "", 0l); splitSizeHisto = metricsRegistry.newHistogram(SPLIT_SIZE_NAME, SPLIT_SIZE_DESC); + balanceHisto = metricsRegistry.newHistogram(BALANCE_NAME, BALANCE_DESC); splitTimeHisto = metricsRegistry.newHistogram(SPLIT_TIME_NAME, SPLIT_TIME_DESC); snapshotTimeHisto = metricsRegistry.newStat( SNAPSHOT_TIME_NAME, SNAPSHOT_TIME_DESC, "Ops", "Time", true); @@ -107,6 +109,11 @@ } @Override + public void updateBalance(long size) { + balanceHisto.add(size); + } + + @Override public void updateSplitSize(long size) { splitSizeHisto.add(size); } Index: hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSource.java =================================================================== --- hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSource.java (revision 1513325) +++ hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSource.java (working copy) @@ -66,6 +66,7 @@ String RIT_COUNT_NAME = "ritCount"; String RIT_COUNT_OVER_THRESHOLD_NAME = "ritCountOverThreshold"; String RIT_OLDEST_AGE_NAME = "ritOldestAge"; + String BALANCE_NAME = "balance"; String MASTER_ACTIVE_TIME_DESC = "Master Active Time"; String MASTER_START_TIME_DESC = "Master Start Time"; String AVERAGE_LOAD_DESC = "AverageLoad"; @@ -82,6 +83,7 @@ String SNAPSHOT_CLONE_TIME_DESC = "Time it takes to finish cloneSnapshot()"; String META_SPLIT_TIME_DESC = "Time it takes to finish splitMetaLog()"; String META_SPLIT_SIZE_DESC = "Size of META HLog files being split"; + String BALANCE_DESC = "Time it takes the master to balance the cluster"; /** * Increment the number of requests the cluster has seen. @@ -114,6 +116,8 @@ void updateSplitTime(long time); void updateSplitSize(long size); + + void updateBalance(long size); void updateSnapshotTime(long time);