diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java index 114453f6dc9..b5c98bfa485 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java @@ -1618,6 +1618,18 @@ public static boolean isAclEnabled(Configuration conf) { public static final String DEFAULT_NM_DOCKER_DEFAULT_CONTAINER_NETWORK = "host"; + /** The cgroup root directory used when launching containers using the + * DockerContainerRuntime. + */ + public static final String NM_DOCKER_CGROUPS_ROOT_DIRECTORY = + DOCKER_CONTAINER_RUNTIME_PREFIX + "cgroups-root-directory"; + + /** The default cgroup root directory used when launching containers using the + * DockerContainerRuntime. + */ + public static final String DEFAULT_NM_DOCKER_CGROUPS_ROOT_DIRECTORY = + "/sys/fs/cgroup"; + /** The mode in which the Java Container Sandbox should run detailed by * the JavaSandboxLinuxContainerRuntime. */ public static final String YARN_CONTAINER_SANDBOX = diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml index 0440458e5e2..df14f30c457 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml @@ -1643,6 +1643,13 @@ + The cgroup root directory used when launching containers + using the DockerContainerRuntime + yarn.nodemanager.runtime.linux.docker.cgroups-root-directory + /sys/fs/cgroup + + + The mode in which the Java Container Sandbox should run detailed by the JavaSandboxLinuxContainerRuntime. yarn.nodemanager.runtime.linux.sandbox-mode 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/linux/runtime/DockerLinuxContainerRuntime.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java index 82175645c9b..6f59c75ca98 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java @@ -167,13 +167,12 @@ public static final String ENV_DOCKER_CONTAINER_LOCAL_RESOURCE_MOUNTS = "YARN_CONTAINER_RUNTIME_DOCKER_LOCAL_RESOURCE_MOUNTS"; - static final String CGROUPS_ROOT_DIRECTORY = "/sys/fs/cgroup"; - private Configuration conf; private DockerClient dockerClient; private PrivilegedOperationExecutor privilegedOperationExecutor; private Set allowedNetworks = new HashSet<>(); private String defaultNetwork; + private String cgroupsRootDirectory; private CGroupsHandler cGroupsHandler; private AccessControlList privilegedContainersAcl; @@ -244,6 +243,9 @@ public void initialize(Configuration conf) defaultNetwork = conf.getTrimmed( YarnConfiguration.NM_DOCKER_DEFAULT_CONTAINER_NETWORK, YarnConfiguration.DEFAULT_NM_DOCKER_DEFAULT_CONTAINER_NETWORK); + cgroupsRootDirectory = conf.getTrimmed( + YarnConfiguration.NM_DOCKER_CGROUPS_ROOT_DIRECTORY, + YarnConfiguration.DEFAULT_NM_DOCKER_CGROUPS_ROOT_DIRECTORY); if(!allowedNetworks.contains(defaultNetwork)) { String message = "Default network: " + defaultNetwork @@ -487,8 +489,8 @@ public void launchContainer(ContainerRuntimeContext ctx) .setNetworkType(network); setHostname(runCommand, containerIdStr, hostname); runCommand.setCapabilities(capabilities) - .addMountLocation(CGROUPS_ROOT_DIRECTORY, - CGROUPS_ROOT_DIRECTORY + ":ro", false); + .addMountLocation(cgroupsRootDirectory, + cgroupsRootDirectory + ":ro", false); List allDirs = new ArrayList<>(containerLocalDirs); allDirs.addAll(filecacheDirs); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/TestDockerContainerRuntime.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/TestDockerContainerRuntime.java index d57d33cbd2c..710a5f70304 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/TestDockerContainerRuntime.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/TestDockerContainerRuntime.java @@ -261,12 +261,16 @@ private String getExpectedTestCapabilitiesArgumentString() { } private String getExpectedCGroupsMountString() { + + String cgroupsRootDirectory = conf.getTrimmed( + YarnConfiguration.NM_DOCKER_CGROUPS_ROOT_DIRECTORY, + YarnConfiguration.DEFAULT_NM_DOCKER_CGROUPS_ROOT_DIRECTORY); boolean cGroupsMountExists = new File( - DockerLinuxContainerRuntime.CGROUPS_ROOT_DIRECTORY).exists(); + cgroupsRootDirectory).exists(); if(cGroupsMountExists) { - return "-v " + DockerLinuxContainerRuntime.CGROUPS_ROOT_DIRECTORY - + ":" + DockerLinuxContainerRuntime.CGROUPS_ROOT_DIRECTORY + ":ro "; + return "-v " + cgroupsRootDirectory + + ":" + cgroupsRootDirectory + ":ro "; } else { return ""; }