[
https://issues.apache.org/jira/browse/HBASE-7060?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13487197#comment-13487197
]
Hudson commented on HBASE-7060:
-------------------------------
Integrated in HBase-TRUNK #3498 (See
[https://builds.apache.org/job/HBase-TRUNK/3498/])
HBASE-7060 Region load balancing by table does not handle the case where a
table's region count is lower than the number of the RS in the cluster (Ted Yu
and Tianying) (Revision 1403851)
Result = FAILURE
tedyu :
Files :
*
/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/DefaultLoadBalancer.java
> Region load balancing by table does not handle the case where a table's
> region count is lower than the number of the RS in the cluster
> --------------------------------------------------------------------------------------------------------------------------------------
>
> Key: HBASE-7060
> URL: https://issues.apache.org/jira/browse/HBASE-7060
> Project: HBase
> Issue Type: Bug
> Components: master
> Affects Versions: 0.92.0
> Reporter: Tianying Chang
> Assignee: Ted Yu
> Fix For: 0.94.3, 0.96.0
>
> Attachments: 7060-94.txt, 7060-94-v2.txt, 7060-test-tentative-94.txt,
> 7060-trunk.txt, HBASE-7060.patch
>
>
> When the table's region count is less than the count of region servers, the
> region balance algorithm will not move the region. For example, the cluster
> has 100 RS, the table has 50 regions sitting on one RS, they will not be
> moved to any of the other 99 RS.
> This is because the algorithm did not calculate the under-loaded RS
> correctly. This is how the algorithm works with the above example:
> avg-regions-per-RS=0.5
> min-RS-per-RS=0
> max-RS-per-RS=1
> when they calculate the under loaded RS, the code is as below. Since
> regionCount=0, which is always >=min, so it will always skip, therefore, no
> underloaded RS are found.
> Map<ServerName, Integer> underloadedServers = new HashMap<ServerName,
> Integer>();
> for (Map.Entry<ServerAndLoad, List<HRegionInfo>> server:
> serversByLoad.entrySet()) {
> int regionCount = server.getKey().getLoad();
> if (regionCount >= min) { break; }
> underloadedServers.put(server.getKey().getServerName(), min - regionCount);
> }
> Later the function returns since underloaded RS size is 0
> if (serverUnerloaded ==0) return regionsToReturn;
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira