[ 
https://issues.apache.org/jira/browse/HBASE-3586?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13002345#comment-13002345
 ] 

Ted Yu commented on HBASE-3586:
-------------------------------

I also have the following:
{code}
    // put young regions at the beginning of regionsToMove
    Collections.sort(regionsToMove, rpComparator);

    // Walk down least loaded, filling each to the min
{code}
where RegionPlanComparator is defined as:
{code}
  static class RegionPlanComparator implements Comparator<RegionPlan> {
      @Override
      public int compare(RegionPlan l, RegionPlan r) {
          long diff = r.getRegionInfo().getRegionId() - 
l.getRegionInfo().getRegionId();
          if (diff < 0) return -1;
          if (diff > 0) return 1;
          return 0;
      }   
  }
  static RegionPlanComparator rpComparator = new RegionPlanComparator();
{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, 
> 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

        

Reply via email to