diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java index 5de407d..1839c75 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java @@ -18,7 +18,6 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity; -import com.google.common.base.Preconditions; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -56,10 +55,12 @@ import org.apache.hadoop.yarn.server.resourcemanager.RMAuditLogger.AuditConstants; import org.apache.hadoop.yarn.server.resourcemanager.RMContext; import org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore.RMState; +import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppEvent; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppEventType; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppRejectedEvent; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState; +import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptEvent; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptEventType; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState; @@ -92,6 +93,7 @@ import org.apache.hadoop.yarn.util.resource.Resources; import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; @LimitedPrivate("yarn") @Evolving @@ -1074,11 +1076,46 @@ public void preemptContainer(ApplicationAttemptId aid, RMContainer cont) { } } + private void logPreemptedContainer(RMContainer cont) { + ApplicationAttemptId attemptId = cont.getApplicationAttemptId(); + if (null == attemptId) { + LOG.warn("AttemptId in RMContainer=" + cont.getContainerId().toString() + + " is null"); + return; + } + RMApp app = rmContext.getRMApps().get(attemptId.getApplicationId()); + if (null == app) { + LOG.warn("RMApp of given appId=" + attemptId.getApplicationId().toString() + + " is null"); + return; + } + RMAppAttempt attempt = app.getRMAppAttempt(cont.getApplicationAttemptId()); + if (null == attempt) { + LOG.warn("RMAppAttempt of given appAttemptId=" + attemptId.toString() + + " is null"); + return; + } + ContainerId containerId = cont.getContainerId(); + if (attempt.getMasterContainer() != null + && attempt.getMasterContainer().getId().equals(containerId)) { + // container got preempted is a master container + LOG.info(String.format("Application Master container preempted, " + + "appAttemptId=%s, containerId=%s, resource=%s", attempt + .getAppAttemptId().toString(), containerId.toString(), cont + .getContainer().getResource().toString())); + } else { + // container got preempted is a task container + LOG.info(String.format("Task container preempted, appAttemptId=%s, " + + "containerId=%s, resource=%s", + attempt.getAppAttemptId().toString(), containerId.toString(), cont + .getContainer().getResource().toString())); + } + } + @Override public void killContainer(RMContainer cont) { - if(LOG.isDebugEnabled()){ - LOG.debug("KILL_CONTAINER: container" + cont.toString()); - } + logPreemptedContainer(cont); + completedContainer(cont, SchedulerUtils.createPreemptedContainerStatus( cont.getContainerId(),"Container being forcibly preempted:"