org.apache.hadoop.yarn.util.resource
Class DominantResourceCalculator

java.lang.Object
  extended by org.apache.hadoop.yarn.util.resource.ResourceCalculator
      extended by org.apache.hadoop.yarn.util.resource.DominantResourceCalculator

@InterfaceAudience.Private
@InterfaceStability.Unstable
public class DominantResourceCalculator
extends ResourceCalculator

A ResourceCalculator which uses the concept of dominant resource to compare multi-dimensional resources. Essentially the idea is that the in a multi-resource environment, the resource allocation should be determined by the dominant share of an entity (user or queue), which is the maximum share that the entity has been allocated of any resource. In a nutshell, it seeks to maximize the minimum dominant share across all entities. For example, if user A runs CPU-heavy tasks and user B runs memory-heavy tasks, it attempts to equalize CPU share of user A with Memory-share of user B. In the single resource case, it reduces to max-min fairness for that resource. See the Dominant Resource Fairness paper for more details: www.cs.berkeley.edu/~matei/papers/2011/nsdi_drf.pdf


Constructor Summary
DominantResourceCalculator()
           
 
Method Summary
 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)
           
 int 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 given available and required resources.
 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 resource numerator by resource denominator using specified policy (domination, average, fairness etc.); hence overall clusterResource is provided for context.
 org.apache.hadoop.yarn.api.records.Resource divideAndCeil(org.apache.hadoop.yarn.api.records.Resource numerator, int denominator)
          Divide-and-ceil numerator by denominator.
protected  float getResourceAsValue(org.apache.hadoop.yarn.api.records.Resource clusterResource, org.apache.hadoop.yarn.api.records.Resource resource, boolean dominant)
          Use 'dominant' for now since we only have 2 resources - gives us a slight performance boost.
 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)
 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 resource r by factor by and normalize down using step-factor stepFactor.
 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 resource r by factor by and normalize up using step-factor stepFactor.
 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 resource r given the base minimumResource and verify against max allowed maximumResource using a step factor for hte normalization.
 float ratio(org.apache.hadoop.yarn.api.records.Resource a, org.apache.hadoop.yarn.api.records.Resource b)
          Ratio of resource a to resource b.
 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 resource r given factor stepFactor.
 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 resource r given factor stepFactor.
 
Methods inherited from class org.apache.hadoop.yarn.util.resource.ResourceCalculator
divideAndCeil, normalize, roundDown, roundUp
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DominantResourceCalculator

public DominantResourceCalculator()
Method Detail

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)
Specified by:
compare in class ResourceCalculator

getResourceAsValue

protected float getResourceAsValue(org.apache.hadoop.yarn.api.records.Resource clusterResource,
                                   org.apache.hadoop.yarn.api.records.Resource resource,
                                   boolean dominant)
Use 'dominant' for now since we only have 2 resources - gives us a slight performance boost. Once we add more resources, we'll need a more complicated (and slightly less performant algorithm).


computeAvailableContainers

public int computeAvailableContainers(org.apache.hadoop.yarn.api.records.Resource available,
                                      org.apache.hadoop.yarn.api.records.Resource required)
Description copied from class: ResourceCalculator
Compute the number of containers which can be allocated given available and required resources.

Specified by:
computeAvailableContainers in class ResourceCalculator
Parameters:
available - available resources
required - required resources
Returns:
number of containers which can be allocated

divide

public 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)
Description copied from class: ResourceCalculator
Divide resource numerator by resource denominator using specified policy (domination, average, fairness etc.); hence overall clusterResource is provided for context.

Specified by:
divide in class ResourceCalculator
Parameters:
clusterResource - cluster resources
numerator - numerator
denominator - denominator
Returns:
numerator/denominator using specific policy

isInvalidDivisor

public boolean isInvalidDivisor(org.apache.hadoop.yarn.api.records.Resource r)
Description copied from class: ResourceCalculator
Determine if a resource is not suitable for use as a divisor (will result in divide by 0, etc)

Specified by:
isInvalidDivisor in class ResourceCalculator
Parameters:
r - resource
Returns:
true if divisor is invalid (should not be used), false else

ratio

public float ratio(org.apache.hadoop.yarn.api.records.Resource a,
                   org.apache.hadoop.yarn.api.records.Resource b)
Description copied from class: ResourceCalculator
Ratio of resource a to resource b.

Specified by:
ratio in class ResourceCalculator
Parameters:
a - resource
b - resource
Returns:
ratio of resource a to resource b

divideAndCeil

public org.apache.hadoop.yarn.api.records.Resource divideAndCeil(org.apache.hadoop.yarn.api.records.Resource numerator,
                                                                 int denominator)
Description copied from class: ResourceCalculator
Divide-and-ceil numerator by denominator.

Specified by:
divideAndCeil in class ResourceCalculator
Parameters:
numerator - numerator resource
denominator - denominator
Returns:
resultant resource

normalize

public 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)
Description copied from class: ResourceCalculator
Normalize resource r given the base minimumResource and verify against max allowed maximumResource using a step factor for hte normalization.

Specified by:
normalize in class ResourceCalculator
Parameters:
r - resource
minimumResource - minimum value
maximumResource - the upper bound of the resource to be allocated
stepFactor - the increment for resources to be allocated
Returns:
normalized resource

roundUp

public org.apache.hadoop.yarn.api.records.Resource roundUp(org.apache.hadoop.yarn.api.records.Resource r,
                                                           org.apache.hadoop.yarn.api.records.Resource stepFactor)
Description copied from class: ResourceCalculator
Round-up resource r given factor stepFactor.

Specified by:
roundUp in class ResourceCalculator
Parameters:
r - resource
stepFactor - step-factor
Returns:
rounded resource

roundDown

public org.apache.hadoop.yarn.api.records.Resource roundDown(org.apache.hadoop.yarn.api.records.Resource r,
                                                             org.apache.hadoop.yarn.api.records.Resource stepFactor)
Description copied from class: ResourceCalculator
Round-down resource r given factor stepFactor.

Specified by:
roundDown in class ResourceCalculator
Parameters:
r - resource
stepFactor - step-factor
Returns:
rounded resource

multiplyAndNormalizeUp

public 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)
Description copied from class: ResourceCalculator
Multiply resource r by factor by and normalize up using step-factor stepFactor.

Specified by:
multiplyAndNormalizeUp in class ResourceCalculator
Parameters:
r - resource to be multiplied
by - multiplier
stepFactor - factor by which to normalize up
Returns:
resulting normalized resource

multiplyAndNormalizeDown

public 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)
Description copied from class: ResourceCalculator
Multiply resource r by factor by and normalize down using step-factor stepFactor.

Specified by:
multiplyAndNormalizeDown in class ResourceCalculator
Parameters:
r - resource to be multiplied
by - multiplier
stepFactor - factor by which to normalize down
Returns:
resulting normalized resource


Copyright © 2014 Apache Software Foundation. All Rights Reserved.