|
@@ -34,8 +34,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;
|
|
@@ -44,15 +42,13 @@ public class AllocationConfiguration extends ReservationSchedulerConfiguration {
|
|
private static final Log LOG = LogFactory.getLog(FSQueue.class.getName());
|
|
private static final Log LOG = LogFactory.getLog(FSQueue.class.getName());
|
|
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;
|
|
|
|
|
|
@@ -64,7 +60,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;
|
|
@@ -113,12 +109,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,
|
|
@@ -167,7 +163,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<>();
|
|
@@ -293,26 +289,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;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -322,7 +310,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);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -420,9 +408,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());
|
|
}
|
|
}
|
|
}
|
|
}
|