diff --git hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/job/impl/TaskAttemptImpl.java hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/job/impl/TaskAttemptImpl.java index f4b434b..d3ea5a2 100644 --- hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/job/impl/TaskAttemptImpl.java +++ hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/job/impl/TaskAttemptImpl.java @@ -782,6 +782,11 @@ private static ContainerLaunchContext createCommonContainerLaunchContext( MRJobConfig.DEFAULT_MAPRED_ADMIN_USER_ENV), conf ); + // Setup the environment variables for DockerContainerExecutor + if (null != conf.get(YarnConfiguration.NM_DOCKER_CONTAINER_EXECUTOR_ENV)) + environment.put(YarnConfiguration.NM_DOCKER_CONTAINER_EXECUTOR_ENV, + conf.get(YarnConfiguration.NM_DOCKER_CONTAINER_EXECUTOR_ENV)); + // Construct the actual Container // The null fields are per-container and will be constructed for each // container separately. diff --git hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/YARNRunner.java hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/YARNRunner.java index 41dc72f..5bdf4ac 100644 --- hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/YARNRunner.java +++ hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/YARNRunner.java @@ -469,6 +469,11 @@ public ApplicationSubmissionContext createApplicationSubmissionContext( MRApps.setEnvFromInputString(environment, conf.get(MRJobConfig.MR_AM_ENV), conf); + // Setup the environment variables for DockerContainerExecutor + if (null != conf.get(YarnConfiguration.NM_DOCKER_CONTAINER_EXECUTOR_ENV)) + environment.put(YarnConfiguration.NM_DOCKER_CONTAINER_EXECUTOR_ENV, + conf.get(YarnConfiguration.NM_DOCKER_CONTAINER_EXECUTOR_ENV)); + // Parse distributed cache MRApps.setupDistributedCache(jobConf, localResources); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java index ff06eea..fdd975f 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java @@ -932,6 +932,10 @@ private static void addDeprecatedKeys() { public static final String NM_DEFAULT_DOCKER_CONTAINER_EXECUTOR_EXEC_NAME = "/usr/bin/docker"; + /** Environment variables of the docker executor (For DockerContainerExecutor).*/ + public static final String NM_DOCKER_CONTAINER_EXECUTOR_ENV = NM_PREFIX + + "docker-container-executor.env"; + /** The path to the Linux container executor.*/ public static final String NM_LINUX_CONTAINER_EXECUTOR_PATH = NM_PREFIX + "linux-container-executor.path"; diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DockerContainerExecutor.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DockerContainerExecutor.java index c854173..d3ac3f7 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DockerContainerExecutor.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DockerContainerExecutor.java @@ -146,8 +146,11 @@ public int launchContainer(Container container, List localDirs, List logDirs) throws IOException { String containerImageName = container.getLaunchContext().getEnvironment() .get(YarnConfiguration.NM_DOCKER_CONTAINER_EXECUTOR_IMAGE_NAME); + String dockerContainerEnvs = container.getLaunchContext().getEnvironment() + .get(YarnConfiguration.NM_DOCKER_CONTAINER_EXECUTOR_ENV); if (LOG.isDebugEnabled()) { LOG.debug("containerImageName from launchContext: " + containerImageName); + LOG.debug("environment variables from launchContext: " + dockerContainerEnvs); } Preconditions.checkArgument(!Strings.isNullOrEmpty(containerImageName), "Container image must not be null"); containerImageName = containerImageName.replaceAll("['\"]", ""); @@ -204,6 +207,7 @@ public int launchContainer(Container container, .append("--rm --net=host") .append(" ") .append(" --name " + containerIdStr) + .append((null == dockerContainerEnvs)?"":" "+dockerContainerEnvs+" ") .append(localDirMount) .append(logDirMount) .append(containerWorkDirMount)