Skip to content

Commit

Permalink
YARN-4066. Large number of queues choke fair scheduler. (Johan Gustav…
Browse files Browse the repository at this point in the history
…sson via kasha)
  • Loading branch information
kambatla committed Sep 29, 2015
1 parent 715dbdd commit a0b5a0a
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 23 deletions.
3 changes: 3 additions & 0 deletions hadoop-yarn-project/CHANGES.txt
Expand Up @@ -509,6 +509,9 @@ Release 2.8.0 - UNRELEASED
YARN-3635. Refactored current queue mapping implementation in CapacityScheduler
to use a generic PlacementManager framework. (Wangda Tan via jianhe)

YARN-4066. Large number of queues choke fair scheduler.
(Johan Gustavsson via kasha)

BUG FIXES

YARN-3197. Confusing log generated by CapacityScheduler. (Varun Saxena
Expand Down
Expand Up @@ -87,7 +87,19 @@ public void initialize(Configuration conf) throws IOException,
* could be referred to as just "parent1.queue2".
*/
public FSLeafQueue getLeafQueue(String name, boolean create) {
FSQueue queue = getQueue(name, create, FSQueueType.LEAF);
return getLeafQueue(name, create, true);
}

public FSLeafQueue getLeafQueue(
String name,
boolean create,
boolean recomputeSteadyShares) {
FSQueue queue = getQueue(
name,
create,
FSQueueType.LEAF,
recomputeSteadyShares
);
if (queue instanceof FSParentQueue) {
return null;
}
Expand Down Expand Up @@ -117,28 +129,46 @@ public boolean removeLeafQueue(String name) {
* could be referred to as just "parent1.queue2".
*/
public FSParentQueue getParentQueue(String name, boolean create) {
FSQueue queue = getQueue(name, create, FSQueueType.PARENT);
return getParentQueue(name, create, true);
}

public FSParentQueue getParentQueue(
String name,
boolean create,
boolean recomputeSteadyShares) {
FSQueue queue = getQueue(
name,
create,
FSQueueType.PARENT,
recomputeSteadyShares
);
if (queue instanceof FSLeafQueue) {
return null;
}
return (FSParentQueue) queue;
}

private FSQueue getQueue(String name, boolean create, FSQueueType queueType) {

private FSQueue getQueue(
String name,
boolean create,
FSQueueType queueType,
boolean recomputeSteadyShares) {
boolean recompute = recomputeSteadyShares;
name = ensureRootPrefix(name);
FSQueue queue;
synchronized (queues) {
FSQueue queue = queues.get(name);
queue = queues.get(name);
if (queue == null && create) {
// if the queue doesn't exist,create it and return
queue = createQueue(name, queueType);

// Update steady fair share for all queues
if (queue != null) {
rootQueue.recomputeSteadyShares();
}
} else {
recompute = false;
}
return queue;
}
if (recompute) {
rootQueue.recomputeSteadyShares();
}
return queue;
}

/**
Expand Down Expand Up @@ -376,21 +406,25 @@ private String ensureRootPrefix(String name) {

public void updateAllocationConfiguration(AllocationConfiguration queueConf) {
// Create leaf queues and the parent queues in a leaf's ancestry if they do not exist
for (String name : queueConf.getConfiguredQueues().get(FSQueueType.LEAF)) {
if (removeEmptyIncompatibleQueues(name, FSQueueType.LEAF)) {
getLeafQueue(name, true);
synchronized (queues) {
for (String name : queueConf.getConfiguredQueues().get(
FSQueueType.LEAF)) {
if (removeEmptyIncompatibleQueues(name, FSQueueType.LEAF)) {
getLeafQueue(name, true, false);
}
}
}

// At this point all leaves and 'parents with at least one child' would have been created.
// Now create parents with no configured leaf.
for (String name : queueConf.getConfiguredQueues().get(
FSQueueType.PARENT)) {
if (removeEmptyIncompatibleQueues(name, FSQueueType.PARENT)) {
getParentQueue(name, true);
// At this point all leaves and 'parents with
// at least one child' would have been created.
// Now create parents with no configured leaf.
for (String name : queueConf.getConfiguredQueues().get(
FSQueueType.PARENT)) {
if (removeEmptyIncompatibleQueues(name, FSQueueType.PARENT)) {
getParentQueue(name, true, false);
}
}
}

rootQueue.recomputeSteadyShares();

for (FSQueue queue : queues.values()) {
// Update queue metrics
FSQueueMetrics queueMetrics = queue.getMetrics();
Expand Down

0 comments on commit a0b5a0a

Please sign in to comment.