diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/ApplicationConstants.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/ApplicationConstants.java index 8a824ec..10b8a14 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/ApplicationConstants.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/ApplicationConstants.java @@ -177,7 +177,14 @@ * $LOCAL_DIRS * Final, exported by NodeManager and non-modifiable by users. */ - LOCAL_DIRS("LOCAL_DIRS"); + LOCAL_DIRS("LOCAL_DIRS"), + + /** + * $LOG_DIR + * Final, exported by NodeManager and non-modifiable by users. + * Directories that the container use for logging. + */ + LOG_DIRS("LOG_DIRS"); private final String variable; private Environment(String variable) { 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 ec63d35..7349d40 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 @@ -188,7 +188,6 @@ public Integer call() { + pidFileSuffix); List localDirs = dirsHandler.getLocalDirs(); List logDirs = dirsHandler.getLogDirs(); - if (!dirsHandler.areDisksHealthy()) { ret = ContainerExitStatus.DISKS_FAILED; throw new IOException("Most of the disks failed. " @@ -215,7 +214,8 @@ public Integer call() { FINAL_CONTAINER_TOKENS_FILE).toUri().getPath()); // Sanitize the container's environment - sanitizeEnv(environment, containerWorkDir, appDirs, localResources); + sanitizeEnv(environment, containerWorkDir, appDirs, logDirs, + localResources); // Write out the environment writeLaunchEnv(containerScriptOutStream, environment, localResources, @@ -543,9 +543,9 @@ private static void putEnvIfAbsent( } } - public void sanitizeEnv(Map environment, - Path pwd, List appDirs, Map> resources) - throws IOException { + public void sanitizeEnv(Map environment, Path pwd, + List appDirs, List logDirs, + Map> resources) throws IOException { /** * Non-modifiable environment variables */ @@ -565,6 +565,8 @@ public void sanitizeEnv(Map environment, environment.put(Environment.LOCAL_DIRS.name(), StringUtils.join(",", appDirs)); + environment.put(Environment.LOG_DIRS.name(), StringUtils.join(",", logDirs)); + putEnvIfNotNull(environment, Environment.USER.name(), container.getUser()); putEnvIfNotNull(environment, diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/TestContainerLaunch.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/TestContainerLaunch.java index 35630e6..80a4343 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/TestContainerLaunch.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/TestContainerLaunch.java @@ -248,6 +248,8 @@ public void testContainerEnvVariables() throws Exception { // Now verify the contents of the file List localDirs = dirsHandler.getLocalDirs(); + List logDirs = dirsHandler.getLogDirs(); + List appDirs = new ArrayList(localDirs.size()); for (String localDir : localDirs) { Path usersdir = new Path(localDir, ContainerLocalizer.USERCACHE); @@ -274,6 +276,9 @@ public void testContainerEnvVariables() throws Exception { .getEnvironment().get(Environment.NM_HTTP_PORT.name())); Assert.assertEquals(StringUtils.join(",", appDirs), containerLaunchContext .getEnvironment().get(Environment.LOCAL_DIRS.name())); + Assert.assertEquals(StringUtils.join(",", logDirs), containerLaunchContext + .getEnvironment().get(Environment.LOG_DIRS.name())); + // Get the pid of the process String pid = reader.readLine().trim(); // No more lines