You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2017/09/20 00:35:18 UTC
[2/4] hbase git commit: HBASE-18478 Allow users to remove
RegionFinder from LoadBalancer calculations if no locality possible
HBASE-18478 Allow users to remove RegionFinder from LoadBalancer calculations if no locality possible
This provides significant cluster start time reduction for FileSystems which do not surface locality (S3).
Signed-off-by: Andrew Purtell <ap...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/d0a54352
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/d0a54352
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/d0a54352
Branch: refs/heads/branch-2
Commit: d0a54352e8a4f27adaaa62447d1eef61e45922a7
Parents: 518674b
Author: Zach York <zy...@amazon.com>
Authored: Thu Jun 22 14:12:49 2017 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Tue Sep 19 16:31:00 2017 -0700
----------------------------------------------------------------------
.../hbase/master/balancer/BaseLoadBalancer.java | 29 ++++++++++++++++----
1 file changed, 23 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/d0a54352/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
index 162ba92..ca73ff7 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
@@ -39,6 +39,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.ClusterStatus;
+import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HBaseIOException;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HDFSBlocksDistribution;
@@ -75,7 +76,8 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
static final Predicate<ServerLoad> IDLE_SERVER_PREDICATOR
= load -> load.getNumberOfRegions() == 0;
- protected final RegionLocationFinder regionFinder = new RegionLocationFinder();
+ protected RegionLocationFinder regionFinder;
+ protected boolean useRegionFinder;
private static class DefaultRackManager extends RackManager {
@Override
@@ -89,6 +91,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
*/
protected BaseLoadBalancer() {
metricsBalancer = new MetricsBalancer();
+ createRegionFinder();
}
/**
@@ -97,6 +100,14 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
*/
protected BaseLoadBalancer(MetricsBalancer metricsBalancer) {
this.metricsBalancer = (metricsBalancer != null) ? metricsBalancer : new MetricsBalancer();
+ createRegionFinder();
+ }
+
+ private void createRegionFinder() {
+ useRegionFinder = config.getBoolean("hbase.master.balancer.uselocality", true);
+ if (useRegionFinder) {
+ regionFinder = new RegionLocationFinder();
+ }
}
/**
@@ -990,7 +1001,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
protected float slop;
// overallSlop to control simpleLoadBalancer's cluster level threshold
protected float overallSlop;
- protected Configuration config;
+ protected Configuration config = HBaseConfiguration.create();
protected RackManager rackManager;
private static final Random RANDOM = new Random(System.currentTimeMillis());
private static final Log LOG = LogFactory.getLog(BaseLoadBalancer.class);
@@ -1019,7 +1030,9 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
this.tablesOnMaster = true;
}
this.rackManager = new RackManager(getConf());
- regionFinder.setConf(conf);
+ if (useRegionFinder) {
+ regionFinder.setConf(conf);
+ }
// Print out base configs. Don't print overallSlop since it for simple balancer exclusively.
LOG.info("slop=" + this.slop + ", tablesOnMaster=" + this.tablesOnMaster +
", systemTablesOnMaster=" + this.onlySystemTablesOnMaster);
@@ -1117,7 +1130,9 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
@Override
public synchronized void setClusterStatus(ClusterStatus st) {
this.clusterStatus = st;
- regionFinder.setClusterStatus(st);
+ if (useRegionFinder) {
+ regionFinder.setClusterStatus(st);
+ }
}
@Override
@@ -1129,7 +1144,9 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
public void setMasterServices(MasterServices masterServices) {
masterServerName = masterServices.getServerName();
this.services = masterServices;
- this.regionFinder.setServices(masterServices);
+ if (useRegionFinder) {
+ this.regionFinder.setServices(masterServices);
+ }
}
public void setRackManager(RackManager rackManager) {
@@ -1271,7 +1288,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
protected Cluster createCluster(List<ServerName> servers,
Collection<HRegionInfo> regions, boolean forceRefresh) {
- if (forceRefresh) {
+ if (forceRefresh && useRegionFinder) {
regionFinder.refreshAndWait(regions);
}
// Get the snapshot of the current assignments for the regions in question, and then create