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 702acae..a52090d 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
@@ -180,6 +180,9 @@ public interface MetricsRegionServerSource extends BaseSource {
String PERCENT_FILES_LOCAL = "percentFilesLocal";
String PERCENT_FILES_LOCAL_DESC =
"The percent of HFiles that are stored on the local hdfs data node.";
+ String PERCENT_FILES_LOCAL_SECONDARY_REGIONS = "percentFilesLocalSecondaryRegions";
+ String PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC =
+ "The percent of HFiles used by secondary regions that are stored on the local hdfs data node.";
String SPLIT_QUEUE_LENGTH = "splitQueueLength";
String SPLIT_QUEUE_LENGTH_DESC = "Length of the queue for splits.";
String COMPACTION_QUEUE_LENGTH = "compactionQueueLength";
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 dbf93d0..1cc7751 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
@@ -154,6 +154,11 @@ public interface MetricsRegionServerWrapper {
int getPercentFileLocal();
/**
+ * Get the percent of HFiles' that are local for secondary region replicas.
+ */
+ int getPercentFileLocalSecondaryRegions();
+
+ /**
* Get the size of the split queue
*/
int getSplitQueueSize();
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 0eef82d..af12dac 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
@@ -212,6 +212,9 @@ public class MetricsRegionServerSourceImpl
rsWrap.getDataInMemoryWithoutWAL())
.addGauge(Interns.info(PERCENT_FILES_LOCAL, PERCENT_FILES_LOCAL_DESC),
rsWrap.getPercentFileLocal())
+ .addGauge(Interns.info(PERCENT_FILES_LOCAL_SECONDARY_REGIONS,
+ PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC),
+ rsWrap.getPercentFileLocalSecondaryRegions())
.addGauge(Interns.info(SPLIT_QUEUE_LENGTH, SPLIT_QUEUE_LENGTH_DESC),
rsWrap.getSplitQueueSize())
.addGauge(Interns.info(COMPACTION_QUEUE_LENGTH, COMPACTION_QUEUE_LENGTH_DESC),
diff --git a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.jamon b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.jamon
index e4e7e89..a86a4ea 100644
--- a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.jamon
+++ b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.jamon
@@ -76,12 +76,14 @@ java.lang.management.ManagementFactory;
Requests Per Second |
Num. Regions |
Block locality |
+ Block locality (Secondary replicas) |
Slow WAL Append Count |
| <% String.format("%.0f", mWrap.getRequestsPerSecond()) %> |
<% mWrap.getNumOnlineRegions() %> |
<% mWrap.getPercentFileLocal() %> |
+ <% mWrap.getPercentFileLocalSecondaryRegions() %> |
<% 0 %> |
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 4aa6789..4432ff5 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
@@ -28,6 +28,7 @@ import org.apache.hadoop.hbase.classification.InterfaceAudience;
import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HDFSBlocksDistribution;
+import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.io.hfile.BlockCache;
import org.apache.hadoop.hbase.io.hfile.CacheConfig;
@@ -67,6 +68,7 @@ class MetricsRegionServerWrapperImpl
private volatile long numMutationsWithoutWAL = 0;
private volatile long dataInMemoryWithoutWAL = 0;
private volatile int percentFileLocal = 0;
+ private volatile int percentFileLocalSecondaryRegions = 0;
private volatile long flushedCellsCount = 0;
private volatile long compactedCellsCount = 0;
private volatile long majorCompactedCellsCount = 0;
@@ -362,6 +364,11 @@ class MetricsRegionServerWrapperImpl
}
@Override
+ public int getPercentFileLocalSecondaryRegions() {
+ return percentFileLocalSecondaryRegions;
+ }
+
+ @Override
public long getUpdatesBlockedTime() {
if (this.regionServer.cacheFlusher == null) {
return 0;
@@ -416,6 +423,8 @@ class MetricsRegionServerWrapperImpl
HDFSBlocksDistribution hdfsBlocksDistribution =
new HDFSBlocksDistribution();
+ HDFSBlocksDistribution hdfsBlocksDistributionSecondaryRegions =
+ new HDFSBlocksDistribution();
long tempNumStores = 0;
long tempNumStoreFiles = 0;
@@ -431,6 +440,7 @@ class MetricsRegionServerWrapperImpl
long tempNumMutationsWithoutWAL = 0;
long tempDataInMemoryWithoutWAL = 0;
int tempPercentFileLocal = 0;
+ int tempPercentFileLocalSecondaryRegions = 0;
long tempFlushedCellsCount = 0;
long tempCompactedCellsCount = 0;
long tempMajorCompactedCellsCount = 0;
@@ -463,13 +473,20 @@ class MetricsRegionServerWrapperImpl
tempMajorCompactedCellsSize += store.getMajorCompactedCellsSize();
}
- hdfsBlocksDistribution.add(r.getHDFSBlocksDistribution());
+ HDFSBlocksDistribution distro = r.getHDFSBlocksDistribution();
+ hdfsBlocksDistribution.add(distro);
+ if (r.getRegionInfo().getReplicaId() != HRegionInfo.DEFAULT_REPLICA_ID) {
+ hdfsBlocksDistributionSecondaryRegions.add(distro);
+ }
}
float localityIndex = hdfsBlocksDistribution.getBlockLocalityIndex(
regionServer.getServerName().getHostname());
tempPercentFileLocal = (int) (localityIndex * 100);
+ float localityIndexSecondaryRegions = hdfsBlocksDistributionSecondaryRegions
+ .getBlockLocalityIndex(regionServer.getServerName().getHostname());
+ tempPercentFileLocalSecondaryRegions = (int) (localityIndexSecondaryRegions * 100);
//Compute the number of requests per second
long currentTime = EnvironmentEdgeManager.currentTime();
@@ -507,6 +524,7 @@ class MetricsRegionServerWrapperImpl
numMutationsWithoutWAL = tempNumMutationsWithoutWAL;
dataInMemoryWithoutWAL = tempDataInMemoryWithoutWAL;
percentFileLocal = tempPercentFileLocal;
+ percentFileLocalSecondaryRegions = tempPercentFileLocalSecondaryRegions;
flushedCellsCount = tempFlushedCellsCount;
compactedCellsCount = tempCompactedCellsCount;
majorCompactedCellsCount = tempMajorCompactedCellsCount;
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 f55891d..6b458bc 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
@@ -131,6 +131,11 @@ public class MetricsRegionServerWrapperStub implements MetricsRegionServerWrappe
}
@Override
+ public int getPercentFileLocalSecondaryRegions() {
+ return 99;
+ }
+
+ @Override
public int getCompactionQueueSize() {
return 411;
}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java
index d5beed8..05b40e1 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java
@@ -75,6 +75,7 @@ public class TestMetricsRegionServer {
HELPER.assertGauge("mutationsWithoutWALCount", 409, serverSource);
HELPER.assertGauge("mutationsWithoutWALSize", 410, serverSource);
HELPER.assertGauge("percentFilesLocal", 99, serverSource);
+ HELPER.assertGauge("percentFilesLocalSecondaryRegions", 99, serverSource);
HELPER.assertGauge("compactionQueueLength", 411, serverSource);
HELPER.assertGauge("flushQueueLength", 412, serverSource);
HELPER.assertGauge("blockCacheFreeSize", 413, serverSource);
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 473946c..0f80e42 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
@@ -96,6 +96,7 @@ public class TestRegionServerMetrics {
@Test
public void testLocalFiles() throws Exception {
metricsHelper.assertGauge("percentFilesLocal", 0, serverSource);
+ metricsHelper.assertGauge("percentFilesLocalSecondaryRegions", 0, serverSource);
}
@Test