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..a04fc3c 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,13 @@ * $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. + */ + LOG_DIR("LOG_DIR"); 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 0b5bc69..b3e4835 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 @@ -215,7 +215,8 @@ public Integer call() { FINAL_CONTAINER_TOKENS_FILE).toUri().getPath()); // Sanitize the container's environment - sanitizeEnv(environment, containerWorkDir, appDirs, localResources); + sanitizeEnv(environment, containerWorkDir, appDirs, containerLogDir, + localResources); // Write out the environment writeLaunchEnv(containerScriptOutStream, environment, localResources, @@ -543,9 +544,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, Path containerLogDir, + Map> resources) throws IOException { /** * Non-modifiable environment variables */ @@ -565,6 +566,8 @@ public void sanitizeEnv(Map environment, environment.put(Environment.LOCAL_DIRS.name(), StringUtils.join(",", appDirs)); + environment.put(Environment.LOG_DIR.name(), containerLogDir.toString()); + 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..9bd94ee 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(); + Path containerLogDir = dirsHandler.getLogPathForWrite(ContainerLaunch + .getRelativeContainerLogDir(appId.toString(), ConverterUtils.toString(cId)), false); List appDirs = new ArrayList(localDirs.size()); for (String localDir : localDirs) { Path usersdir = new Path(localDir, ContainerLocalizer.USERCACHE); @@ -274,6 +276,8 @@ 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(containerLogDir.toString(), containerLaunchContext + .getEnvironment().get(Environment.LOG_DIR.name())); // Get the pid of the process String pid = reader.readLine().trim(); // No more lines