Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

CGroups是一种将任务集及其所有未来子级集合/划分为具有特殊行为的分层组的机制。CGroups是Linux内核功能,已合并到内核版本2.6.24中。从YARN的角度来看,这使容器的资源使用受到限制。一个很好的例子是CPU使用率。没有CGroups,很难限制容器的CPU使用率。

CGroups配置

本节介绍使用CGroups的配置变量。

以下设置与设置CGroup有关。这些需要在yarn-site.xml中设置。

配置名称 描述
yarn.nodemanager.container-executor.class 这应该设置为“ org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor”。CGroups是Linux内核功能,通过LinuxContainerExecutor公开。
yarn.nodemanager.linux-container-executor.resources-handler.class 这应该设置为“ org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler”。使用LinuxContainerExecutor不会强制您使用CGroup。如果希望使用CGroups,则必须将resource-handler-class设置为CGroupsLCEResourceHandler。
yarn.nodemanager.linux-container-executor.cgroups.hierarchy 放置YARN处理的cgroups层次结构(不能包含逗号)。如果yarn.nodemanager.linux-container-executor.cgroups.mount为false(即,如果cgroups已经预先配置)并且YARN用户具有对父目录的写访问权,那么将创建该目录。如果目录已经存在,则管理员必须递归地授予YARN写入权限。
yarn.nodemanager.linux-container-executor.cgroups.mount 如果找不到,LCE是否应该尝试挂载cgroups可以为true或false。
yarn.nodemanager.linux-container-executor.cgroups.mount-path 可选的。CGroup的位置。如果yarn.nodemanager.linux-container-executor.cgroups.mount为true ,LCE将尝试在此处安装它们。如果yarn.nodemanager.linux-container-executor.cgroups.mount为false ,LCE将尝试从此位置使用CGroups 。如果指定,则此路径及其子目录(CGroup层次结构)必须存在,并且在启动NodeManager之前,YARN应该可以读取和写入它们。有关详细信息,请参见下面的CGroups安装选项。
yarn.nodemanager.linux-container-executor.group NodeManager的Unix组。它应与“ container-executor.cfg”中的设置匹配。需要此配置来验证容器执行器二进制文件的安全访问。

以下设置与限制YARN容器的资源使用有关:

配置名称 描述
yarn.nodemanager.resource.percentage-physical-cpu-limit 此设置使您可以限制所有YARN容器的CPU使用率。它为容器的累积CPU使用率设置了硬上限。例如,如果设置为60,则所有YARN容器的组合CPU使用率将不超过60%。
yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage CGroups允许硬性或软性限制cpu的使用。如果此设置为true,则即使有可用的备用CPU,容器使用的CPU使用率也不能超过分配的CPU使用率。这样可以确保容器只能使用分配给它们的CPU。设置为false时,容器可以使用备用CPU(如果有)。应该注意的是,无论设置为true还是false,所有容器的CPU组合使用率决不能超过“ yarn.nodemanager.resource.percentage-physical-cpu-limit”中指定的值。

CGroups安装选项

YARN通过内核将CGroups通过目录结构安装到文件系统中。有三个选项可以附加到CGroups。

选项 描述
发现已安装的CGroups 应该在较新的系统(如RHEL7或Ubuntu16)上使用,或者如果管理员在YARN启动之前安装了CGroups,则应使用它。将yarn.nodemanager.linux-container-executor.cgroups.mount设置为false,并将其他设置保留为默认值。YARN将在/ proc / mounts中找到安装点。常见位置包括/ sys / fs / cgroup/ cgroup。默认位置可能会因所使用的Linux发行版而异。
YARN安装的CGroups 重要信息:由于安全原因,默认情况下不建议使用container-executor.cfg选项feature.mount-cgroup.enabled = 0来使用此选项。请在启动YARN之前挂载cgroups。
CGroup已安装或已链接,但不在/ proc / mounts中 如果cgroups可通过lxcfs访问或由另一个文件系统模拟,则将yarn.nodemanager.linux-container-executor.cgroups.mount-path指向CGroups根目录。将yarn.nodemanager.linux-container-executor.cgroups.mount设置为false。在发现任何CGroup挂载点之前,YARN会尝试首先使用此路径。该路径应为每个CGroup层次结构有一个子目录,该目录由受逗号分隔的CGroup子系统(如<path> / cpu,cpuacct)命名。有效的子系统名称是cpu,cpuacct,cpuset,memory,net_cls,blkio,freezer,devices

CGroups和安全性

CGroups本身对安全性没有任何要求。但是,LinuxContainerExecutor确实有一些要求。如果在非安全模式下运行,默认情况下,LCE将以“ nobody”用户身份运行所有作业。可以通过将“ yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user”设置为所需用户来更改此用户。但是,也可以将其配置为在用户提交作业时运行作业。在这种情况下,应将“ yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-users”设置为false。

yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-用户 用户正在运行的作业
(默认) (默认) 没有人
(默认)
(用户提交工作)