[
https://issues.apache.org/jira/browse/HBASE-23949?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
niuyulin updated HBASE-23949:
-----------------------------
Description:
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
{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
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
>
> 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
>
> {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)