[ 
https://issues.apache.org/jira/browse/HBASE-23949?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

niuyulin updated HBASE-23949:
-----------------------------
    Description: 
 now can not achieve overallbalanced when use rsgroup balancer and by table is 
on,

because balance every table actually use the clusterload only contain one 
table's load.

we should use clusterload contain all this rsgroup table's load to balance 
overall

 

 hbase/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
{code:java}
  public boolean balance(boolean force) throws IOException {
    ......
    boolean isByTable = 
getConfiguration().getBoolean("hbase.master.loadbalance.bytable", false);
    Map<TableName, Map<ServerName, List<RegionInfo>>> assignments =
      this.assignmentManager.getRegionStates()
        .getAssignmentsForBalancer(tableStateManager, 
this.serverManager.getOnlineServersList(),
          isByTable);
    for (Map<ServerName, List<RegionInfo>> serverMap : assignments.values()) {
      serverMap.keySet().removeAll(this.serverManager.getDrainingServersList());
    }

//Give the balancer the current cluster state.
    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());
    this.balancer.setClusterLoad(assignments);

    List<RegionPlan> plans = new ArrayList<>();
    for (Entry<TableName, Map<ServerName, List<RegionInfo>>> e : 
assignments.entrySet()) {
      List<RegionPlan> partialPlans = this.balancer.balanceCluster(e.getKey(), 
e.getValue());
      if (partialPlans != null) {
        plans.addAll(partialPlans);
      }
    }
{code}
now do refactor:
 # add method 'balanceTable' in interface LoadBalancer
 # SimpleLoadBalancer and StochasticLoadBalancer do the real 'balanceTable' , 
and 'balanceTable' is not support in BaseLoadBalancer and 
RSGroupBasedLoadBalancer
 # RSGroupBasedLoadBalancer invoke balanceCluster , and pass GroupClusterLoad 
to internal balacer by group
 # internal balancer balance cluster invoke 'balanceTable' 

  was:
use rsgroup balancer and by table config is on , 

now balance every table actually use the clusterload only contain one table's 
load.

we should use clusterload contain all this rsgroup table's load to balance 
overall

 

 hbase/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
{code:java}
  public boolean balance(boolean force) throws IOException {
    ......
    boolean isByTable = 
getConfiguration().getBoolean("hbase.master.loadbalance.bytable", false);
    Map<TableName, Map<ServerName, List<RegionInfo>>> assignments =
      this.assignmentManager.getRegionStates()
        .getAssignmentsForBalancer(tableStateManager, 
this.serverManager.getOnlineServersList(),
          isByTable);
    for (Map<ServerName, List<RegionInfo>> serverMap : assignments.values()) {
      serverMap.keySet().removeAll(this.serverManager.getDrainingServersList());
    }

//Give the balancer the current cluster state.
    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());
    this.balancer.setClusterLoad(assignments);

    List<RegionPlan> plans = new ArrayList<>();
    for (Entry<TableName, Map<ServerName, List<RegionInfo>>> e : 
assignments.entrySet()) {
      List<RegionPlan> partialPlans = this.balancer.balanceCluster(e.getKey(), 
e.getValue());
      if (partialPlans != null) {
        plans.addAll(partialPlans);
      }
    }
{code}
now do refactor:
 # add method 'balanceTable' in interface LoadBalancer
 # SimpleLoadBalancer and StochasticLoadBalancer do the real 'balanceTable' , 
and 'balanceTable' is not support in BaseLoadBalancer and 
RSGroupBasedLoadBalancer
 # RSGroupBasedLoadBalancer invoke balanceCluster , and pass GroupClusterLoad 
to internal balacer by group
 # internal balancer balance cluster invoke 'balanceTable' 


> refactor  loadBalancer implements for rsgroup balance by table
> --------------------------------------------------------------
>
>                 Key: HBASE-23949
>                 URL: https://issues.apache.org/jira/browse/HBASE-23949
>             Project: HBase
>          Issue Type: Bug
>          Components: rsgroup
>    Affects Versions: 2.2.0
>            Reporter: niuyulin
>            Assignee: niuyulin
>            Priority: Major
>
>  now can not achieve overallbalanced when use rsgroup balancer and by table 
> is on,
> because balance every table actually use the clusterload only contain one 
> table's load.
> we should use clusterload contain all this rsgroup table's load to balance 
> overall
>  
>  hbase/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
> {code:java}
>   public boolean balance(boolean force) throws IOException {
>     ......
>     boolean isByTable = 
> getConfiguration().getBoolean("hbase.master.loadbalance.bytable", false);
>     Map<TableName, Map<ServerName, List<RegionInfo>>> assignments =
>       this.assignmentManager.getRegionStates()
>         .getAssignmentsForBalancer(tableStateManager, 
> this.serverManager.getOnlineServersList(),
>           isByTable);
>     for (Map<ServerName, List<RegionInfo>> serverMap : assignments.values()) {
>       
> serverMap.keySet().removeAll(this.serverManager.getDrainingServersList());
>     }
> //Give the balancer the current cluster state.
>     this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());
>     this.balancer.setClusterLoad(assignments);
>     List<RegionPlan> plans = new ArrayList<>();
>     for (Entry<TableName, Map<ServerName, List<RegionInfo>>> e : 
> assignments.entrySet()) {
>       List<RegionPlan> partialPlans = 
> this.balancer.balanceCluster(e.getKey(), e.getValue());
>       if (partialPlans != null) {
>         plans.addAll(partialPlans);
>       }
>     }
> {code}
> now do refactor:
>  # add method 'balanceTable' in interface LoadBalancer
>  # SimpleLoadBalancer and StochasticLoadBalancer do the real 'balanceTable' , 
> and 'balanceTable' is not support in BaseLoadBalancer and 
> RSGroupBasedLoadBalancer
>  # RSGroupBasedLoadBalancer invoke balanceCluster , and pass GroupClusterLoad 
> to internal balacer by group
>  # internal balancer balance cluster invoke 'balanceTable' 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to