From 8727a68dfc07c7fb27b2925e478bad0f86d9dd0b Mon Sep 17 00:00:00 2001 From: rahulgidwani Date: Tue, 20 Jan 2015 16:19:20 -0800 Subject: [PATCH] HBASE-12890 Provide a way to throttle the number of regions moved by the balancer --- hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java | 4 ++++ .../src/main/java/org/apache/hadoop/hbase/master/HMaster.java | 6 ++++++ 2 files changed, 10 insertions(+) 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 c181ad5..e524c1a 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 @@ -791,6 +791,10 @@ public final class HConstants { public static final String HBASE_REGION_SPLIT_POLICY_KEY = "hbase.regionserver.region.split.policy"; + + /* Maximum number of regions to balance per balance run */ + public static final String BALANCER_MAX_REGIONS = "hbase.balancer.max.regions"; + /** Whether nonces are enabled; default is true. */ public static final String HBASE_RS_NONCES_ENABLED = "hbase.regionserver.nonces.enabled"; 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 453b35d..9dacdae 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 @@ -1588,6 +1588,8 @@ MasterServices, Server { long totalRegPlanExecTime = 0; balancerRan = plans != null; if (plans != null && !plans.isEmpty()) { + int maximumRegionCount = getConfiguration().getInt( + HConstants.BALANCER_MAX_REGIONS, plans.size()); for (RegionPlan plan: plans) { LOG.info("balance " + plan); long balStartTime = System.currentTimeMillis(); @@ -1595,6 +1597,10 @@ MasterServices, Server { this.assignmentManager.balance(plan); totalRegPlanExecTime += System.currentTimeMillis()-balStartTime; rpCount++; + if (rpCount >= maximumRegionCount) { + LOG.debug("Balancer moved " + rpCount + " regions, reaching limit for this iteration"); + break; + } if (rpCount < plans.size() && // if performing next balance exceeds cutoff time, exit the loop (System.currentTimeMillis() + (totalRegPlanExecTime / rpCount)) > cutoffTime) { -- 2.1.0