diff --git a/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml b/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml
index b3e04fca060..c1292032790 100644
--- a/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml
+++ b/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml
@@ -153,6 +153,10 @@
+
+
+
+
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java
index a25c8acd618..10755b404fb 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java
@@ -19,7 +19,9 @@
package org.apache.hadoop.yarn.api.records;
import org.apache.commons.lang.NotImplementedException;
+import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceAudience.Public;
+import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.classification.InterfaceStability.Evolving;
import org.apache.hadoop.classification.InterfaceStability.Stable;
import org.apache.hadoop.yarn.api.ApplicationMasterProtocol;
@@ -101,6 +103,18 @@ public abstract class Resource implements Comparable {
return new SimpleResource(memory, vCores);
}
+ @InterfaceAudience.Private
+ @InterfaceStability.Unstable
+ public static Resource newInstance(Resource resource) {
+ Resource ret = Resource.newInstance(0, 0);
+ for (Map.Entry entry : resource.getResources()
+ .entrySet()) {
+ ret.setResourceInformation(entry.getKey(),
+ ResourceInformation.newInstance(entry.getValue()));
+ }
+ return ret;
+ }
+
/**
* This method is DEPRECATED:
* Use {@link Resource#getMemorySize()} instead
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ResourceInformation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ResourceInformation.java
index a17e81b5348..7d74efc4977 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ResourceInformation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ResourceInformation.java
@@ -31,6 +31,8 @@ public class ResourceInformation implements Comparable {
private String units;
private ResourceTypes resourceType;
private Long value;
+ private Long minimumAllocation;
+ private Long maximumAllocation;
private static final String MEMORY_URI = "memory-mb";
private static final String VCORES_URI = "vcores";
@@ -117,6 +119,42 @@ public class ResourceInformation implements Comparable {
this.value = rValue;
}
+ /**
+ * Get the minimum allocation for the resource.
+ *
+ * @return the minimum allocation for the resource
+ */
+ public Long getMinimumAllocation() {
+ return minimumAllocation;
+ }
+
+ /**
+ * Set the minimum allocation for the resource.
+ *
+ * @param minimumAllocation the minimum allocation for the resource
+ */
+ public void setMinimumAllocation(Long minimumAllocation) {
+ this.minimumAllocation = minimumAllocation;
+ }
+
+ /**
+ * Get the maximum allocation for the resource.
+ *
+ * @return the maximum allocation for the resource
+ */
+ public Long getMaximumAllocation() {
+ return maximumAllocation;
+ }
+
+ /**
+ * Set the maximum allocation for the resource.
+ *
+ * @param maximumAllocation the maximum allocation for the resource
+ */
+ public void setMaximumAllocation(Long maximumAllocation) {
+ this.maximumAllocation = maximumAllocation;
+ }
+
/**
* Create a new instance of ResourceInformation from another object.
*
@@ -129,33 +167,41 @@ public class ResourceInformation implements Comparable {
ret.setResourceType(other.getResourceType());
ret.setUnits(other.getUnits());
ret.setValue(other.getValue());
+ ret.setMinimumAllocation(other.getMinimumAllocation());
+ ret.setMaximumAllocation(other.getMaximumAllocation());
return ret;
}
public static ResourceInformation newInstance(String name, String units,
- Long value, ResourceTypes type) {
+ Long value, ResourceTypes type, Long minimumAllocation,
+ Long maximumAllocation) {
ResourceInformation ret = new ResourceInformation();
ret.setName(name);
ret.setResourceType(type);
ret.setUnits(units);
ret.setValue(value);
+ ret.setMinimumAllocation(minimumAllocation);
+ ret.setMaximumAllocation(maximumAllocation);
return ret;
}
public static ResourceInformation newInstance(String name, String units,
Long value) {
return ResourceInformation
- .newInstance(name, units, value, ResourceTypes.COUNTABLE);
+ .newInstance(name, units, value, ResourceTypes.COUNTABLE, 0L,
+ Long.MAX_VALUE);
}
public static ResourceInformation newInstance(String name, String units) {
return ResourceInformation
- .newInstance(name, units, 0L, ResourceTypes.COUNTABLE);
+ .newInstance(name, units, 0L, ResourceTypes.COUNTABLE, 0L,
+ Long.MAX_VALUE);
}
public static ResourceInformation newInstance(String name, Long value) {
return ResourceInformation
- .newInstance(name, "", value, ResourceTypes.COUNTABLE);
+ .newInstance(name, "", value, ResourceTypes.COUNTABLE, 0L,
+ Long.MAX_VALUE);
}
public static ResourceInformation newInstance(String name) {
@@ -165,7 +211,8 @@ public class ResourceInformation implements Comparable {
@Override
public String toString() {
return "name: " + this.name + ", units: " + this.units + ", type: "
- + resourceType + ", value: " + value;
+ + resourceType + ", value: " + value + ", minimum allocation: "
+ + minimumAllocation + ", maximum allocation: " + maximumAllocation;
}
public String getShorthandRepresentation() {
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java
index 8217e34ba52..de9877b85ae 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java
@@ -150,12 +150,7 @@ public class AMRMClientImpl extends AMRMClient {
}
static boolean canFit(Resource arg0, Resource arg1) {
- long mem0 = arg0.getMemorySize();
- long mem1 = arg1.getMemorySize();
- long cpu0 = arg0.getVirtualCores();
- long cpu1 = arg1.getVirtualCores();
-
- return (mem0 <= mem1 && cpu0 <= cpu1);
+ return Resources.fitsIn(arg0, arg1);
}
private final Map> remoteRequests =
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java
index 472e645b315..48d3178c562 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java
@@ -144,8 +144,8 @@ public class ResourcePBImpl extends Resource {
ResourceTypes.COUNTABLE;
String units = entry.hasUnits() ? entry.getUnits() : "";
Long value = entry.hasValue() ? entry.getValue() : 0L;
- ResourceInformation ri =
- ResourceInformation.newInstance(entry.getKey(), units, value, type);
+ ResourceInformation ri = ResourceInformation
+ .newInstance(entry.getKey(), units, value, type, 0L, Long.MAX_VALUE);
if (resources.containsKey(ri.getName())) {
resources.get(ri.getName()).setResourceType(ri.getResourceType());
resources.get(ri.getName()).setUnits(ri.getUnits());
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java
index 938e462d709..86cf872b160 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java
@@ -26,6 +26,7 @@ import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.yarn.api.protocolrecords.ResourceTypes;
+import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.api.records.ResourceInformation;
import org.apache.hadoop.yarn.conf.ConfigurationProvider;
import org.apache.hadoop.yarn.conf.ConfigurationProviderFactory;
@@ -51,6 +52,8 @@ public class ResourceUtils {
public static final String UNITS = ".units";
public static final String TYPE = ".type";
+ public static final String MINIMUM_ALLOCATION = ".minimum-allocation";
+ public static final String MAXIMUM_ALLOCATION = ".maximum-allocation";
private static final String MEMORY = ResourceInformation.MEMORY_MB.getName();
private static final String VCORES = ResourceInformation.VCORES.getName();
@@ -122,6 +125,86 @@ public class ResourceUtils {
}
}
+ private static void setMinimumAllocationForMandatoryResources(
+ Map res, Configuration conf) {
+ String[][] resourceTypesKeys =
+ {
+ { ResourceInformation.MEMORY_MB.getName(),
+ YarnConfiguration.RM_SCHEDULER_MINIMUM_ALLOCATION_MB,
+ String.valueOf(
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB),
+ ResourceInformation.MEMORY_MB.getName()
+ },
+ { ResourceInformation.VCORES.getName(),
+ YarnConfiguration.RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES,
+ String.valueOf(
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES),
+ ResourceInformation.VCORES.getName()
+ }
+ };
+ for (String[] arr : resourceTypesKeys) {
+ String resourceTypesKey =
+ YarnConfiguration.RESOURCE_TYPES + "." + arr[0] + MINIMUM_ALLOCATION;
+ long minimumResourceTypes = conf.getLong(resourceTypesKey, -1);
+ long minimumConf = conf.getLong(arr[1], -1);
+ long minimum;
+ if (minimumResourceTypes != -1) {
+ minimum = minimumResourceTypes;
+ if (minimumConf != -1) {
+ LOG.warn("Using minimum allocation for memory specified in "
+ + "resource-types config file with key "
+ + minimumResourceTypes + ", ignoring minimum specified using "
+ + arr[1]);
+ }
+ } else {
+ minimum = conf.getLong(arr[1], Long.parseLong(arr[2]));
+ }
+ ResourceInformation ri = res.get(arr[3]);
+ ri.setMinimumAllocation(minimum);
+ }
+ }
+
+ private static void setMaximumAllocationForMandatoryResources(
+ Map res, Configuration conf) {
+ String[][] resourceTypesKeys =
+ {
+ {
+ ResourceInformation.MEMORY_MB.getName(),
+ YarnConfiguration.RM_SCHEDULER_MAXIMUM_ALLOCATION_MB,
+ String.valueOf(
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB),
+ ResourceInformation.MEMORY_MB.getName()
+ },
+ {
+ ResourceInformation.VCORES.getName(),
+ YarnConfiguration.RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES,
+ String.valueOf(
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES),
+ ResourceInformation.VCORES.getName()
+ }
+ };
+ for (String[] arr : resourceTypesKeys) {
+ String resourceTypesKey =
+ YarnConfiguration.RESOURCE_TYPES + "." + arr[0] + MAXIMUM_ALLOCATION;
+ long maximumResourceTypes = conf.getLong(resourceTypesKey, -1);
+ long maximumConf = conf.getLong(arr[1], -1);
+ long maximum;
+ if (maximumResourceTypes != -1) {
+ maximum = maximumResourceTypes;
+ if (maximumConf != -1) {
+ LOG.warn("Using maximum allocation for memory specified in "
+ + "resource-types config file with key "
+ + maximumResourceTypes + ", ignoring maximum specified using "
+ + arr[1]);
+ }
+ } else {
+ maximum = conf.getLong(arr[1], Long.parseLong(arr[2]));
+ }
+ ResourceInformation ri = res.get(arr[3]);
+ ri.setMaximumAllocation(maximum);
+ }
+ }
+
@VisibleForTesting
static void initializeResourcesMap(Configuration conf,
Map resourceInformationMap) {
@@ -135,6 +218,12 @@ public class ResourceUtils {
String resourceTypeName = conf.get(
YarnConfiguration.RESOURCE_TYPES + "." + resourceName + TYPE,
ResourceTypes.COUNTABLE.toString());
+ Long minimumAllocation = conf.getLong(
+ YarnConfiguration.RESOURCE_TYPES + "." + resourceName
+ + MINIMUM_ALLOCATION, 0L);
+ Long maximumAllocation = conf.getLong(
+ YarnConfiguration.RESOURCE_TYPES + "." + resourceName
+ + MAXIMUM_ALLOCATION, Long.MAX_VALUE);
if (resourceName == null || resourceName.isEmpty()
|| resourceUnits == null || resourceTypeName == null) {
throw new YarnRuntimeException(
@@ -154,11 +243,14 @@ public class ResourceUtils {
"Error in config, key '" + resourceName + "' specified twice");
}
resourceInformationMap.put(resourceName, ResourceInformation
- .newInstance(resourceName, resourceUnits, 0L, resourceType));
+ .newInstance(resourceName, resourceUnits, 0L, resourceType,
+ minimumAllocation, maximumAllocation));
}
}
checkMandatatoryResources(resourceInformationMap);
addManadtoryResources(resourceInformationMap);
+ setMinimumAllocationForMandatoryResources(resourceInformationMap, conf);
+ setMaximumAllocationForMandatoryResources(resourceInformationMap, conf);
readOnlyResources = Collections.unmodifiableMap(resourceInformationMap);
}
@@ -172,6 +264,12 @@ public class ResourceUtils {
YarnConfiguration.RESOURCE_TYPES_CONFIGURATION_FILE);
}
+ private static Map getResourceTypes(
+ Configuration conf) {
+ return getResourceTypes(conf,
+ YarnConfiguration.RESOURCE_TYPES_CONFIGURATION_FILE);
+ }
+
private static Map getResourceTypes(
Configuration conf, String resourceFile) {
if (lock == null) {
@@ -205,6 +303,12 @@ public class ResourceUtils {
ConfigurationProvider provider =
ConfigurationProviderFactory.getConfigurationProvider(conf);
+ try {
+ provider.init(conf);
+ } catch (Exception e) {
+ throw new IOException(e);
+ }
+
InputStream ris = provider.getConfigurationInputStream(conf, resourceFile);
if (ris == null) {
if (conf.getResource(resourceFile) == null) {
@@ -241,6 +345,12 @@ public class ResourceUtils {
lock = null;
}
+ @VisibleForTesting
+ public static void resetResourceTypes(Configuration conf) {
+ lock = null;
+ getResourceTypes(conf);
+ }
+
public static String getUnits(String resourceValue) {
String units;
for (int i = 0; i < resourceValue.length(); i++) {
@@ -326,4 +436,53 @@ public class ResourceUtils {
nodeLock = null;
}
+ public static Resource getResourceTypesMinimumAllocation() {
+ Map resourceTypes = getResourceTypes();
+ Resource ret = Resource.newInstance(0, 0);
+ for (Map.Entry entry : resourceTypes
+ .entrySet()) {
+ String name = entry.getKey();
+ if (name.equals(ResourceInformation.MEMORY_MB.getName())) {
+ ret.setMemorySize(entry.getValue().getMinimumAllocation());
+ continue;
+ }
+ if (name.equals(ResourceInformation.VCORES.getName())) {
+ Long tmp = entry.getValue().getMinimumAllocation();
+ if (tmp > Integer.MAX_VALUE) {
+ tmp = (long) Integer.MAX_VALUE;
+ }
+ ret.setVirtualCores(tmp.intValue());
+ continue;
+ }
+ ret.setResourceValue(name, entry.getValue().getMinimumAllocation());
+ }
+ return ret;
+ }
+
+ /**
+ * Get a Resource object with for the maximum allocation possible.
+ * @return a Resource object with the maximum allocation for the scheduler
+ */
+ public static Resource getResourceTypesMaximumAllocation() {
+ Map resourceTypes = getResourceTypes();
+ Resource ret = Resource.newInstance(0, 0);
+ for (Map.Entry entry : resourceTypes
+ .entrySet()) {
+ String name = entry.getKey();
+ if (name.equals(ResourceInformation.MEMORY_MB.getName())) {
+ ret.setMemorySize(entry.getValue().getMaximumAllocation());
+ continue;
+ }
+ if (name.equals(ResourceInformation.VCORES.getName())) {
+ Long tmp = entry.getValue().getMaximumAllocation();
+ if (tmp > Integer.MAX_VALUE) {
+ tmp = (long) Integer.MAX_VALUE;
+ }
+ ret.setVirtualCores(tmp.intValue());
+ continue;
+ }
+ ret.setResourceValue(name, entry.getValue().getMaximumAllocation());
+ }
+ return ret;
+ }
}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java
index a591be9946b..b0ec90706f0 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java
@@ -75,12 +75,12 @@ public class Resources {
}
@Override
+ @SuppressWarnings("deprecation")
public void setMemory(int memory) {
throw new RuntimeException(name + " cannot be modified!");
}
@Override
- @SuppressWarnings("deprecation")
public void setMemorySize(long memory) {
throw new RuntimeException(name + " cannot be modified!");
}
@@ -193,13 +193,7 @@ public class Resources {
}
public static Resource clone(Resource res) {
- Resource ret = Resource.newInstance(0, 0);
- for (Map.Entry entry : res.getResources()
- .entrySet()) {
- ret.setResourceInformation(entry.getKey(),
- ResourceInformation.newInstance(entry.getValue()));
- }
- return ret;
+ return Resource.newInstance(res);
}
public static Resource addTo(Resource lhs, Resource rhs) {
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AbstractYarnScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AbstractYarnScheduler.java
index 4f51e4e2f1b..7b544efe280 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AbstractYarnScheduler.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AbstractYarnScheduler.java
@@ -96,6 +96,7 @@ import org.apache.hadoop.yarn.server.utils.BuilderUtils;
import org.apache.hadoop.yarn.server.utils.Lock;
import org.apache.hadoop.yarn.util.Clock;
import org.apache.hadoop.yarn.util.SystemClock;
+import org.apache.hadoop.yarn.util.resource.ResourceUtils;
import org.apache.hadoop.yarn.util.resource.Resources;
import com.google.common.annotations.VisibleForTesting;
@@ -1327,8 +1328,51 @@ public abstract class AbstractYarnScheduler
* @param container Container.
*/
public void asyncContainerRelease(RMContainer container) {
- this.rmContext.getDispatcher().getEventHandler()
- .handle(new ReleaseContainerEvent(container));
+ this.rmContext.getDispatcher().getEventHandler().handle(
+ new ReleaseContainerEvent(container));
+ }
+
+ /*
+ * Get a Resource object with for the minimum allocation possible. If resource
+ * profiles are enabled then the 'minimum' resource profile will be used. If
+ * they are not enabled, use the minimums specified in the config files.
+ *
+ * @return a Resource object with the minimum allocation for the scheduler
+ */
+ public Resource getMinimumAllocation() {
+ boolean profilesEnabled = getConfig()
+ .getBoolean(YarnConfiguration.RM_RESOURCE_PROFILES_ENABLED,
+ YarnConfiguration.DEFAULT_RM_RESOURCE_PROFILES_ENABLED);
+ Resource ret;
+ if (!profilesEnabled) {
+ ret = ResourceUtils.getResourceTypesMinimumAllocation();
+ } else {
+ ret = rmContext.getResourceProfilesManager().getMinimumProfile();
+ }
+ LOG.info("Minimum allocation = " + ret);
+ return ret;
+ }
+
+ /**
+ * Get a Resource object with for the maximum allocation possible. If resource
+ * profiles are enabled then the 'maximum' resource profile will be used. If
+ * they are not enabled, use the maximums specified in the config files.
+ *
+ * @return a Resource object with the maximum allocation for the scheduler
+ */
+
+ public Resource getMaximumAllocation() {
+ boolean profilesEnabled = getConfig()
+ .getBoolean(YarnConfiguration.RM_RESOURCE_PROFILES_ENABLED,
+ YarnConfiguration.DEFAULT_RM_RESOURCE_PROFILES_ENABLED);
+ Resource ret;
+ if (!profilesEnabled) {
+ ret = ResourceUtils.getResourceTypesMaximumAllocation();
+ } else {
+ ret = rmContext.getResourceProfilesManager().getMaximumProfile();
+ }
+ LOG.info("Maximum allocation = " + ret);
+ return ret;
}
@Override
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/ClusterNodeTracker.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/ClusterNodeTracker.java
index b23b2be687c..431b96304cb 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/ClusterNodeTracker.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/ClusterNodeTracker.java
@@ -222,8 +222,7 @@ public class ClusterNodeTracker {
return Resources.createResource(
Math.min(configuredMaxAllocation.getMemorySize(), maxNodeMemory),
- Math.min(configuredMaxAllocation.getVirtualCores(), maxNodeVCores)
- );
+ Math.min(configuredMaxAllocation.getVirtualCores(), maxNodeVCores));
} finally {
readLock.unlock();
}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java
index f7731bef6e1..d360048c4ea 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java
@@ -318,8 +318,8 @@ public class CapacityScheduler extends
this.csConfProvider.init(configuration);
this.conf = this.csConfProvider.loadConfiguration(configuration);
validateConf(this.conf);
- this.minimumAllocation = this.conf.getMinimumAllocation();
- initMaximumResourceCapability(this.conf.getMaximumAllocation());
+ this.minimumAllocation = super.getMinimumAllocation();
+ initMaximumResourceCapability(super.getMaximumAllocation());
this.calculator = this.conf.getResourceCalculator();
this.usePortForNodeName = this.conf.getUsePortForNodeName();
this.applications = new ConcurrentHashMap<>();
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java
index 04aae19199c..a1ee8a19a59 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java
@@ -1282,8 +1282,8 @@ public class FairScheduler extends
this.conf = new FairSchedulerConfiguration(conf);
validateConf(this.conf);
authorizer = YarnAuthorizationProvider.getInstance(conf);
- minimumAllocation = this.conf.getMinimumAllocation();
- initMaximumResourceCapability(this.conf.getMaximumAllocation());
+ minimumAllocation = super.getMinimumAllocation();
+ initMaximumResourceCapability(super.getMaximumAllocation());
incrAllocation = this.conf.getIncrementAllocation();
updateReservationThreshold();
continuousSchedulingEnabled = this.conf.isContinuousSchedulingEnabled();
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java
index 5c923552fc2..6d176c1a154 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java
@@ -241,17 +241,8 @@ public class FifoScheduler extends
//Use ConcurrentSkipListMap because applications need to be ordered
this.applications =
new ConcurrentSkipListMap<>();
- this.minimumAllocation =
- Resources.createResource(conf.getInt(
- YarnConfiguration.RM_SCHEDULER_MINIMUM_ALLOCATION_MB,
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB));
- initMaximumResourceCapability(
- Resources.createResource(conf.getInt(
- YarnConfiguration.RM_SCHEDULER_MAXIMUM_ALLOCATION_MB,
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB),
- conf.getInt(
- YarnConfiguration.RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES,
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES)));
+ this.minimumAllocation = super.getMinimumAllocation();
+ initMaximumResourceCapability(super.getMaximumAllocation());
this.usePortForNodeName = conf.getBoolean(
YarnConfiguration.RM_SCHEDULER_INCLUDE_PORT_IN_NODE_NAME,
YarnConfiguration.DEFAULT_RM_SCHEDULER_USE_PORT_FOR_NODE_NAME);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.java
index ef7cb9a0e4a..2d7f3f6e088 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.java
@@ -104,6 +104,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.security.NMTokenSecretManag
import org.apache.hadoop.yarn.server.resourcemanager.security.RMContainerTokenSecretManager;
import org.apache.hadoop.yarn.util.Records;
import org.apache.hadoop.yarn.util.YarnVersionInfo;
+import org.apache.hadoop.yarn.util.resource.ResourceUtils;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
@@ -150,6 +151,7 @@ public class MockRM extends ResourceManager {
public MockRM(Configuration conf, RMStateStore store,
boolean useNullRMNodeLabelsManager, boolean useRealElector) {
super();
+ ResourceUtils.resetResourceTypes(conf);
this.useNullRMNodeLabelsManager = useNullRMNodeLabelsManager;
this.useRealElector = useRealElector;
init(conf instanceof YarnConfiguration ? conf : new YarnConfiguration(conf));
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
index 91f20c3f405..8bcd18823c0 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
@@ -247,6 +247,7 @@ public class TestAppManager{
ResourceScheduler scheduler = mockResourceScheduler();
((RMContextImpl)rmContext).setScheduler(scheduler);
Configuration conf = new Configuration();
+ ((RMContextImpl) rmContext).setYarnConfiguration(conf);
ApplicationMasterService masterService =
new ApplicationMasterService(rmContext, scheduler);
appMonitor = new TestRMAppManager(rmContext,
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java
index da3f1609ff2..283fc00dcea 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java
@@ -116,6 +116,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.policies.Dom
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.policies.FifoPolicy;
import org.apache.hadoop.yarn.server.utils.BuilderUtils;
import org.apache.hadoop.yarn.util.ControlledClock;
+import org.apache.hadoop.yarn.util.resource.ResourceUtils;
import org.apache.hadoop.yarn.util.resource.Resources;
import org.junit.After;
import org.junit.Assert;
@@ -215,6 +216,7 @@ public class TestFairScheduler extends FairSchedulerTestBase {
conf.setInt(YarnConfiguration.RM_SCHEDULER_MINIMUM_ALLOCATION_MB, 512);
conf.setInt(FairSchedulerConfiguration.RM_SCHEDULER_INCREMENT_ALLOCATION_MB,
128);
+ ResourceUtils.resetResourceTypes(conf);
scheduler.init(conf);
scheduler.start();
scheduler.reinitialize(conf, resourceManager.getRMContext());
@@ -243,6 +245,7 @@ public class TestFairScheduler extends FairSchedulerTestBase {
FairSchedulerConfiguration.RM_SCHEDULER_INCREMENT_ALLOCATION_MB, 512);
conf.setInt(
FairSchedulerConfiguration.RM_SCHEDULER_INCREMENT_ALLOCATION_VCORES, 2);
+ ResourceUtils.resetResourceTypes(conf);
scheduler.init(conf);
scheduler.reinitialize(conf, null);
Assert.assertEquals(256, scheduler.getMinimumResourceCapability().getMemorySize());
@@ -260,6 +263,7 @@ public class TestFairScheduler extends FairSchedulerTestBase {
FairSchedulerConfiguration.RM_SCHEDULER_INCREMENT_ALLOCATION_MB, 512);
conf.setInt(
FairSchedulerConfiguration.RM_SCHEDULER_INCREMENT_ALLOCATION_VCORES, 2);
+ ResourceUtils.resetResourceTypes(conf);
scheduler.init(conf);
scheduler.reinitialize(conf, null);
Assert.assertEquals(0, scheduler.getMinimumResourceCapability().getMemorySize());
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/MiniYARNCluster.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/MiniYARNCluster.java
index 0a66b74342c..75b7bffe199 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/MiniYARNCluster.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/MiniYARNCluster.java
@@ -96,6 +96,7 @@ import org.apache.hadoop.yarn.server.timeline.MemoryTimelineStore;
import org.apache.hadoop.yarn.server.timeline.TimelineStore;
import org.apache.hadoop.yarn.server.timeline.recovery.MemoryTimelineStateStore;
import org.apache.hadoop.yarn.server.timeline.recovery.TimelineStateStore;
+import org.apache.hadoop.yarn.util.resource.ResourceUtils;
import org.apache.hadoop.yarn.util.timeline.TimelineUtils;
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
@@ -260,6 +261,7 @@ public class MiniYARNCluster extends CompositeService {
YarnConfiguration.DEFAULT_YARN_MINICLUSTER_USE_RPC);
failoverTimeout = conf.getInt(YarnConfiguration.RM_ZK_TIMEOUT_MS,
YarnConfiguration.DEFAULT_RM_ZK_TIMEOUT_MS);
+ ResourceUtils.resetResourceTypes(conf);
if (useRpc && !useFixedPorts) {
throw new YarnRuntimeException("Invalid configuration!" +