@InterfaceAudience.Private public class RSGroupBasedLoadBalancer extends Object implements RSGroupableBalancer
| Modifier and Type | Field and Description |
|---|---|
static String |
FALLBACK_GROUP_ENABLE_KEY
Set this key to
true to allow region fallback. |
private boolean |
fallbackEnabled |
private LoadBalancer |
internalBalancer |
private static org.slf4j.Logger |
LOG |
private MasterServices |
masterServices |
private RSGroupInfoManager |
rsGroupInfoManager |
HBASE_RSGROUP_LOADBALANCER_CLASSBOGUS_SERVER_NAME, SYSTEM_TABLES_ON_MASTER, TABLES_ON_MASTER| Constructor and Description |
|---|
RSGroupBasedLoadBalancer()
Used by reflection in
LoadBalancerFactory. |
| Modifier and Type | Method and Description |
|---|---|
List<RegionPlan> |
balanceCluster(Map<TableName,Map<ServerName,List<RegionInfo>>> loadOfAllTable)
Balance by RSGroup.
|
private Pair<Map<TableName,Map<ServerName,List<RegionInfo>>>,List<RegionPlan>> |
correctAssignments(Map<TableName,Map<ServerName,List<RegionInfo>>> existingAssignments) |
private List<ServerName> |
filterOfflineServers(RSGroupInfo RSGroupInfo,
List<ServerName> onlineServers) |
private List<ServerName> |
filterServers(Set<Address> servers,
List<ServerName> onlineServers)
Filter servers based on the online servers.
|
private List<Pair<List<RegionInfo>,List<ServerName>>> |
generateGroupAssignments(List<RegionInfo> regions,
List<ServerName> servers) |
private List<ServerName> |
getFallBackCandidates(List<ServerName> servers) |
void |
initialize()
Initialize the load balancer.
|
boolean |
isFallbackEnabled() |
boolean |
isOnline() |
boolean |
isStopped()
Returns True if
Stoppable.stop(String) has been closed. |
void |
onConfigurationChange(org.apache.hadoop.conf.Configuration conf)
This method would be called by the
ConfigurationManager object when the
Configuration object is reloaded from disk. |
void |
postMasterStartupInitialize()
If balancer needs to do initialization after Master has started up, lets do that here.
|
ServerName |
randomAssignment(RegionInfo region,
List<ServerName> servers)
Get a random region server from the list
|
void |
regionOffline(RegionInfo regionInfo)
Marks the region as offline at balancer.
|
void |
regionOnline(RegionInfo regionInfo,
ServerName sn)
Marks the region as online at balancer.
|
Map<ServerName,List<RegionInfo>> |
retainAssignment(Map<RegionInfo,ServerName> regions,
List<ServerName> servers)
Assign regions to the previously hosting region server nn * @return List of plans
|
Map<ServerName,List<RegionInfo>> |
roundRobinAssignment(List<RegionInfo> regions,
List<ServerName> servers)
Perform a Round Robin assignment of regions.
|
void |
setMasterServices(MasterServices masterServices)
Set the master service.
|
void |
setRsGroupInfoManager(RSGroupInfoManager rsGroupInfoManager) |
void |
stop(String why)
Stop this service.
|
void |
updateBalancerLoadInfo(Map<TableName,Map<ServerName,List<RegionInfo>>> loadOfAllTable)
In some scenarios, Balancer needs to update internal status or information according to the
current tables load
|
void |
updateBalancerStatus(boolean status) |
void |
updateClusterMetrics(ClusterMetrics sm)
Set the current cluster status.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitisMasterCanHostUserRegions, isSystemTablesOnlyOnMaster, isTablesOnMasterprivate static final org.slf4j.Logger LOG
private MasterServices masterServices
private volatile RSGroupInfoManager rsGroupInfoManager
private volatile LoadBalancer internalBalancer
public static final String FALLBACK_GROUP_ENABLE_KEY
true to allow region fallback. Fallback to the default rsgroup first,
then fallback to any group if no online servers in default rsgroup. Please keep balancer switch
on at the same time, which is relied on to correct misplaced regionsprivate volatile boolean fallbackEnabled
@InterfaceAudience.Private public RSGroupBasedLoadBalancer()
LoadBalancerFactory.public void updateClusterMetrics(ClusterMetrics sm)
LoadBalancerupdateClusterMetrics in interface LoadBalancerpublic void updateBalancerLoadInfo(Map<TableName,Map<ServerName,List<RegionInfo>>> loadOfAllTable)
LoadBalancerupdateBalancerLoadInfo in interface LoadBalancerloadOfAllTable - region load of servers for all tablepublic void setMasterServices(MasterServices masterServices)
LoadBalancersetMasterServices in interface LoadBalancerpublic void setRsGroupInfoManager(RSGroupInfoManager rsGroupInfoManager)
public List<RegionPlan> balanceCluster(Map<TableName,Map<ServerName,List<RegionInfo>>> loadOfAllTable) throws IOException
balanceCluster in interface LoadBalancerloadOfAllTable - region load of servers for all tableIOException@NonNull public Map<ServerName,List<RegionInfo>> roundRobinAssignment(List<RegionInfo> regions, List<ServerName> servers) throws HBaseIOException
LoadBalancerroundRobinAssignment in interface LoadBalancerHBaseIOException@NonNull public Map<ServerName,List<RegionInfo>> retainAssignment(Map<RegionInfo,ServerName> regions, List<ServerName> servers) throws HBaseIOException
LoadBalancerretainAssignment in interface LoadBalancerHBaseIOExceptionpublic ServerName randomAssignment(RegionInfo region, List<ServerName> servers) throws HBaseIOException
LoadBalancerrandomAssignment in interface LoadBalancerregion - Region for which this selection is being done. nnHBaseIOExceptionprivate List<Pair<List<RegionInfo>,List<ServerName>>> generateGroupAssignments(List<RegionInfo> regions, List<ServerName> servers) throws HBaseIOException
HBaseIOExceptionprivate List<ServerName> filterOfflineServers(RSGroupInfo RSGroupInfo, List<ServerName> onlineServers)
private List<ServerName> filterServers(Set<Address> servers, List<ServerName> onlineServers)
RSGroupInfo), having
its contains()'s time complexity as O(logn), which is good enough.
TODO: consider using HashSet to pursue O(1) for contains() throughout the calling chain if
needed.servers - the serversonlineServers - List of servers which are online.private Pair<Map<TableName,Map<ServerName,List<RegionInfo>>>,List<RegionPlan>> correctAssignments(Map<TableName,Map<ServerName,List<RegionInfo>>> existingAssignments) throws IOException
IOExceptionpublic void initialize() throws HBaseIOException
LoadBalancerinitialize in interface LoadBalancerHBaseIOExceptionpublic boolean isOnline()
public boolean isFallbackEnabled()
public void regionOnline(RegionInfo regionInfo, ServerName sn)
LoadBalancerregionOnline in interface LoadBalancerpublic void regionOffline(RegionInfo regionInfo)
LoadBalancerregionOffline in interface LoadBalancerpublic void onConfigurationChange(org.apache.hadoop.conf.Configuration conf)
ConfigurationObserverConfigurationManager object when the
Configuration object is reloaded from disk.onConfigurationChange in interface ConfigurationObserveronConfigurationChange in interface LoadBalancerpublic void stop(String why)
Stoppablepublic boolean isStopped()
StoppableStoppable.stop(String) has been closed.public void postMasterStartupInitialize()
LoadBalancerpostMasterStartupInitialize in interface LoadBalancerpublic void updateBalancerStatus(boolean status)
updateBalancerStatus in interface LoadBalancerprivate List<ServerName> getFallBackCandidates(List<ServerName> servers)
Copyright © 2007–2020 The Apache Software Foundation. All rights reserved.