You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2015/07/17 18:56:44 UTC
hbase git commit: HBASE-14110 Add CostFunction for balancing primary
region replicas
Repository: hbase
Updated Branches:
refs/heads/master 834f87b23 -> b98598f36
HBASE-14110 Add CostFunction for balancing primary region replicas
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b98598f3
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b98598f3
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b98598f3
Branch: refs/heads/master
Commit: b98598f3638462a55434ea1426351fe78d72f154
Parents: 834f87b
Author: tedyu <yu...@gmail.com>
Authored: Fri Jul 17 09:56:37 2015 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Fri Jul 17 09:56:37 2015 -0700
----------------------------------------------------------------------
.../master/balancer/StochasticLoadBalancer.java | 41 ++++++++++++++++++++
1 file changed, 41 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/b98598f3/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
index 4955cfa..b6b4691 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
@@ -167,6 +167,7 @@ public class StochasticLoadBalancer extends BaseLoadBalancer {
costFunctions = new CostFunction[]{
new RegionCountSkewCostFunction(conf),
+ new PrimaryRegionCountSkewCostFunction(conf),
new MoveCostFunction(conf),
localityCost,
new TableSkewCostFunction(conf),
@@ -947,6 +948,46 @@ public class StochasticLoadBalancer extends BaseLoadBalancer {
}
/**
+ * Compute the cost of a potential cluster state from skew in number of
+ * primary regions on a cluster.
+ */
+ static class PrimaryRegionCountSkewCostFunction extends CostFunction {
+ private static final String PRIMARY_REGION_COUNT_SKEW_COST_KEY =
+ "hbase.master.balancer.stochastic.primaryRegionCountCost";
+ private static final float DEFAULT_PRIMARY_REGION_COUNT_SKEW_COST = 500;
+
+ private double[] stats = null;
+
+ PrimaryRegionCountSkewCostFunction(Configuration conf) {
+ super(conf);
+ // Load multiplier should be the greatest as primary regions serve majority of reads/writes.
+ this.setMultiplier(conf.getFloat(PRIMARY_REGION_COUNT_SKEW_COST_KEY,
+ DEFAULT_PRIMARY_REGION_COUNT_SKEW_COST));
+ }
+
+ @Override
+ double cost() {
+ if (!cluster.hasRegionReplicas) {
+ return 0;
+ }
+ if (stats == null || stats.length != cluster.numServers) {
+ stats = new double[cluster.numServers];
+ }
+
+ for (int i =0; i < cluster.numServers; i++) {
+ stats[i] = 0;
+ for (int regionIdx : cluster.regionsPerServer[i]) {
+ if (regionIdx == cluster.regionIndexToPrimaryIndex[regionIdx]) {
+ stats[i] ++;
+ }
+ }
+ }
+
+ return costFromArray(stats);
+ }
+ }
+
+ /**
* Compute the cost of a potential cluster configuration based upon how evenly
* distributed tables are.
*/