YARN-1678. Fair scheduler gabs incessantly about reservations (Sandy Ryza)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1571468 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
036af54387
commit
1ab2f5a916
|
@ -28,6 +28,8 @@ Release 2.5.0 - UNRELEASED
|
||||||
YARN-1736. FS: AppSchedulable.assignContainer's priority argument is
|
YARN-1736. FS: AppSchedulable.assignContainer's priority argument is
|
||||||
redundant. (Naren Koneru via kasha)
|
redundant. (Naren Koneru via kasha)
|
||||||
|
|
||||||
|
YARN-1678. Fair scheduler gabs incessantly about reservations (Sandy Ryza)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
BUG FIXES
|
BUG FIXES
|
||||||
|
|
|
@ -201,6 +201,22 @@ public class AppSchedulable extends Schedulable {
|
||||||
* Assign a container to this node to facilitate {@code request}. If node does
|
* Assign a container to this node to facilitate {@code request}. If node does
|
||||||
* not have enough memory, create a reservation. This is called once we are
|
* not have enough memory, create a reservation. This is called once we are
|
||||||
* sure the particular request should be facilitated by this node.
|
* sure the particular request should be facilitated by this node.
|
||||||
|
*
|
||||||
|
* @param node
|
||||||
|
* The node to try placing the container on.
|
||||||
|
* @param priority
|
||||||
|
* The requested priority for the container.
|
||||||
|
* @param request
|
||||||
|
* The ResourceRequest we're trying to satisfy.
|
||||||
|
* @param type
|
||||||
|
* The locality of the assignment.
|
||||||
|
* @param reserved
|
||||||
|
* Whether there's already a container reserved for this app on the node.
|
||||||
|
* @return
|
||||||
|
* If an assignment was made, returns the resources allocated to the
|
||||||
|
* container. If a reservation was made, returns
|
||||||
|
* FairScheduler.CONTAINER_RESERVED. If no assignment or reservation was
|
||||||
|
* made, returns an empty resource.
|
||||||
*/
|
*/
|
||||||
private Resource assignContainer(FSSchedulerNode node,
|
private Resource assignContainer(FSSchedulerNode node,
|
||||||
ResourceRequest request, NodeType type,
|
ResourceRequest request, NodeType type,
|
||||||
|
@ -255,17 +271,6 @@ public class AppSchedulable extends Schedulable {
|
||||||
LOG.debug("Node offered to app: " + getName() + " reserved: " + reserved);
|
LOG.debug("Node offered to app: " + getName() + " reserved: " + reserved);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reserved) {
|
|
||||||
RMContainer rmContainer = node.getReservedContainer();
|
|
||||||
Priority priority = rmContainer.getReservedPriority();
|
|
||||||
|
|
||||||
// Make sure the application still needs requests at this priority
|
|
||||||
if (app.getTotalRequiredResources(priority) == 0) {
|
|
||||||
unreserve(priority, node);
|
|
||||||
return Resources.none();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Collection<Priority> prioritiesToTry = (reserved) ?
|
Collection<Priority> prioritiesToTry = (reserved) ?
|
||||||
Arrays.asList(node.getReservedContainer().getReservedPriority()) :
|
Arrays.asList(node.getReservedContainer().getReservedPriority()) :
|
||||||
app.getPriorities();
|
app.getPriorities();
|
||||||
|
@ -338,7 +343,33 @@ public class AppSchedulable extends Schedulable {
|
||||||
return Resources.none();
|
return Resources.none();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when this application already has an existing reservation on the
|
||||||
|
* given node. Sees whether we can turn the reservation into an allocation.
|
||||||
|
* Also checks whether the application needs the reservation anymore, and
|
||||||
|
* releases it if not.
|
||||||
|
*
|
||||||
|
* @param node
|
||||||
|
* Node that the application has an existing reservation on
|
||||||
|
*/
|
||||||
public Resource assignReservedContainer(FSSchedulerNode node) {
|
public Resource assignReservedContainer(FSSchedulerNode node) {
|
||||||
|
RMContainer rmContainer = node.getReservedContainer();
|
||||||
|
Priority priority = rmContainer.getReservedPriority();
|
||||||
|
|
||||||
|
// Make sure the application still needs requests at this priority
|
||||||
|
if (app.getTotalRequiredResources(priority) == 0) {
|
||||||
|
unreserve(priority, node);
|
||||||
|
return Resources.none();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fail early if the reserved container won't fit.
|
||||||
|
// Note that we have an assumption here that there's only one container size
|
||||||
|
// per priority.
|
||||||
|
if (!Resources.fitsIn(node.getReservedContainer().getReservedResource(),
|
||||||
|
node.getAvailableResource())) {
|
||||||
|
return Resources.none();
|
||||||
|
}
|
||||||
|
|
||||||
return assignContainer(node, true);
|
return assignContainer(node, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1046,9 +1046,11 @@ public class FairScheduler extends AbstractYarnScheduler {
|
||||||
reservedAppSchedulable = null;
|
reservedAppSchedulable = null;
|
||||||
} else {
|
} else {
|
||||||
// Reservation exists; try to fulfill the reservation
|
// Reservation exists; try to fulfill the reservation
|
||||||
LOG.info("Trying to fulfill reservation for application "
|
if (LOG.isDebugEnabled()) {
|
||||||
|
LOG.debug("Trying to fulfill reservation for application "
|
||||||
+ reservedAppSchedulable.getApp().getApplicationAttemptId()
|
+ reservedAppSchedulable.getApp().getApplicationAttemptId()
|
||||||
+ " on node: " + node);
|
+ " on node: " + node);
|
||||||
|
}
|
||||||
|
|
||||||
node.getReservedAppSchedulable().assignReservedContainer(node);
|
node.getReservedAppSchedulable().assignReservedContainer(node);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue