Search in sources :

Example 6 with NodeType

use of org.apache.hadoop.yarn.server.resourcemanager.scheduler.NodeType in project hadoop by apache.

the class FSAppAttempt method assignContainer.

private Resource assignContainer(FSSchedulerNode node, boolean reserved) {
    if (LOG.isTraceEnabled()) {
        LOG.trace("Node offered to app: " + getName() + " reserved: " + reserved);
    }
    Collection<SchedulerRequestKey> keysToTry = (reserved) ? Collections.singletonList(node.getReservedContainer().getReservedSchedulerKey()) : getSchedulerKeys();
    // (not scheduled) in order to promote better locality.
    try {
        writeLock.lock();
        // implementation.
        for (SchedulerRequestKey schedulerKey : keysToTry) {
            // we already check it in isValidReservation.
            if (!reserved && !hasContainerForNode(schedulerKey, node)) {
                continue;
            }
            addSchedulingOpportunity(schedulerKey);
            PendingAsk rackLocalPendingAsk = getPendingAsk(schedulerKey, node.getRackName());
            PendingAsk nodeLocalPendingAsk = getPendingAsk(schedulerKey, node.getNodeName());
            if (nodeLocalPendingAsk.getCount() > 0 && !appSchedulingInfo.canDelayTo(schedulerKey, node.getNodeName())) {
                LOG.warn("Relax locality off is not supported on local request: " + nodeLocalPendingAsk);
            }
            NodeType allowedLocality;
            if (scheduler.isContinuousSchedulingEnabled()) {
                allowedLocality = getAllowedLocalityLevelByTime(schedulerKey, scheduler.getNodeLocalityDelayMs(), scheduler.getRackLocalityDelayMs(), scheduler.getClock().getTime());
            } else {
                allowedLocality = getAllowedLocalityLevel(schedulerKey, scheduler.getNumClusterNodes(), scheduler.getNodeLocalityThreshold(), scheduler.getRackLocalityThreshold());
            }
            if (rackLocalPendingAsk.getCount() > 0 && nodeLocalPendingAsk.getCount() > 0) {
                if (LOG.isTraceEnabled()) {
                    LOG.trace("Assign container on " + node.getNodeName() + " node, assignType: NODE_LOCAL" + ", allowedLocality: " + allowedLocality + ", priority: " + schedulerKey.getPriority() + ", app attempt id: " + this.attemptId);
                }
                return assignContainer(node, nodeLocalPendingAsk, NodeType.NODE_LOCAL, reserved, schedulerKey);
            }
            if (!appSchedulingInfo.canDelayTo(schedulerKey, node.getRackName())) {
                continue;
            }
            if (rackLocalPendingAsk.getCount() > 0 && (allowedLocality.equals(NodeType.RACK_LOCAL) || allowedLocality.equals(NodeType.OFF_SWITCH))) {
                if (LOG.isTraceEnabled()) {
                    LOG.trace("Assign container on " + node.getNodeName() + " node, assignType: RACK_LOCAL" + ", allowedLocality: " + allowedLocality + ", priority: " + schedulerKey.getPriority() + ", app attempt id: " + this.attemptId);
                }
                return assignContainer(node, rackLocalPendingAsk, NodeType.RACK_LOCAL, reserved, schedulerKey);
            }
            PendingAsk offswitchAsk = getPendingAsk(schedulerKey, ResourceRequest.ANY);
            if (!appSchedulingInfo.canDelayTo(schedulerKey, ResourceRequest.ANY)) {
                continue;
            }
            if (offswitchAsk.getCount() > 0) {
                if (getSchedulingPlacementSet(schedulerKey).getUniqueLocationAsks() <= 1 || allowedLocality.equals(NodeType.OFF_SWITCH)) {
                    if (LOG.isTraceEnabled()) {
                        LOG.trace("Assign container on " + node.getNodeName() + " node, assignType: OFF_SWITCH" + ", allowedLocality: " + allowedLocality + ", priority: " + schedulerKey.getPriority() + ", app attempt id: " + this.attemptId);
                    }
                    return assignContainer(node, offswitchAsk, NodeType.OFF_SWITCH, reserved, schedulerKey);
                }
            }
            if (LOG.isTraceEnabled()) {
                LOG.trace("Can't assign container on " + node.getNodeName() + " node, allowedLocality: " + allowedLocality + ", priority: " + schedulerKey.getPriority() + ", app attempt id: " + this.attemptId);
            }
        }
    } finally {
        writeLock.unlock();
    }
    return Resources.none();
}
Also used : NodeType(org.apache.hadoop.yarn.server.resourcemanager.scheduler.NodeType) PendingAsk(org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.PendingAsk) SchedulerRequestKey(org.apache.hadoop.yarn.server.scheduler.SchedulerRequestKey)

Aggregations

NodeType (org.apache.hadoop.yarn.server.resourcemanager.scheduler.NodeType)6 PendingAsk (org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.PendingAsk)2 Container (org.apache.hadoop.yarn.api.records.Container)1 Priority (org.apache.hadoop.yarn.api.records.Priority)1 ResourceRequest (org.apache.hadoop.yarn.api.records.ResourceRequest)1 RMContainer (org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer)1 RMContainerEvent (org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainerEvent)1 RMContainerImpl (org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainerImpl)1 SchedulerRequestKey (org.apache.hadoop.yarn.server.scheduler.SchedulerRequestKey)1