blob: 8484b347db6a02917e9a058adcb8fb9a5c9f5702 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SimpleLoadBalancer (Apache HBase 4.0.0-alpha-1-SNAPSHOT API)</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="SimpleLoadBalancer (Apache HBase 4.0.0-alpha-1-SNAPSHOT API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/SimpleLoadBalancer.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/ServerLocalityCostFunction.html" title="class in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.BalanceInfo.html" title="class in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html" target="_top">Frames</a></li>
<li><a href="SimpleLoadBalancer.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.hadoop.hbase.master.balancer</div>
<h2 title="Class SimpleLoadBalancer" class="title">Class SimpleLoadBalancer</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer</a></li>
<li>
<ul class="inheritance">
<li>org.apache.hadoop.hbase.master.balancer.SimpleLoadBalancer</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="../../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html" title="interface in org.apache.hadoop.hbase.conf">ConfigurationObserver</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a>, <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></dd>
</dl>
<hr>
<br>
<pre>@InterfaceAudience.LimitedPrivate(value="Configuration")
public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.56">SimpleLoadBalancer</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer</a></pre>
<div class="block">Makes decisions about the placement and movement of Regions across RegionServers.
<p/>
Cluster-wide load balancing will occur only when there are no regions in transition and according
to a fixed period of a time using <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#balanceCluster-java.util.Map-"><code>BaseLoadBalancer.balanceCluster(Map)</code></a>.
<p/>
On cluster startup, bulk assignment can be used to determine locations for all Regions in a
cluster.
<p/>
This classes produces plans for the <code>AssignmentManager</code> to execute.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.BalanceInfo.html" title="class in org.apache.hadoop.hbase.master.balancer">SimpleLoadBalancer.BalanceInfo</a></span></code>
<div class="block">Stores additional per-server information about the regions added/removed during the run of the
balancing algorithm.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private float</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#avgLoadOverall">avgLoadOverall</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#LOG">LOG</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private float</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#overallSlop">overallSlop</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/RegionInfoComparator.html" title="class in org.apache.hadoop.hbase.master.balancer">RegionInfoComparator</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#riComparator">riComparator</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.RegionPlanComparator.html" title="class in org.apache.hadoop.hbase.master">RegionPlan.RegionPlanComparator</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#rpComparator">rpComparator</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/ServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer">ServerAndLoad</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#serverLoadList">serverLoadList</a></span></code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer</a></h3>
<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#BALANCER_DECISION_BUFFER_ENABLED">BALANCER_DECISION_BUFFER_ENABLED</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#BALANCER_REJECTION_BUFFER_ENABLED">BALANCER_REJECTION_BUFFER_ENABLED</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#clusterStatus">clusterStatus</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#DEFAULT_BALANCER_DECISION_BUFFER_ENABLED">DEFAULT_BALANCER_DECISION_BUFFER_ENABLED</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#DEFAULT_BALANCER_REJECTION_BUFFER_ENABLED">DEFAULT_BALANCER_REJECTION_BUFFER_ENABLED</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#DEFAULT_HBASE_MASTER_LOADBALANCE_BYTABLE">DEFAULT_HBASE_MASTER_LOADBALANCE_BYTABLE</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#isByTable">isByTable</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#masterServerName">masterServerName</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#metricsBalancer">metricsBalancer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#MIN_SERVER_BALANCE">MIN_SERVER_BALANCE</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#provider">provider</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#rackManager">rackManager</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#regionFinder">regionFinder</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#slop">slop</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#useRegionFinder">useRegionFinder</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.LoadBalancer">
<!-- -->
</a>
<h3>Fields inherited from interface&nbsp;org.apache.hadoop.hbase.master.<a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a></h3>
<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#BOGUS_SERVER_NAME">BOGUS_SERVER_NAME</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#HBASE_RSGROUP_LOADBALANCER_CLASS">HBASE_RSGROUP_LOADBALANCER_CLASS</a></code></li>
</ul>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#SimpleLoadBalancer--">SimpleLoadBalancer</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#addRegionPlan-org.apache.hbase.thirdparty.com.google.common.collect.MinMaxPriorityQueue-boolean-org.apache.hadoop.hbase.ServerName-java.util.List-">addRegionPlan</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.MinMaxPriorityQueue&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;regionsToMove,
boolean&nbsp;fetchFromTail,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;regionsToReturn)</code>
<div class="block">Add a region from the head or tail to the List of regions to return.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#balanceOverall-java.util.List-java.util.Map-boolean-org.apache.hbase.thirdparty.com.google.common.collect.MinMaxPriorityQueue-int-int-">balanceOverall</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;regionsToReturn,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.BalanceInfo.html" title="class in org.apache.hadoop.hbase.master.balancer">SimpleLoadBalancer.BalanceInfo</a>&gt;&nbsp;serverBalanceInfo,
boolean&nbsp;fetchFromTail,
org.apache.hbase.thirdparty.com.google.common.collect.MinMaxPriorityQueue&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;regionsToMove,
int&nbsp;max,
int&nbsp;min)</code>
<div class="block">If we need to balanceoverall, we need to add one more round to peel off one region from each
max.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#balanceTable-org.apache.hadoop.hbase.TableName-java.util.Map-">balanceTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;loadOfOneTable)</code>
<div class="block">Generate a global load balancing plan according to the specified map of server information to
the most loaded regions of each server.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#loadConf-org.apache.hadoop.conf.Configuration-">loadConf</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#needsBalance-org.apache.hadoop.hbase.master.balancer.BalancerClusterState-">needsBalance</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerClusterState</a>&nbsp;c)</code>&nbsp;</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">onConfigurationChange</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
<div class="block">Notification that config has changed</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#overallNeedsBalance--">overallNeedsBalance</a></span>()</code>
<div class="block">A checker function to decide when we want balance overall and certain table has been balanced,
do we still need to re-distribute regions of this table to achieve the state of overall-balance</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#preBalanceCluster-java.util.Map-">preBalanceCluster</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;loadOfAllTable)</code>
<div class="block">Called before actually executing balanceCluster.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#setClusterLoad-java.util.Map-">setClusterLoad</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;clusterLoad)</code>
<div class="block">Pass RegionStates and allow balancer to set the current cluster load.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#setLoad-java.util.List-int-int-">setLoad</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/ServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer">ServerAndLoad</a>&gt;&nbsp;slList,
int&nbsp;i,
int&nbsp;loadChange)</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer</a></h3>
<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#balanceCluster-java.util.Map-">balanceCluster</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#getConf--">getConf</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#getDefaultSlop--">getDefaultSlop</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#idleRegionServerExist-org.apache.hadoop.hbase.master.balancer.BalancerClusterState-">idleRegionServerExist</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#initialize--">initialize</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#isStopped--">isStopped</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#postMasterStartupInitialize--">postMasterStartupInitialize</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#randomAssignment-org.apache.hadoop.hbase.client.RegionInfo-java.util.List-">randomAssignment</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#regionOffline-org.apache.hadoop.hbase.client.RegionInfo-">regionOffline</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#regionOnline-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">regionOnline</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#retainAssignment-java.util.Map-java.util.List-">retainAssignment</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#roundRobinAssignment-java.util.List-java.util.List-">roundRobinAssignment</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#setClusterInfoProvider-org.apache.hadoop.hbase.master.balancer.ClusterInfoProvider-">setClusterInfoProvider</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#sloppyRegionServerExist-org.apache.hadoop.hbase.master.balancer.ClusterLoadState-">sloppyRegionServerExist</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#stop-java.lang.String-">stop</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#toEnsumbleTableLoad-java.util.Map-">toEnsumbleTableLoad</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#updateBalancerStatus-boolean-">updateBalancerStatus</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#updateClusterMetrics-org.apache.hadoop.hbase.ClusterMetrics-">updateClusterMetrics</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.LoadBalancer">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.master.<a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a></h3>
<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#updateBalancerLoadInfo-java.util.Map-">updateBalancerLoadInfo</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="LOG">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.57">LOG</a></pre>
</li>
</ul>
<a name="riComparator">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>riComparator</h4>
<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/RegionInfoComparator.html" title="class in org.apache.hadoop.hbase.master.balancer">RegionInfoComparator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.59">riComparator</a></pre>
</li>
</ul>
<a name="rpComparator">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>rpComparator</h4>
<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.RegionPlanComparator.html" title="class in org.apache.hadoop.hbase.master">RegionPlan.RegionPlanComparator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.60">rpComparator</a></pre>
</li>
</ul>
<a name="avgLoadOverall">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>avgLoadOverall</h4>
<pre>private&nbsp;float <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.61">avgLoadOverall</a></pre>
</li>
</ul>
<a name="serverLoadList">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>serverLoadList</h4>
<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/ServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer">ServerAndLoad</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.62">serverLoadList</a></pre>
</li>
</ul>
<a name="overallSlop">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>overallSlop</h4>
<pre>private&nbsp;float <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.64">overallSlop</a></pre>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="SimpleLoadBalancer--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>SimpleLoadBalancer</h4>
<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.56">SimpleLoadBalancer</a>()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="setClusterLoad-java.util.Map-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setClusterLoad</h4>
<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.113">setClusterLoad</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;clusterLoad)</pre>
<div class="block">Pass RegionStates and allow balancer to set the current cluster load.</div>
</li>
</ul>
<a name="preBalanceCluster-java.util.Map-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>preBalanceCluster</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.133">preBalanceCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;loadOfAllTable)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#preBalanceCluster-java.util.Map-">BaseLoadBalancer</a></code></span></div>
<div class="block">Called before actually executing balanceCluster. The sub classes could override this method to
do some initialization work.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#preBalanceCluster-java.util.Map-">preBalanceCluster</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer</a></code></dd>
</dl>
</li>
</ul>
<a name="loadConf-org.apache.hadoop.conf.Configuration-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>loadConf</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.139">loadConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#loadConf-org.apache.hadoop.conf.Configuration-">loadConf</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer</a></code></dd>
</dl>
</li>
</ul>
<a name="onConfigurationChange-org.apache.hadoop.conf.Configuration-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onConfigurationChange</h4>
<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.145">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">LoadBalancer</a></code></span></div>
<div class="block">Notification that config has changed</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">onConfigurationChange</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html" title="interface in org.apache.hadoop.hbase.conf">ConfigurationObserver</a></code></dd>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">onConfigurationChange</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">onConfigurationChange</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer</a></code></dd>
</dl>
</li>
</ul>
<a name="setLoad-java.util.List-int-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setLoad</h4>
<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.155">setLoad</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/ServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer">ServerAndLoad</a>&gt;&nbsp;slList,
int&nbsp;i,
int&nbsp;loadChange)</pre>
</li>
</ul>
<a name="overallNeedsBalance--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>overallNeedsBalance</h4>
<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.166">overallNeedsBalance</a>()</pre>
<div class="block">A checker function to decide when we want balance overall and certain table has been balanced,
do we still need to re-distribute regions of this table to achieve the state of overall-balance</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if this table should be balanced.</dd>
</dl>
</li>
</ul>
<a name="needsBalance-org.apache.hadoop.hbase.master.balancer.BalancerClusterState-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>needsBalance</h4>
<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.184">needsBalance</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerClusterState</a>&nbsp;c)</pre>
</li>
</ul>
<a name="balanceTable-org.apache.hadoop.hbase.TableName-java.util.Map-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>balanceTable</h4>
<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.256">balanceTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;loadOfOneTable)</pre>
<div class="block">Generate a global load balancing plan according to the specified map of server information to
the most loaded regions of each server. The load balancing invariant is that all servers are
within 1 region of the average number of regions per server. If the average is an integer
number, all servers will be balanced to the average. Otherwise, all servers will have either
floor(average) or ceiling(average) regions. HBASE-3609 Modeled regionsToMove using Guava's
MinMaxPriorityQueue so that we can fetch from both ends of the queue. At the beginning, we
check whether there was empty region server just discovered by Master. If so, we alternately
choose new / old regions from head / tail of regionsToMove, respectively. This alternation
avoids clustering young regions on the newly discovered region server. Otherwise, we choose new
regions from head of regionsToMove. Another improvement from HBASE-3609 is that we assign
regions from regionsToMove to underloaded servers in round-robin fashion. Previously one
underloaded server would be filled before we move onto the next underloaded server, leading to
clustering of young regions. Finally, we randomly shuffle underloaded servers so that they
receive offloaded regions relatively evenly across calls to balanceCluster(). The algorithm is
currently implemented as such:
<ol>
<li>Determine the two valid numbers of regions each server should have,
<b>MIN</b>=floor(average) and <b>MAX</b>=ceiling(average).
<li>Iterate down the most loaded servers, shedding regions from each so each server hosts
exactly <b>MAX</b> regions. Stop once you reach a server that already has &lt;= <b>MAX</b>
regions.
<p>
Order the regions to move from most recent to least.
<li>Iterate down the least loaded servers, assigning regions so each server has exactly
<b>MIN</b> regions. Stop once you reach a server that already has &gt;= <b>MIN</b> regions.
Regions being assigned to underloaded servers are those that were shed in the previous step. It
is possible that there were not enough regions shed to fill each underloaded server to
<b>MIN</b>. If so we end up with a number of regions required to do so, <b>neededRegions</b>.
It is also possible that we were able to fill each underloaded but ended up with regions that
were unassigned from overloaded servers but that still do not have assignment. If neither of
these conditions hold (no regions needed to fill the underloaded servers, no regions leftover
from overloaded servers), we are done and return. Otherwise we handle these cases below.
<li>If <b>neededRegions</b> is non-zero (still have underloaded servers), we iterate the most
loaded servers again, shedding a single server from each (this brings them from having
<b>MAX</b> regions to having <b>MIN</b> regions).
<li>We now definitely have more regions that need assignment, either from the previous step or
from the original shedding from overloaded servers. Iterate the least loaded servers filling
each to <b>MIN</b>.
<li>If we still have more regions that need assignment, again iterate the least loaded servers,
this time giving each one (filling them to <b>MAX</b>) until we run out.
<li>All servers will now either host <b>MIN</b> or <b>MAX</b> regions. In addition, any server
hosting &gt;= <b>MAX</b> regions is guaranteed to end up with <b>MAX</b> regions at the end of
the balancing. This ensures the minimal number of regions possible are moved.
</ol>
TODO: We can at-most reassign the number of regions away from a particular server to be how
many they report as most loaded. Should we just keep all assignment in memory? Any objections?
Does this mean we need HeapSize on HMaster? Or just careful monitor? (current thinking is we
will hold all assignments in memory)</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#balanceTable-org.apache.hadoop.hbase.TableName-java.util.Map-">balanceTable</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>loadOfOneTable</code> - Map of regionservers and their load/region information to a list of their
most loaded regions</dd>
<dd><code>tableName</code> - the table to be balanced</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a list of regions to be moved, including source and destination, or null if cluster is
already balanced</dd>
</dl>
</li>
</ul>
<a name="balanceOverall-java.util.List-java.util.Map-boolean-org.apache.hbase.thirdparty.com.google.common.collect.MinMaxPriorityQueue-int-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>balanceOverall</h4>
<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.470">balanceOverall</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;regionsToReturn,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.BalanceInfo.html" title="class in org.apache.hadoop.hbase.master.balancer">SimpleLoadBalancer.BalanceInfo</a>&gt;&nbsp;serverBalanceInfo,
boolean&nbsp;fetchFromTail,
org.apache.hbase.thirdparty.com.google.common.collect.MinMaxPriorityQueue&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;regionsToMove,
int&nbsp;max,
int&nbsp;min)</pre>
<div class="block">If we need to balanceoverall, we need to add one more round to peel off one region from each
max. Together with other regions left to be assigned, we distribute all regionToMove, to the RS
that have less regions in whole cluster scope.</div>
</li>
</ul>
<a name="addRegionPlan-org.apache.hbase.thirdparty.com.google.common.collect.MinMaxPriorityQueue-boolean-org.apache.hadoop.hbase.ServerName-java.util.List-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>addRegionPlan</h4>
<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#line.608">addRegionPlan</a>(org.apache.hbase.thirdparty.com.google.common.collect.MinMaxPriorityQueue&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;regionsToMove,
boolean&nbsp;fetchFromTail,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;regionsToReturn)</pre>
<div class="block">Add a region from the head or tail to the List of regions to return.</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/SimpleLoadBalancer.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/ServerLocalityCostFunction.html" title="class in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.BalanceInfo.html" title="class in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html" target="_top">Frames</a></li>
<li><a href="SimpleLoadBalancer.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>