diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/util/CgroupsLCEResourcesHandler.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/util/CgroupsLCEResourcesHandler.java index b38e559..ddd3c0f 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/util/CgroupsLCEResourcesHandler.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/util/CgroupsLCEResourcesHandler.java @@ -469,8 +469,16 @@ public String getResourcesOption(ContainerId containerId) { private String findControllerInMtab(String controller, Map> entries) { for (Entry> e : entries.entrySet()) { - if (e.getValue().contains(controller)) - return e.getKey(); + if (e.getValue().contains(controller)) { + String controllerKey = e.getKey(); + // In RHEL7, the CPU controller is named 'cpu,cpuacct'. The comma in the + // controller name leads to container launch failure. Symlinks 'cpu' and + // 'cpuacct' point to 'cpu,cpuacct'. Using 'cpu' solves the issue + controllerKey = controllerKey.replace("cpu,cpuacct", "cpu"); + if (new File(controllerKey).exists()) { + return controllerKey; + } + } } return null;