You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bh...@apache.org on 2021/02/02 19:15:43 UTC

[hbase] branch branch-1 updated: HBASE-25528: Dedicated merge dispatch threadpool on master (#2909)

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

bharathv 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 f52b457  HBASE-25528: Dedicated merge dispatch threadpool on master (#2909)
f52b457 is described below

commit f52b457cf9d17a7fb3cb19dffab770f4697b65a9
Author: Bharath Vissapragada <bh...@apache.org>
AuthorDate: Tue Feb 2 11:15:09 2021 -0800

    HBASE-25528: Dedicated merge dispatch threadpool on master (#2909)
    
    Adds "hbase.master.executor.merge.dispatch.threads" and defaults to 2.
    
    Also adds additional logging that includes the number of split plans
    and merge plans computed for each normalizer run.
    
    (cherry picked from commit 36b4698cea9485f4d491612342b8c841e1c3db86)
    
    Signed-off-by: Andrew Purtell <ap...@apache.org>
    Signed-off-by: Michael Stack <st...@apache.org>
---
 .../src/main/java/org/apache/hadoop/hbase/executor/EventType.java | 2 +-
 .../main/java/org/apache/hadoop/hbase/executor/ExecutorType.java  | 1 +
 .../src/main/java/org/apache/hadoop/hbase/HConstants.java         | 7 +++++++
 .../src/main/java/org/apache/hadoop/hbase/master/HMaster.java     | 3 +++
 .../hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java    | 8 ++++++++
 5 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/executor/EventType.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/executor/EventType.java
index 7dcc08e..8db1034 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/executor/EventType.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/executor/EventType.java
@@ -149,7 +149,7 @@ public enum EventType {
    * C_M_MERGE_REGION<br>
    * Client asking Master to merge regions.
    */
-  C_M_MERGE_REGION          (30, ExecutorType.MASTER_TABLE_OPERATIONS),
+  C_M_MERGE_REGION          (30, ExecutorType.MASTER_MERGE_OPERATIONS),
   /**
    * Messages originating from Client to Master.<br>
    * C_M_DELETE_TABLE<br>
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/executor/ExecutorType.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/executor/ExecutorType.java
index 36b9a2c..7d26e68 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/executor/ExecutorType.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/executor/ExecutorType.java
@@ -37,6 +37,7 @@ public enum ExecutorType {
   MASTER_META_SERVER_OPERATIONS (6),
   M_LOG_REPLAY_OPS           (7),
   MASTER_SNAPSHOT_OPERATIONS (8),
+  MASTER_MERGE_OPERATIONS (9),
 
   // RegionServer executor services
   RS_OPEN_REGION             (20),
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java
index c1d688e..9614235 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java
@@ -1397,6 +1397,13 @@ public final class HConstants {
       "hbase.master.executor.serverops.threads";
   public static final int MASTER_SERVER_OPERATIONS_THREADS_DEFAULT = 5;
 
+  /**
+   * Number of threads used to dispatch merge operations to the regionservers.
+   */
+  public static final String MASTER_MERGE_DISPATCH_THREADS =
+      "hbase.master.executor.merge.dispatch.threads";
+  public static final int MASTER_MERGE_DISPATCH_THREADS_DEFAULT = 2;
+
   public static final String MASTER_META_SERVER_OPERATIONS_THREADS =
       "hbase.master.executor.meta.serverops.threads";
   public static final int MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT = 5;
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index a715581..0f4b80e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -1269,6 +1269,9 @@ public class HMaster extends HRegionServer implements MasterServices, Server {
       HConstants.MASTER_LOG_REPLAY_OPS_THREADS, HConstants.MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT));
     this.service.startExecutorService(ExecutorType.MASTER_SNAPSHOT_OPERATIONS, conf.getInt(
       SnapshotManager.SNAPSHOT_POOL_THREADS_KEY, SnapshotManager.SNAPSHOT_POOL_THREADS_DEFAULT));
+    this.service.startExecutorService(ExecutorType.MASTER_MERGE_OPERATIONS, conf.getInt(
+        HConstants.MASTER_MERGE_DISPATCH_THREADS,
+        HConstants.MASTER_MERGE_DISPATCH_THREADS_DEFAULT));
 
    // We depend on there being only one instance of this executor running
    // at a time.  To do concurrency, would need fencing of enable/disable of
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java
index fd206ad..fca2208 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java
@@ -183,6 +183,8 @@ public class SimpleRegionNormalizer implements RegionNormalizer {
     LOG.debug("Table " + table + ", average region size: " + avgRegionSize);
 
     int candidateIdx = 0;
+    int splitCount = 0;
+    int mergeCount = 0;
     while (candidateIdx < tableRegions.size()) {
       HRegionInfo hri = tableRegions.get(candidateIdx);
       long regionSize = getRegionSize(hri);
@@ -193,6 +195,7 @@ public class SimpleRegionNormalizer implements RegionNormalizer {
           LOG.info("Table " + table + ", large region " + hri.getRegionNameAsString() + " has size "
               + regionSize + ", more than twice avg size, splitting");
           plans.add(new SplitNormalizationPlan(hri, null));
+          splitCount++;
         }
       } else {
         if (candidateIdx == tableRegions.size()-1) {
@@ -206,6 +209,7 @@ public class SimpleRegionNormalizer implements RegionNormalizer {
               + " plus its neighbor size: " + regionSize2
               + ", less than the avg size " + avgRegionSize + ", merging them");
             plans.add(new MergeNormalizationPlan(hri, hri2));
+            mergeCount++;
             candidateIdx++;
           }
         }
@@ -217,6 +221,10 @@ public class SimpleRegionNormalizer implements RegionNormalizer {
       return null;
     }
     Collections.sort(plans, planComparator);
+    if (LOG.isDebugEnabled()) {
+      LOG.debug(String.format("Computed normalization plans for table %s. Total plans %d, split " +
+          "plans %d, merge plans %d", table, plans.size(), splitCount, mergeCount));
+    }
     return plans;
   }