[
https://issues.apache.org/jira/browse/HBASE-7060?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13486655#comment-13486655
]
Ted Yu commented on HBASE-7060:
-------------------------------
There're two problems with initial patch:
1. since there would always be region server not carrying region(s) from the
underlying table in this setting, load balancer would move regions
unnecessarily in each run.
2. after the first balancing run, the regions of the underlying table have been
spread out. There is no need to balance the table unless the list of online
servers changes.
> 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.92.3, 0.94.3
>
> Attachments: 7060-94.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