diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/ApplicationMaster.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/ApplicationMaster.java index bc018b1d964..04d36ca0982 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/ApplicationMaster.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/ApplicationMaster.java @@ -269,6 +269,8 @@ private String containerResourceProfile = ""; Map resourceProfiles; + private boolean keepContainersAcrossAttempts = false; + // Counter for completed containers ( complete denotes successful or failed ) private AtomicInteger numCompletedContainers = new AtomicInteger(); // Allocated container count so that we know how many containers has the RM @@ -646,6 +648,10 @@ public boolean init(String[] args) throws ParseException, IOException { containerResourceProfile = cliParser.getOptionValue("container_resource_profile", ""); + keepContainersAcrossAttempts = + Boolean.valueOf(cliParser.getOptionValue + ("keep_containers_across_application_attempts", "false")); + if (this.placementSpecs == null) { numTotalContainers = Integer.parseInt(cliParser.getOptionValue( "num_containers", "1")); @@ -1154,7 +1160,13 @@ public void onRequestsRejected(List rejReqs) { @Override public void onShutdownRequest() { - done = true; + + if (keepContainersAcrossAttempts) { + LOG.info("Shutdown request received. Ignoring since " + + "keep_containers_across_application_attempts is enabled"); + } else { + done = true; + } } @Override