You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by vj...@apache.org on 2021/02/13 04:05:35 UTC

[hbase] branch branch-1 updated: HBASE-25569 Adding region count and average region size in a table at regionserver level (#2948)

This is an automated email from the ASF dual-hosted git repository.

vjasani pushed a commit to branch branch-1
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-1 by this push:
     new e2a00af  HBASE-25569 Adding region count and average region size in a table at regionserver level (#2948)
e2a00af is described below

commit e2a00af843cd0343ce28e502afd4bbaa44e6b9ff
Author: Aman Poonia <am...@gmail.com>
AuthorDate: Sat Feb 13 09:35:04 2021 +0530

    HBASE-25569 Adding region count and average region size in a table at regionserver level (#2948)
    
    Signed-off-by: Viraj Jasani <vj...@apache.org>
---
 .../regionserver/MetricsTableWrapperAggregate.java | 10 +++
 .../hbase/regionserver/MetricsTableSourceImpl.java |  6 ++
 .../regionserver/TestMetricsTableSourceImpl.java   | 10 +++
 .../MetricsTableWrapperAggregateImpl.java          | 78 ++++++++++++++++------
 .../regionserver/MetricsTableWrapperStub.java      | 10 +++
 5 files changed, 92 insertions(+), 22 deletions(-)

diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java
index 85ea4f6..f5f6d4e 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java
@@ -54,4 +54,14 @@ public interface MetricsTableWrapperAggregate {
    * Get the table region size against this table
    */
   long getTableSize(String table);
+
+  /**
+   * Get the average region size for this table
+   */
+  long getAvgRegionSize(String table);
+
+  /**
+   * Get the number of regions hosted on for this table
+   */
+  long getNumRegions(String table);
 }
diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
index 5d1dd79..da10d07 100644
--- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
+++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
@@ -140,6 +140,12 @@ public class MetricsTableSourceImpl implements MetricsTableSource {
         mrb.addGauge(Interns.info(tableNamePrefix + MetricsTableSource.TABLE_SIZE,
           MetricsTableSource.TABLE_SIZE_DESC),
           tableWrapperAgg.getTableSize(tableName.getNameAsString()));
+        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.AVERAGE_REGION_SIZE,
+          MetricsRegionServerSource.AVERAGE_REGION_SIZE_DESC),
+          tableWrapperAgg.getAvgRegionSize(tableName.getNameAsString()));
+        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.REGION_COUNT,
+          MetricsRegionServerSource.REGION_COUNT_DESC),
+          tableWrapperAgg.getNumRegions(tableName.getNameAsString()));
       }
     }
   }
diff --git a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableSourceImpl.java b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableSourceImpl.java
index 3a9e73d..32f4857 100644
--- a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableSourceImpl.java
+++ b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableSourceImpl.java
@@ -107,6 +107,16 @@ public class TestMetricsTableSourceImpl {
       return 3000;
     }
 
+    @Override
+    public long getNumRegions(String table) {
+      return 3;
+    }
+
+    @Override
+    public long getAvgRegionSize(String table) {
+      return 3000;
+    }
+
     public String getTableName() {
       return tableName;
     }
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java
index c5f0f7b..1510c98 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java
@@ -74,10 +74,15 @@ public class MetricsTableWrapperAggregateImpl implements MetricsTableWrapperAggr
         }
         metricsTable.setMemstoresSize(metricsTable.getMemstoresSize() + r.getMemstoreSize());
         metricsTable.setStoreFilesSize(metricsTable.getStoreFilesSize() + tempStorefilesSize);
-        metricsTable.setTableSize(metricsTable.getMemstoresSize() + metricsTable.getStoreFilesSize());
-        metricsTable.setReadRequestsCount(metricsTable.getReadRequestsCount() + r.getReadRequestsCount());
-        metricsTable.setWriteRequestsCount(metricsTable.getWriteRequestsCount() + r.getWriteRequestsCount());
-        metricsTable.setTotalRequestsCount(metricsTable.getReadRequestsCount() + metricsTable.getWriteRequestsCount());
+        metricsTable
+            .setTableSize(metricsTable.getMemstoresSize() + metricsTable.getStoreFilesSize());
+        metricsTable
+            .setReadRequestsCount(metricsTable.getReadRequestsCount() + r.getReadRequestsCount());
+        metricsTable.setWriteRequestsCount(
+          metricsTable.getWriteRequestsCount() + r.getWriteRequestsCount());
+        metricsTable.setTotalRequestsCount(
+          metricsTable.getReadRequestsCount() + metricsTable.getWriteRequestsCount());
+        metricsTable.setRegionCount(metricsTable.getRegionCount() + 1);
       }
 
       for(Map.Entry<TableName, MetricsTableValues> entry : localMetricsTableMap.entrySet()) {
@@ -108,55 +113,75 @@ public class MetricsTableWrapperAggregateImpl implements MetricsTableWrapperAggr
   @Override
   public long getReadRequestsCount(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null)
+    if (metricsTable == null) {
       return 0;
-    else
-      return metricsTable.getReadRequestsCount();
+    }
+    return metricsTable.getReadRequestsCount();
   }
 
   @Override
   public long getWriteRequestsCount(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null)
+    if (metricsTable == null) {
       return 0;
-    else
-      return metricsTable.getWriteRequestsCount();
+    }
+    return metricsTable.getWriteRequestsCount();
   }
 
   @Override
   public long getTotalRequestsCount(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null)
+    if (metricsTable == null) {
       return 0;
-    else
-      return metricsTable.getTotalRequestsCount();
+    }
+    return metricsTable.getTotalRequestsCount();
   }
 
   @Override
   public long getMemstoresSize(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null)
+    if (metricsTable == null) {
       return 0;
-    else
-      return metricsTable.getMemstoresSize();
+    }
+    return metricsTable.getMemstoresSize();
   }
 
   @Override
   public long getStoreFilesSize(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null)
+    if (metricsTable == null) {
       return 0;
-    else
-      return metricsTable.getStoreFilesSize();
+    }
+    return metricsTable.getStoreFilesSize();
   }
 
   @Override
   public long getTableSize(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null)
+    if (metricsTable == null) {
+      return 0;
+    }
+    return metricsTable.getTableSize();
+  }
+
+  @Override
+  public long getNumRegions(String table) {
+    MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
+    if (metricsTable == null) {
       return 0;
-    else
-      return metricsTable.getTableSize();
+    }
+    return metricsTable.regionCount;
+  }
+
+  @Override
+  public long getAvgRegionSize(String table) {
+    MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
+    if (metricsTable == null) {
+      return 0;
+    }
+    return metricsTable.regionCount == 0 ? 0
+        : (metricsTable.getMemstoresSize() + metricsTable.getStoreFilesSize())
+            / metricsTable.getRegionCount();
   }
 
   @Override
@@ -172,6 +197,7 @@ public class MetricsTableWrapperAggregateImpl implements MetricsTableWrapperAggr
     private long memstoresSize;
     private long storeFilesSize;
     private long tableSize;
+    private long regionCount;
 
     public long getTotalRequestsCount() {
       return totalRequestsCount;
@@ -220,6 +246,14 @@ public class MetricsTableWrapperAggregateImpl implements MetricsTableWrapperAggr
     public void setTableSize(long tableSize) {
       this.tableSize = tableSize;
     }
+
+    public long getRegionCount() {
+      return regionCount;
+    }
+
+    public void setRegionCount(long regionCount) {
+      this.regionCount = regionCount;
+    }
   }
 
 }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
index 6fd8dd7..645df26 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
@@ -59,4 +59,14 @@ public class MetricsTableWrapperStub implements MetricsTableWrapperAggregate {
   public String getTableName() {
     return tableName;
   }
+
+  @Override
+  public long getNumRegions(String table) {
+    return 11;
+  }
+
+  @Override
+  public long getAvgRegionSize(String table) {
+    return 22;
+  }
 }