From c16f7182937dc4e8bbf46dfedd9db427a0a33357 Mon Sep 17 00:00:00 2001 From: cnauroth Date: Fri, 7 Nov 2014 12:29:39 -0800 Subject: [PATCH] YARN-2803. MR distributed cache not working correctly on Windows after NodeManager privileged account changes. Contributed by Craig Welch. (cherry picked from commit 06b797947c980d7d21864eb8b700cf565756aac1) --- hadoop-yarn-project/CHANGES.txt | 3 +++ .../containermanager/launcher/ContainerLaunch.java | 12 +++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 3ea01f854ec..d7fcea44aa8 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -873,6 +873,9 @@ Release 2.6.0 - UNRELEASED YARN-2827. Fixed bugs in "yarn queue" CLI. (Wangda Tan via vinodkv). + YARN-2803. MR distributed cache not working correctly on Windows after + NodeManager privileged account changes. (Craig Welch via cnauroth) + Release 2.5.2 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/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 b/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 57e3bb9e84c..8fc5ea3dd83 100644 --- a/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 +++ b/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 @@ -71,6 +71,7 @@ import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerState; import org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ContainerLocalizer; import org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ResourceLocalizationService; +import org.apache.hadoop.yarn.server.nodemanager.WindowsSecureContainerExecutor; import org.apache.hadoop.yarn.server.nodemanager.util.ProcessIdFileReader; import org.apache.hadoop.yarn.util.Apps; import org.apache.hadoop.yarn.util.AuxiliaryServiceHelper; @@ -767,8 +768,17 @@ public void sanitizeEnv(Map environment, Path pwd, System.getenv()); mergedEnv.putAll(environment); + // this is hacky and temporary - it's to preserve the windows secure + // behavior but enable non-secure windows to properly build the class + // path for access to job.jar/lib/xyz and friends (see YARN-2803) + Path jarDir; + if (exec instanceof WindowsSecureContainerExecutor) { + jarDir = nmPrivateClasspathJarDir; + } else { + jarDir = pwd; + } String[] jarCp = FileUtil.createJarWithClassPath( - newClassPath.toString(), nmPrivateClasspathJarDir, pwd, mergedEnv); + newClassPath.toString(), jarDir, pwd, mergedEnv); // In a secure cluster the classpath jar must be localized to grant access Path localizedClassPathJar = exec.localizeClasspathJar( new Path(jarCp[0]), pwd, container.getUser());