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..6aadc0d867f 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..8a9e69b09be 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 "";
}