[
https://issues.apache.org/jira/browse/HBASE-3586?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13002332#comment-13002332
]
Ted Yu commented on HBASE-3586:
-------------------------------
Looking at how HRegionInfo gets added into AssignmentManager.servers:
{code}
private void addToServers(final HServerInfo hsi, final HRegionInfo hri) {
List<HRegionInfo> hris = servers.get(hsi);
if (hris == null) {
hris = new ArrayList<HRegionInfo>();
servers.put(hsi, hris);
}
hris.add(hri);
}
{code}
I think we can traverse List<HRegionInfo> in reverse order because young
regions are added to the tail of the List.
I have this:
{code}
int sz = regions.size();
for (int i = sz-1; i >= 0; i--) {
HRegionInfo hri = regions.get(i);
{code}
> Randomize the selection of regions to balance
> ---------------------------------------------
>
> Key: HBASE-3586
> URL: https://issues.apache.org/jira/browse/HBASE-3586
> Project: HBase
> Issue Type: Improvement
> Affects Versions: 0.90.1
> Reporter: Jean-Daniel Cryans
> Priority: Critical
> Fix For: 0.90.2
>
> Attachments: HBASE-3586-by-region-age.patch
>
>
> Currently LoadBalancer goes through the list of regions per RS and grabs the
> few first ones to balance. This is not bad, but that list is often sorted
> naturally since the a RS that boots will open the regions in a sequential and
> sorted order (since it comes from .META.) which means that we're balancing
> regions starting in an almost sorted fashion.
> We discovered that because one of our internal users created a new table
> starting with letter "p" which has now grown to 100 regions in the last few
> hours and they are all served by 1 region server. Looking at the master's
> log, the balancer has moved as many regions from that region server but they
> are all from the same table that starts with letter "a" (and the regions that
> were moved all come one after the other).
> The part of the code that should be modified is:
> {code}
> for (HRegionInfo hri: regions) {
> // Don't rebalance meta regions.
> if (hri.isMetaRegion()) continue;
> regionsToMove.add(new RegionPlan(hri, serverInfo, null));
> numTaken++;
> if (numTaken >= numToOffload) break;
> }
> {code}
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira