Class ResourceCalculator
java.lang.Object
org.apache.hadoop.yarn.util.resource.ResourceCalculator
- Direct Known Subclasses:
DefaultResourceCalculator,DominantResourceCalculator
A set of
Resource comparison and manipulation interfaces.-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionintcompare(org.apache.hadoop.yarn.api.records.Resource clusterResource, org.apache.hadoop.yarn.api.records.Resource lhs, org.apache.hadoop.yarn.api.records.Resource rhs) On a cluster with capacityclusterResource, comparelhsandrhsconsidering all resources.abstract intcompare(org.apache.hadoop.yarn.api.records.Resource clusterResource, org.apache.hadoop.yarn.api.records.Resource lhs, org.apache.hadoop.yarn.api.records.Resource rhs, boolean singleType) On a cluster with capacityclusterResource, comparelhsandrhs.abstract longcomputeAvailableContainers(org.apache.hadoop.yarn.api.records.Resource available, org.apache.hadoop.yarn.api.records.Resource required) Compute the number of containers which can be allocated givenavailableandrequiredresources.abstract floatdivide(org.apache.hadoop.yarn.api.records.Resource clusterResource, org.apache.hadoop.yarn.api.records.Resource numerator, org.apache.hadoop.yarn.api.records.Resource denominator) Divide resourcenumeratorby resourcedenominatorusing specified policy (domination, average, fairness etc.); hence overallclusterResourceis provided for context.static intdivideAndCeil(int a, float b) static intdivideAndCeil(int a, int b) static longdivideAndCeil(long a, float b) static longdivideAndCeil(long a, long b) abstract org.apache.hadoop.yarn.api.records.ResourcedivideAndCeil(org.apache.hadoop.yarn.api.records.Resource numerator, float denominator) Divide-and-ceilnumeratorbydenominator.abstract org.apache.hadoop.yarn.api.records.ResourcedivideAndCeil(org.apache.hadoop.yarn.api.records.Resource numerator, int denominator) Divide-and-ceilnumeratorbydenominator.static floatdivideSafelyAsFloat(long lhs, long rhs) Divides lhs by rhs.abstract booleanfitsIn(org.apache.hadoop.yarn.api.records.Resource smaller, org.apache.hadoop.yarn.api.records.Resource bigger) Check if a smaller resource can be contained by bigger resource.getInsufficientResourceNames(org.apache.hadoop.yarn.api.records.Resource required, org.apache.hadoop.yarn.api.records.Resource available) Get insufficient resource names via comparing required resource and capacity resource.abstract booleanisAllInvalidDivisor(org.apache.hadoop.yarn.api.records.Resource r) Determine if all resources are zero.abstract booleanisAnyMajorResourceAboveZero(org.apache.hadoop.yarn.api.records.Resource resource) Check if resource has any major resource types (which are all NodeManagers included) has a > 0 value.abstract booleanisAnyMajorResourceZeroOrNegative(org.apache.hadoop.yarn.api.records.Resource resource) Check if resource has any major resource types (which are all NodeManagers included) a zero value or negative value.abstract booleanisInvalidDivisor(org.apache.hadoop.yarn.api.records.Resource r) Determine if a resource is not suitable for use as a divisor (will result in divide by 0, etc)abstract org.apache.hadoop.yarn.api.records.ResourcemultiplyAndNormalizeDown(org.apache.hadoop.yarn.api.records.Resource r, double by, org.apache.hadoop.yarn.api.records.Resource stepFactor) Multiply resourcerby factorbyand normalize down using step-factorstepFactor.abstract org.apache.hadoop.yarn.api.records.ResourcemultiplyAndNormalizeUp(org.apache.hadoop.yarn.api.records.Resource r, double[] by, org.apache.hadoop.yarn.api.records.Resource stepFactor) Multiply resourcerby factorbyand normalize up using step-factorstepFactor.abstract org.apache.hadoop.yarn.api.records.ResourcemultiplyAndNormalizeUp(org.apache.hadoop.yarn.api.records.Resource r, double by, org.apache.hadoop.yarn.api.records.Resource stepFactor) Multiply resourcerby factorbyand normalize up using step-factorstepFactor.abstract org.apache.hadoop.yarn.api.records.Resourcenormalize(org.apache.hadoop.yarn.api.records.Resource r, org.apache.hadoop.yarn.api.records.Resource minimumResource, org.apache.hadoop.yarn.api.records.Resource maximumResource, org.apache.hadoop.yarn.api.records.Resource stepFactor) Normalize resourcergiven the baseminimumResourceand verify against max allowedmaximumResourceusing a step factor for the normalization.abstract org.apache.hadoop.yarn.api.records.ResourcenormalizeDown(org.apache.hadoop.yarn.api.records.Resource r, org.apache.hadoop.yarn.api.records.Resource stepFactor) Get resourcerand normalize down using step-factorstepFactor.abstract floatratio(org.apache.hadoop.yarn.api.records.Resource a, org.apache.hadoop.yarn.api.records.Resource b) Ratio of resourceato resourceb.static introundDown(int a, int b) static longroundDown(long a, long b) abstract org.apache.hadoop.yarn.api.records.ResourceroundDown(org.apache.hadoop.yarn.api.records.Resource r, org.apache.hadoop.yarn.api.records.Resource stepFactor) Round-down resourcergiven factorstepFactor.static introundUp(int a, int b) static longroundUp(long a, long b) abstract org.apache.hadoop.yarn.api.records.ResourceroundUp(org.apache.hadoop.yarn.api.records.Resource r, org.apache.hadoop.yarn.api.records.Resource stepFactor) Round-up resourcergiven factorstepFactor.
-
Constructor Details
-
ResourceCalculator
public ResourceCalculator()
-
-
Method Details
-
compare
public abstract int compare(org.apache.hadoop.yarn.api.records.Resource clusterResource, org.apache.hadoop.yarn.api.records.Resource lhs, org.apache.hadoop.yarn.api.records.Resource rhs, boolean singleType) On a cluster with capacityclusterResource, comparelhsandrhs. Consider all resources unlesssingleTypeis set to true. WhensingleTypeis set to true, consider only one resource as per theResourceCalculatorimplementation; theDefaultResourceCalculatorconsiders memory andDominantResourceCalculatorconsiders the dominant resource.- Parameters:
clusterResource- cluster capacitylhs- FirstResourceto comparerhs- SecondResourceto comparesingleType- Whether to consider a single resource type or all resource types- Returns:
- -1 if
lhsis smaller, 0 if equal and 1 if it is larger
-
compare
public int compare(org.apache.hadoop.yarn.api.records.Resource clusterResource, org.apache.hadoop.yarn.api.records.Resource lhs, org.apache.hadoop.yarn.api.records.Resource rhs) On a cluster with capacityclusterResource, comparelhsandrhsconsidering all resources.- Parameters:
clusterResource- cluster capacitylhs- FirstResourceto comparerhs- SecondResourceto compare- Returns:
- -1 if
lhsis smaller, 0 if equal and 1 if it is larger
-
divideAndCeil
public static int divideAndCeil(int a, int b) -
divideAndCeil
public static int divideAndCeil(int a, float b) -
divideAndCeil
public static long divideAndCeil(long a, long b) -
divideAndCeil
public static long divideAndCeil(long a, float b) -
divideSafelyAsFloat
public static float divideSafelyAsFloat(long lhs, long rhs) Divides lhs by rhs.- Parameters:
lhs- left number.rhs- right number.- Returns:
- If both lhs and rhs are having a value of 0, then we return 0. This is to avoid division by zero and return NaN as a result. If lhs is zero but rhs is not, Float.infinity will be returned as the result.
-
roundUp
public static int roundUp(int a, int b) -
roundUp
public static long roundUp(long a, long b) -
roundDown
public static long roundDown(long a, long b) -
roundDown
public static int roundDown(int a, int b) -
computeAvailableContainers
public abstract long computeAvailableContainers(org.apache.hadoop.yarn.api.records.Resource available, org.apache.hadoop.yarn.api.records.Resource required) Compute the number of containers which can be allocated givenavailableandrequiredresources.- Parameters:
available- available resourcesrequired- required resources- Returns:
- number of containers which can be allocated
-
multiplyAndNormalizeUp
public abstract org.apache.hadoop.yarn.api.records.Resource multiplyAndNormalizeUp(org.apache.hadoop.yarn.api.records.Resource r, double by, org.apache.hadoop.yarn.api.records.Resource stepFactor) Multiply resourcerby factorbyand normalize up using step-factorstepFactor.- Parameters:
r- resource to be multipliedby- multiplierstepFactor- factor by which to normalize up- Returns:
- resulting normalized resource
-
multiplyAndNormalizeUp
public abstract org.apache.hadoop.yarn.api.records.Resource multiplyAndNormalizeUp(org.apache.hadoop.yarn.api.records.Resource r, double[] by, org.apache.hadoop.yarn.api.records.Resource stepFactor) Multiply resourcerby factorbyand normalize up using step-factorstepFactor.- Parameters:
r- resource to be multipliedby- multiplier array for all resource typesstepFactor- factor by which to normalize up- Returns:
- resulting normalized resource
-
multiplyAndNormalizeDown
public abstract org.apache.hadoop.yarn.api.records.Resource multiplyAndNormalizeDown(org.apache.hadoop.yarn.api.records.Resource r, double by, org.apache.hadoop.yarn.api.records.Resource stepFactor) Multiply resourcerby factorbyand normalize down using step-factorstepFactor.- Parameters:
r- resource to be multipliedby- multiplierstepFactor- factor by which to normalize down- Returns:
- resulting normalized resource
-
normalize
public abstract org.apache.hadoop.yarn.api.records.Resource normalize(org.apache.hadoop.yarn.api.records.Resource r, org.apache.hadoop.yarn.api.records.Resource minimumResource, org.apache.hadoop.yarn.api.records.Resource maximumResource, org.apache.hadoop.yarn.api.records.Resource stepFactor) Normalize resourcergiven the baseminimumResourceand verify against max allowedmaximumResourceusing a step factor for the normalization.- Parameters:
r- resourceminimumResource- minimum valuemaximumResource- the upper bound of the resource to be allocatedstepFactor- the increment for resources to be allocated- Returns:
- normalized resource
-
roundUp
public abstract org.apache.hadoop.yarn.api.records.Resource roundUp(org.apache.hadoop.yarn.api.records.Resource r, org.apache.hadoop.yarn.api.records.Resource stepFactor) Round-up resourcergiven factorstepFactor.- Parameters:
r- resourcestepFactor- step-factor- Returns:
- rounded resource
-
roundDown
public abstract org.apache.hadoop.yarn.api.records.Resource roundDown(org.apache.hadoop.yarn.api.records.Resource r, org.apache.hadoop.yarn.api.records.Resource stepFactor) Round-down resourcergiven factorstepFactor.- Parameters:
r- resourcestepFactor- step-factor- Returns:
- rounded resource
-
divide
public abstract float divide(org.apache.hadoop.yarn.api.records.Resource clusterResource, org.apache.hadoop.yarn.api.records.Resource numerator, org.apache.hadoop.yarn.api.records.Resource denominator) Divide resourcenumeratorby resourcedenominatorusing specified policy (domination, average, fairness etc.); hence overallclusterResourceis provided for context.- Parameters:
clusterResource- cluster resourcesnumerator- numeratordenominator- denominator- Returns:
numerator/denominatorusing specific policy
-
isInvalidDivisor
public abstract boolean isInvalidDivisor(org.apache.hadoop.yarn.api.records.Resource r) Determine if a resource is not suitable for use as a divisor (will result in divide by 0, etc)- Parameters:
r- resource- Returns:
- true if divisor is invalid (should not be used), false else
-
isAllInvalidDivisor
public abstract boolean isAllInvalidDivisor(org.apache.hadoop.yarn.api.records.Resource r) Determine if all resources are zero.- Parameters:
r- resource- Returns:
- true if all divisors are invalid (should not be used), false else
-
ratio
public abstract float ratio(org.apache.hadoop.yarn.api.records.Resource a, org.apache.hadoop.yarn.api.records.Resource b) Ratio of resourceato resourceb.- Parameters:
a- resourceb- resource- Returns:
- ratio of resource
ato resourceb
-
divideAndCeil
public abstract org.apache.hadoop.yarn.api.records.Resource divideAndCeil(org.apache.hadoop.yarn.api.records.Resource numerator, int denominator) Divide-and-ceilnumeratorbydenominator.- Parameters:
numerator- numerator resourcedenominator- denominator- Returns:
- resultant resource
-
divideAndCeil
public abstract org.apache.hadoop.yarn.api.records.Resource divideAndCeil(org.apache.hadoop.yarn.api.records.Resource numerator, float denominator) Divide-and-ceilnumeratorbydenominator.- Parameters:
numerator- numerator resourcedenominator- denominator- Returns:
- resultant resource
-
fitsIn
public abstract boolean fitsIn(org.apache.hadoop.yarn.api.records.Resource smaller, org.apache.hadoop.yarn.api.records.Resource bigger) Check if a smaller resource can be contained by bigger resource.- Parameters:
smaller- smaller resource.bigger- bigger resource.- Returns:
- if true, smaller resource can be contained by bigger resource; false otherwise.
-
isAnyMajorResourceZeroOrNegative
public abstract boolean isAnyMajorResourceZeroOrNegative(org.apache.hadoop.yarn.api.records.Resource resource) Check if resource has any major resource types (which are all NodeManagers included) a zero value or negative value.- Parameters:
resource- resource- Returns:
- returns true if any resource is zero.
-
normalizeDown
public abstract org.apache.hadoop.yarn.api.records.Resource normalizeDown(org.apache.hadoop.yarn.api.records.Resource r, org.apache.hadoop.yarn.api.records.Resource stepFactor) Get resourcerand normalize down using step-factorstepFactor.- Parameters:
r- resource to be multipliedstepFactor- factor by which to normalize down- Returns:
- resulting normalized resource
-
isAnyMajorResourceAboveZero
public abstract boolean isAnyMajorResourceAboveZero(org.apache.hadoop.yarn.api.records.Resource resource) Check if resource has any major resource types (which are all NodeManagers included) has a > 0 value.- Parameters:
resource- resource- Returns:
- returns true if any resource is > 0
-
getInsufficientResourceNames
public abstract Set<String> getInsufficientResourceNames(org.apache.hadoop.yarn.api.records.Resource required, org.apache.hadoop.yarn.api.records.Resource available) Get insufficient resource names via comparing required resource and capacity resource.- Parameters:
required- - required resourceavailable- - available resource- Returns:
- insufficient resource names
-