@InterfaceAudience.Private public class FavoredStochasticBalancer extends StochasticLoadBalancer implements FavoredNodesPromoter
LoadBalancer that
assigns favored nodes for each region. There is a Primary RegionServer that hosts
the region, and then there is Secondary and Tertiary RegionServers. Currently, the
favored nodes information is used in creating HDFS files - the Primary RegionServer
passes the primary, secondary, tertiary node addresses as hints to the
DistributedFileSystem API for creating files on the filesystem. These nodes are
treated as hints by the HDFS to place the blocks of the file. This alleviates the
problem to do with reading from remote nodes (since we can make the Secondary
RegionServer as the new Primary RegionServer) after a region is recovered. This
should help provide consistent read latencies for the regions even when their
primary region servers die. This provides two
StochasticLoadBalancer.CandidateGenerator| Modifier and Type | Class and Description |
|---|---|
(package private) class |
FavoredStochasticBalancer.FavoredNodeLoadPicker |
private class |
FavoredStochasticBalancer.FavoredNodeLocalityPicker |
StochasticLoadBalancer.CandidateGenerator, StochasticLoadBalancer.CostFromRegionLoadAsRateFunction, StochasticLoadBalancer.CostFromRegionLoadFunction, StochasticLoadBalancer.CostFunction, StochasticLoadBalancer.LoadCandidateGenerator, StochasticLoadBalancer.LocalityBasedCandidateGenerator, StochasticLoadBalancer.LocalityBasedCostFunction, StochasticLoadBalancer.MemStoreSizeCostFunction, StochasticLoadBalancer.MoveCostFunction, StochasticLoadBalancer.PrimaryRegionCountSkewCostFunction, StochasticLoadBalancer.RackLocalityCostFunction, StochasticLoadBalancer.RandomCandidateGenerator, StochasticLoadBalancer.ReadRequestCostFunction, StochasticLoadBalancer.RegionCountSkewCostFunction, StochasticLoadBalancer.RegionReplicaCandidateGenerator, StochasticLoadBalancer.RegionReplicaHostCostFunction, StochasticLoadBalancer.RegionReplicaRackCandidateGenerator, StochasticLoadBalancer.RegionReplicaRackCostFunction, StochasticLoadBalancer.ServerLocalityCostFunction, StochasticLoadBalancer.StoreFileCostFunction, StochasticLoadBalancer.TableSkewCostFunction, StochasticLoadBalancer.WriteRequestCostFunctionBaseLoadBalancer.Cluster| Modifier and Type | Field and Description |
|---|---|
private FavoredNodesManager |
fnm |
private static org.slf4j.Logger |
LOG |
KEEP_REGION_LOADS, loads, MAX_RUNNING_TIME_KEY, MAX_STEPS_KEY, MIN_COST_NEED_BALANCE_KEY, RANDOM, RUN_MAX_STEPS_KEY, STEPS_PER_REGION_KEYclusterStatus, config, IDLE_SERVER_PREDICATOR, maintenanceMode, masterServerName, metricsBalancer, MIN_SERVER_BALANCE, onlySystemTablesOnMaster, overallSlop, rackManager, regionFinder, services, slop, useRegionFinderFAVORED_ALWAYS_ASSIGN_REGIONSBOGUS_SERVER_NAME, SYSTEM_TABLES_ON_MASTER, TABLES_ON_MASTER| Constructor and Description |
|---|
FavoredStochasticBalancer() |
| Modifier and Type | Method and Description |
|---|---|
private void |
addRegionToMap(Map<ServerName,List<RegionInfo>> assignmentMapForFavoredNodes,
RegionInfo region,
ServerName host) |
private void |
assignRegionToAvailableFavoredNode(Map<ServerName,List<RegionInfo>> assignmentMapForFavoredNodes,
RegionInfo region,
ServerName primaryHost,
ServerName secondaryHost,
ServerName tertiaryHost) |
List<RegionPlan> |
balanceCluster(Map<ServerName,List<RegionInfo>> clusterState)
Given the cluster state this will try and approach an optimal balance.
|
protected void |
configureGenerators() |
void |
generateFavoredNodesForDaughter(List<ServerName> servers,
RegionInfo parent,
RegionInfo regionA,
RegionInfo regionB) |
void |
generateFavoredNodesForMergedRegion(RegionInfo merged,
RegionInfo[] mergeParents) |
private Map<ServerName,List<RegionInfo>> |
generateFNForRegionsWithoutFN(FavoredNodeAssignmentHelper helper,
List<RegionInfo> regions) |
List<ServerName> |
getFavoredNodes(RegionInfo regionInfo) |
private Set<ServerName> |
getInheritedFNForDaughter(FavoredNodeAssignmentHelper helper,
List<ServerName> parentFavoredNodes,
FavoredNodesPlan.Position primary,
FavoredNodesPlan.Position secondary) |
private List<ServerName> |
getOnlineFavoredNodes(List<ServerName> onlineServers,
List<ServerName> serversWithoutStartCodes) |
private ServerName |
getServerFromFavoredNode(List<ServerName> servers,
ServerName fn) |
void |
initialize()
Initialize the load balancer.
|
private void |
mergeAssignmentMaps(Map<ServerName,List<RegionInfo>> assignmentMap,
Map<ServerName,List<RegionInfo>> otherAssignments) |
ServerName |
randomAssignment(RegionInfo regionInfo,
List<ServerName> servers)
Used to assign a single region to a random server.
|
Map<ServerName,List<RegionInfo>> |
retainAssignment(Map<RegionInfo,ServerName> regions,
List<ServerName> servers)
Generates a bulk assignment startup plan, attempting to reuse the existing
assignment information from META, but adjusting for the specified list of
available/online servers available for assignment.
|
Map<ServerName,List<RegionInfo>> |
roundRobinAssignment(List<RegionInfo> regions,
List<ServerName> servers)
Generates a bulk assignment plan to be used on cluster startup using a
simple round-robin assignment.
|
private Pair<Map<ServerName,List<RegionInfo>>,List<RegionInfo>> |
segregateRegionsAndAssignRegionsWithFavoredNodes(Collection<RegionInfo> regions,
List<ServerName> onlineServers) |
void |
setMasterServices(MasterServices masterServices)
Set the master service.
|
private void |
updateFavoredNodesForRegion(RegionInfo regionInfo,
List<ServerName> newFavoredNodes) |
areSomeRegionReplicasColocated, balanceCluster, composeAttributeName, computeCost, getCostFunctionNames, initCosts, needsBalance, nextAction, onConfigurationChange, setCandidateGenerators, setClusterMetrics, setConf, setSlop, updateCostsWithAction, updateMetricsSizeassignMasterSystemRegions, balanceMasterRegions, createCluster, getConf, getRegionAssignmentsByServer, isStopped, postMasterStartupInitialize, regionOffline, regionOnline, setClusterLoad, setRackManager, shouldBeOnMaster, stop, updateBalancerStatusclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitisMasterCanHostUserRegions, isSystemTablesOnlyOnMaster, isTablesOnMasterprivate static final org.slf4j.Logger LOG
private FavoredNodesManager fnm
public FavoredStochasticBalancer()
public void initialize() throws HBaseIOException
LoadBalancerinitialize in interface LoadBalancerinitialize in class BaseLoadBalancerHBaseIOExceptionprotected void configureGenerators()
public void setMasterServices(MasterServices masterServices)
LoadBalancersetMasterServices in interface LoadBalancersetMasterServices in class StochasticLoadBalancerpublic Map<ServerName,List<RegionInfo>> roundRobinAssignment(List<RegionInfo> regions, List<ServerName> servers) throws HBaseIOException
BaseLoadBalancerTakes a list of all the regions and all the servers in the cluster and returns a map of each server to the regions that it should be assigned.
Currently implemented as a round-robin assignment. Same invariant as load balancing, all servers holding floor(avg) or ceiling(avg). TODO: Use block locations from HDFS to place regions with their blocks
roundRobinAssignment in interface LoadBalancerroundRobinAssignment in class BaseLoadBalancerregions - all regionsservers - all serversHBaseIOExceptionprivate void mergeAssignmentMaps(Map<ServerName,List<RegionInfo>> assignmentMap, Map<ServerName,List<RegionInfo>> otherAssignments)
private Map<ServerName,List<RegionInfo>> generateFNForRegionsWithoutFN(FavoredNodeAssignmentHelper helper, List<RegionInfo> regions) throws IOException
IOExceptionprivate Pair<Map<ServerName,List<RegionInfo>>,List<RegionInfo>> segregateRegionsAndAssignRegionsWithFavoredNodes(Collection<RegionInfo> regions, List<ServerName> onlineServers) throws HBaseIOException
HBaseIOExceptionprivate void addRegionToMap(Map<ServerName,List<RegionInfo>> assignmentMapForFavoredNodes, RegionInfo region, ServerName host)
private ServerName getServerFromFavoredNode(List<ServerName> servers, ServerName fn)
private void assignRegionToAvailableFavoredNode(Map<ServerName,List<RegionInfo>> assignmentMapForFavoredNodes, RegionInfo region, ServerName primaryHost, ServerName secondaryHost, ServerName tertiaryHost)
public ServerName randomAssignment(RegionInfo regionInfo, List<ServerName> servers) throws HBaseIOException
BaseLoadBalancerrandomAssignment in interface LoadBalancerrandomAssignment in class BaseLoadBalancerregionInfo - Region for which this selection is being done.HBaseIOExceptionprivate void updateFavoredNodesForRegion(RegionInfo regionInfo, List<ServerName> newFavoredNodes) throws IOException
IOExceptionpublic Map<ServerName,List<RegionInfo>> retainAssignment(Map<RegionInfo,ServerName> regions, List<ServerName> servers) throws HBaseIOException
BaseLoadBalancerTakes a map of all regions to their existing assignment from META. Also takes a list of online servers for regions to be assigned to. Attempts to retain all assignment, so in some instances initial assignment will not be completely balanced.
Any leftover regions without an existing server to be assigned to will be assigned randomly to available servers.
retainAssignment in interface LoadBalancerretainAssignment in class BaseLoadBalancerregions - regions and existing assignment from metaservers - available serversHBaseIOExceptionprivate List<ServerName> getOnlineFavoredNodes(List<ServerName> onlineServers, List<ServerName> serversWithoutStartCodes)
public List<ServerName> getFavoredNodes(RegionInfo regionInfo)
public void generateFavoredNodesForDaughter(List<ServerName> servers, RegionInfo parent, RegionInfo regionA, RegionInfo regionB) throws IOException
generateFavoredNodesForDaughter in interface FavoredNodesPromoterIOExceptionprivate Set<ServerName> getInheritedFNForDaughter(FavoredNodeAssignmentHelper helper, List<ServerName> parentFavoredNodes, FavoredNodesPlan.Position primary, FavoredNodesPlan.Position secondary) throws IOException
IOExceptionpublic void generateFavoredNodesForMergedRegion(RegionInfo merged, RegionInfo[] mergeParents) throws IOException
generateFavoredNodesForMergedRegion in interface FavoredNodesPromoterIOExceptionpublic List<RegionPlan> balanceCluster(Map<ServerName,List<RegionInfo>> clusterState)
StochasticLoadBalancerbalanceCluster in interface LoadBalancerbalanceCluster in class StochasticLoadBalancerCopyright © 2007–2020 The Apache Software Foundation. All rights reserved.