diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor.java index 277b388aee6..4503aac23e3 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor.java @@ -41,7 +41,6 @@ import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.UnsupportedFileSystemException; import org.apache.hadoop.fs.permission.FsPermission; -import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.util.Shell; import org.apache.hadoop.util.Shell.CommandExecutor; import org.apache.hadoop.util.Shell.ExitCodeException; @@ -314,15 +313,11 @@ public Path getWrapperScriptPath() { } public void writeLocalWrapperScript(Path launchDst, Path pidFile) throws IOException { - DataOutputStream out = null; - PrintStream pout = null; - - try { - out = lfs.create(wrapperScriptPath, EnumSet.of(CREATE, OVERWRITE)); - pout = new PrintStream(out, false, "UTF-8"); + try (DataOutputStream out = + lfs.create(wrapperScriptPath, EnumSet.of(CREATE, OVERWRITE)); + PrintStream pout = + new PrintStream(out, false, "UTF-8")) { writeLocalWrapperScript(launchDst, pidFile, pout); - } finally { - IOUtils.cleanup(LOG, pout, out); } } @@ -368,11 +363,8 @@ public void writeLocalWrapperScript(Path launchDst, Path pidFile, private void writeSessionScript(Path launchDst, Path pidFile) throws IOException { - DataOutputStream out = null; - PrintStream pout = null; - try { - out = lfs.create(sessionScriptPath, EnumSet.of(CREATE, OVERWRITE)); - pout = new PrintStream(out, false, "UTF-8"); + try (DataOutputStream out = lfs.create(sessionScriptPath, EnumSet.of(CREATE, OVERWRITE)); + PrintStream pout = new PrintStream(out, false, "UTF-8")) { // We need to do a move as writing to a file is not atomic // Process reading a file being written to may get garbled data // hence write pid to tmp file first followed by a mv @@ -383,8 +375,6 @@ private void writeSessionScript(Path launchDst, Path pidFile) String exec = Shell.isSetsidAvailable? "exec setsid" : "exec"; pout.println(exec + " /bin/bash \"" + launchDst.toUri().getPath().toString() + "\""); - } finally { - IOUtils.cleanup(LOG, pout, out); } lfs.setPermission(sessionScriptPath, ContainerExecutor.TASK_LAUNCH_SCRIPT_PERMISSION); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerLaunch.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerLaunch.java index e6e462e0fde..eecf7156527 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerLaunch.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerLaunch.java @@ -42,7 +42,6 @@ import org.apache.hadoop.fs.FileUtil; import org.apache.hadoop.fs.LocalDirAllocator; import org.apache.hadoop.fs.Path; -import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.security.Credentials; import org.apache.hadoop.util.Shell; import org.apache.hadoop.util.StringUtils; @@ -218,8 +217,6 @@ public Integer call() { Path nmPrivateClasspathJarDir = dirsHandler.getLocalPathForWrite( getContainerPrivateDir(appIdStr, containerIdStr)); - DataOutputStream containerScriptOutStream = null; - DataOutputStream tokensOutStream = null; // Select the working directory for the container Path containerWorkDir = @@ -248,24 +245,23 @@ public Integer call() { + dirsHandler.getDisksHealthReport(false)); } - try { - // /////////// Write out the container-script in the nmPrivate space. - List appDirs = new ArrayList(localDirs.size()); - for (String localDir : localDirs) { - Path usersdir = new Path(localDir, ContainerLocalizer.USERCACHE); - Path userdir = new Path(usersdir, user); - Path appsdir = new Path(userdir, ContainerLocalizer.APPCACHE); - appDirs.add(new Path(appsdir, appIdStr)); - } - containerScriptOutStream = - lfs.create(nmPrivateContainerScriptPath, - EnumSet.of(CREATE, OVERWRITE)); - - // Set the token location too. - environment.put( - ApplicationConstants.CONTAINER_TOKEN_FILE_ENV_NAME, - new Path(containerWorkDir, - FINAL_CONTAINER_TOKENS_FILE).toUri().getPath()); + List appDirs = new ArrayList(localDirs.size()); + for (String localDir : localDirs) { + Path usersdir = new Path(localDir, ContainerLocalizer.USERCACHE); + Path userdir = new Path(usersdir, user); + Path appsdir = new Path(userdir, ContainerLocalizer.APPCACHE); + appDirs.add(new Path(appsdir, appIdStr)); + } + // Set the token location too. + environment.put( + ApplicationConstants.CONTAINER_TOKEN_FILE_ENV_NAME, + new Path(containerWorkDir, + FINAL_CONTAINER_TOKENS_FILE).toUri().getPath()); + + // /////////// Write out the container-script in the nmPrivate space. + try (DataOutputStream containerScriptOutStream = + lfs.create(nmPrivateContainerScriptPath, + EnumSet.of(CREATE, OVERWRITE))) { // Sanitize the container's environment sanitizeEnv(environment, containerWorkDir, appDirs, containerLogDirs, localResources, nmPrivateClasspathJarDir); @@ -274,18 +270,16 @@ public Integer call() { exec.writeLaunchEnv(containerScriptOutStream, environment, localResources, launchContext.getCommands(), new Path(containerLogDirs.get(0))); + } + // /////////// End of writing out container-script - // /////////// End of writing out container-script - - // /////////// Write out the container-tokens in the nmPrivate space. - tokensOutStream = - lfs.create(nmPrivateTokensPath, EnumSet.of(CREATE, OVERWRITE)); + // /////////// Write out the container-tokens in the nmPrivate space. + try (DataOutputStream tokensOutStream = + lfs.create(nmPrivateTokensPath, EnumSet.of(CREATE, OVERWRITE))) { Credentials creds = container.getCredentials(); creds.writeTokenStorageToStream(tokensOutStream); - // /////////// End of writing out container-tokens - } finally { - IOUtils.cleanup(LOG, containerScriptOutStream, tokensOutStream); } + // /////////// End of writing out container-tokens // LaunchContainer is a blocking call. We are here almost means the // container is launched, so send out the event.