|
@@ -32,8 +32,6 @@ import org.apache.hadoop.yarn.security.AccessType;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.reservation.ReservationSchedulerConfiguration;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.reservation.ReservationSchedulerConfiguration;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.resource.ResourceWeights;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.resource.ResourceWeights;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerUtils;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerUtils;
|
|
-import org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator;
|
|
|
|
-import org.apache.hadoop.yarn.util.resource.ResourceCalculator;
|
|
|
|
import org.apache.hadoop.yarn.util.resource.Resources;
|
|
import org.apache.hadoop.yarn.util.resource.Resources;
|
|
|
|
|
|
import com.google.common.annotations.VisibleForTesting;
|
|
import com.google.common.annotations.VisibleForTesting;
|
|
@@ -41,15 +39,13 @@ import com.google.common.annotations.VisibleForTesting;
|
|
public class AllocationConfiguration extends ReservationSchedulerConfiguration {
|
|
public class AllocationConfiguration extends ReservationSchedulerConfiguration {
|
|
private static final AccessControlList EVERYBODY_ACL = new AccessControlList("*");
|
|
private static final AccessControlList EVERYBODY_ACL = new AccessControlList("*");
|
|
private static final AccessControlList NOBODY_ACL = new AccessControlList(" ");
|
|
private static final AccessControlList NOBODY_ACL = new AccessControlList(" ");
|
|
- private static final ResourceCalculator RESOURCE_CALCULATOR =
|
|
|
|
- new DefaultResourceCalculator();
|
|
|
|
// Minimum resource allocation for each queue
|
|
// Minimum resource allocation for each queue
|
|
private final Map<String, Resource> minQueueResources;
|
|
private final Map<String, Resource> minQueueResources;
|
|
// Maximum amount of resources per queue
|
|
// Maximum amount of resources per queue
|
|
@VisibleForTesting
|
|
@VisibleForTesting
|
|
- final Map<String, Resource> maxQueueResources;
|
|
|
|
|
|
+ final Map<String, ConfigurableResource> maxQueueResources;
|
|
// Maximum amount of resources for each queue's ad hoc children
|
|
// Maximum amount of resources for each queue's ad hoc children
|
|
- private final Map<String, Resource> maxChildQueueResources;
|
|
|
|
|
|
+ private final Map<String, ConfigurableResource> maxChildQueueResources;
|
|
// Sharing weights for each queue
|
|
// Sharing weights for each queue
|
|
private final Map<String, ResourceWeights> queueWeights;
|
|
private final Map<String, ResourceWeights> queueWeights;
|
|
|
|
|
|
@@ -61,7 +57,7 @@ public class AllocationConfiguration extends ReservationSchedulerConfiguration {
|
|
final Map<String, Integer> userMaxApps;
|
|
final Map<String, Integer> userMaxApps;
|
|
private final int userMaxAppsDefault;
|
|
private final int userMaxAppsDefault;
|
|
private final int queueMaxAppsDefault;
|
|
private final int queueMaxAppsDefault;
|
|
- private final Resource queueMaxResourcesDefault;
|
|
|
|
|
|
+ private final ConfigurableResource queueMaxResourcesDefault;
|
|
|
|
|
|
// Maximum resource share for each leaf queue that can be used to run AMs
|
|
// Maximum resource share for each leaf queue that can be used to run AMs
|
|
final Map<String, Float> queueMaxAMShares;
|
|
final Map<String, Float> queueMaxAMShares;
|
|
@@ -110,12 +106,12 @@ public class AllocationConfiguration extends ReservationSchedulerConfiguration {
|
|
private final Set<String> nonPreemptableQueues;
|
|
private final Set<String> nonPreemptableQueues;
|
|
|
|
|
|
public AllocationConfiguration(Map<String, Resource> minQueueResources,
|
|
public AllocationConfiguration(Map<String, Resource> minQueueResources,
|
|
- Map<String, Resource> maxQueueResources,
|
|
|
|
- Map<String, Resource> maxChildQueueResources,
|
|
|
|
|
|
+ Map<String, ConfigurableResource> maxQueueResources,
|
|
|
|
+ Map<String, ConfigurableResource> maxChildQueueResources,
|
|
Map<String, Integer> queueMaxApps, Map<String, Integer> userMaxApps,
|
|
Map<String, Integer> queueMaxApps, Map<String, Integer> userMaxApps,
|
|
Map<String, ResourceWeights> queueWeights,
|
|
Map<String, ResourceWeights> queueWeights,
|
|
Map<String, Float> queueMaxAMShares, int userMaxAppsDefault,
|
|
Map<String, Float> queueMaxAMShares, int userMaxAppsDefault,
|
|
- int queueMaxAppsDefault, Resource queueMaxResourcesDefault,
|
|
|
|
|
|
+ int queueMaxAppsDefault, ConfigurableResource queueMaxResourcesDefault,
|
|
float queueMaxAMShareDefault,
|
|
float queueMaxAMShareDefault,
|
|
Map<String, SchedulingPolicy> schedulingPolicies,
|
|
Map<String, SchedulingPolicy> schedulingPolicies,
|
|
SchedulingPolicy defaultSchedulingPolicy,
|
|
SchedulingPolicy defaultSchedulingPolicy,
|
|
@@ -164,7 +160,7 @@ public class AllocationConfiguration extends ReservationSchedulerConfiguration {
|
|
queueMaxAMShares = new HashMap<>();
|
|
queueMaxAMShares = new HashMap<>();
|
|
userMaxAppsDefault = Integer.MAX_VALUE;
|
|
userMaxAppsDefault = Integer.MAX_VALUE;
|
|
queueMaxAppsDefault = Integer.MAX_VALUE;
|
|
queueMaxAppsDefault = Integer.MAX_VALUE;
|
|
- queueMaxResourcesDefault = Resources.unbounded();
|
|
|
|
|
|
+ queueMaxResourcesDefault = new ConfigurableResource(Resources.unbounded());
|
|
queueMaxAMShareDefault = 0.5f;
|
|
queueMaxAMShareDefault = 0.5f;
|
|
queueAcls = new HashMap<>();
|
|
queueAcls = new HashMap<>();
|
|
resAcls = new HashMap<>();
|
|
resAcls = new HashMap<>();
|
|
@@ -290,26 +286,18 @@ public class AllocationConfiguration extends ReservationSchedulerConfiguration {
|
|
|
|
|
|
/**
|
|
/**
|
|
* Get the maximum resource allocation for the given queue. If the max in not
|
|
* Get the maximum resource allocation for the given queue. If the max in not
|
|
- * set, return the larger of the min and the default max.
|
|
|
|
|
|
+ * set, return the default max.
|
|
*
|
|
*
|
|
* @param queue the target queue's name
|
|
* @param queue the target queue's name
|
|
* @return the max allocation on this queue
|
|
* @return the max allocation on this queue
|
|
*/
|
|
*/
|
|
@VisibleForTesting
|
|
@VisibleForTesting
|
|
- Resource getMaxResources(String queue) {
|
|
|
|
- Resource maxQueueResource = maxQueueResources.get(queue);
|
|
|
|
|
|
+ ConfigurableResource getMaxResources(String queue) {
|
|
|
|
+ ConfigurableResource maxQueueResource = maxQueueResources.get(queue);
|
|
if (maxQueueResource == null) {
|
|
if (maxQueueResource == null) {
|
|
- Resource minQueueResource = minQueueResources.get(queue);
|
|
|
|
- if (minQueueResource != null &&
|
|
|
|
- Resources.greaterThan(RESOURCE_CALCULATOR, Resources.unbounded(),
|
|
|
|
- minQueueResource, queueMaxResourcesDefault)) {
|
|
|
|
- return minQueueResource;
|
|
|
|
- } else {
|
|
|
|
- return queueMaxResourcesDefault;
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- return maxQueueResource;
|
|
|
|
|
|
+ maxQueueResource = queueMaxResourcesDefault;
|
|
}
|
|
}
|
|
|
|
+ return maxQueueResource;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -319,7 +307,7 @@ public class AllocationConfiguration extends ReservationSchedulerConfiguration {
|
|
* @return the max allocation on this queue or null if not set
|
|
* @return the max allocation on this queue or null if not set
|
|
*/
|
|
*/
|
|
@VisibleForTesting
|
|
@VisibleForTesting
|
|
- Resource getMaxChildResources(String queue) {
|
|
|
|
|
|
+ ConfigurableResource getMaxChildResources(String queue) {
|
|
return maxChildQueueResources.get(queue);
|
|
return maxChildQueueResources.get(queue);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -417,9 +405,9 @@ public class AllocationConfiguration extends ReservationSchedulerConfiguration {
|
|
queue.setMaxChildQueueResource(getMaxChildResources(name));
|
|
queue.setMaxChildQueueResource(getMaxChildResources(name));
|
|
|
|
|
|
// Set queue metrics.
|
|
// Set queue metrics.
|
|
- queue.getMetrics().setMinShare(getMinResources(name));
|
|
|
|
- queue.getMetrics().setMaxShare(getMaxResources(name));
|
|
|
|
- queue.getMetrics().setMaxApps(getQueueMaxApps(name));
|
|
|
|
|
|
+ queue.getMetrics().setMinShare(queue.getMinShare());
|
|
|
|
+ queue.getMetrics().setMaxShare(queue.getMaxShare());
|
|
|
|
+ queue.getMetrics().setMaxApps(queue.getMaxRunningApps());
|
|
queue.getMetrics().setSchedulingPolicy(getSchedulingPolicy(name).getName());
|
|
queue.getMetrics().setSchedulingPolicy(getSchedulingPolicy(name).getName());
|
|
}
|
|
}
|
|
}
|
|
}
|