Hadoop 3.1.1 - Yarn - 使用 CGroups
Posted wuli光光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop 3.1.1 - Yarn - 使用 CGroups相关的知识,希望对你有一定的参考价值。
在 Yarn 上使用 CGroups
CGroups 是一种将任务及其子任务聚集和划分进一个垂直的分组的策略,并提供在此结构上的特别的操作。CGroups 是 Linux 内核功能,自内核版本 2.6.24 被引入。从 Yarn 角度,该功能使得限额容器的资源使用成为可能。一个示例是 CPU 使用,如果没有 CGroups,限制容器的 CPU 使用非常困难。
CGroups 配置
本节描述 CGroups 相关的配置参数。
以下参数和启动 CGroups 有关。请在 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 并不强制使用 CGroups。如果你想使用,resource-handler-class 必须设置为 CGroupsLCEResourceHandler。 |
yarn.nodemanager.linux-container-executor.cgroups.hierarchy | 放置 Yarn 进程的 CGroups 目录(不能由逗号)。如果 yarn.nodemanager.linux-container-executor.cgroups.mount 为 false(即必须预先配置 CGroups),且 Yarn 用户对父目录由写权限,那么这个目录将被创建。如果已经存在,管理员必须沿着 CGroups 目录递归地授予 Yarn 写权限。 |
yarn.nodemanager.linux-container-executor.cgroups.mount | 如果没有发现,LinuxContainerExecutor 是否尝试挂载 CGroups。取值是 true 或 false。 |
yarn.nodemanager.linux-container-executor.cgroups.mount-path | 可选参数,指明 CGroups 的目录。如果 yarn.nodemanager.linux-container-executor.cgroups.mount 为 true,LinuxContainerExecutor 将尝试挂载资源到这里;否则,LinuxContainerExecutor 会使用该目录的 CGroups。如果该参数被配置,那么在 NodeManager 启动前,给定的目录及其子目录(CGroups 垂直结构)必须存在,并且 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 资源,这确保了容器只能使用分配的资源量。如果该参数为 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。 |
CGroups 已经挂载或者链接了但不在路径 /proc/mounts 下 | 如果可以通过 lxcfs (或者由其他文件系统模拟出)访问 Cgroups,请将 yarn.nodemanager.linux-container-executor.cgroups.mount-path 指向你的 CGroups 根目录,并设定 yarn.nodemanager.linux-container-executor.cgroups.mount 为 false,Yarn 在发现其他 CGroup 挂载点前,将首先使用该路径。该路径下对于每一个 CGroup 都存在一个子目录,名称由 CGroup 子系统用逗号分隔,如 <path>/cpu,cpuacct。有效的子系统名称由 cpu、cpuacct、cpuset、memory、net_cls、blkio、freezer和devices。 |
CGroups 和安全
CGroups 本身并没有和安全相关的配置,但 LinuxContainerExecutor 有需求。如果运行在非安全模式下(默认),LinuxContainerExecutor 会用 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-users | 运行作业的账户名 |
---|---|---|
(default) | (default) | nobody |
yarn | (default) | yarn |
yarn | false | (User submitting the job) |
以上是关于Hadoop 3.1.1 - Yarn - 使用 CGroups的主要内容,如果未能解决你的问题,请参考以下文章
Hadoop 3.1.1 - Yarn - 使用 CGroups
Hadoop运行模式SSH无密登录配置生成公钥和私钥集群配置集群部署规划默认配置文件核心配置文件HDFS配置文件YARN配置文件MapReduce配置文件在集群上分发配置好的Had