原创 Yarn 使用 Cgroup 实现任务资源限制
Yarn NodeManager 能够使用 CGroup 来限制所有 containers 的资源使用,主要是 CPU 资源。如果不用 CGroup, 在 NM 端很难实现对 container 的 CPU 使用进行限制。
接下来在 Cloudera Manager 中介绍Yarn 使用 Cgroup 实现任务资源限制。
Cgroup 基础知识
Control groups 是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的的物理资源的机制。
Cgroup 子系统:blkio、CPU、cpuacct、cpuset、devices、Memory、net_cls...,YARN 使用了 CPU、Memory 子系统
默认状态下, container 的 CPU 使用是没有限制的,container 申请了 1 vcore ,实际上能够使用所有的 CPU 资源。所以如果 NM 上分配了一个 vcore 申请较少实际上 CPU 使用极高的任务,常常会导致节点上运行的所有的任务都延时。
Cloudera Manager 中设置
1.先在主机上开启 启用基于 Cgroup 的资源管理
启用使用控制组 (cgroup) 的资源管理。当切换此开关后,必须重启该主机上的角色才能启用或禁用 cgroup。在角色配置组和单个角色的配置页面中可以找到按资源列出的控件。
2.然后在 YARN 中开启 Cgroup
使用 Linux Container Executor 的非安全模式的 UNIX 用户 yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user 在非安全模式中使用 Linux-container-executor 时,运行容器的 UNIX 用户。
开启了 yarn.nodemanager.container-executor.class 后,会自动开启运行用户的设置,修改为 hdfs 否则任务启动会报错 Application application_1623116025711_0002 failed 2 times due to AM Container for appattempt_1623116025711_0002_000002 exited with exitCode: -1000 Failing this attempt.Diagnostics: [2021-06-08 10:11:33.765]Application application_1623116025711_0002 initialization failed (exitCode=255) with output: main : command provided 0 main : run as user is nobody main : requested yarn user is hdfs Can't create directory /yarn/nm/usercache/hdfs/appcache/application_1623116025711_0002 - Permission denied Did not create any app directories For more detailed output, check the application tracking page: http://hadoop-30.com:18088/cluster/app/application_1623116025711_0002 Then click on links to logs of each attempt. . Failing the application.
Application application_1623118554731_0001 failed 2 times due to AM Container for appattempt_1623118554731_0001_000002 exited with exitCode: -1000 Failing this attempt.Diagnostics: [2021-06-08 10:18:36.121]Application application_1623118554731_0001 initialization failed (exitCode=255) with output: main : command provided 0 main : run as user is hdfs main : requested yarn user is hdfs Requested user hdfs is not whitelisted and has id 992,which is below the minimum allowed 1000 For more detailed output, check the application tracking page: http://hadoop-29.com:8088/cluster/app/application_1623118554731_0001 Then click on links to logs of each attempt. . Failing the application.
allowed.system.user Requested user yarn is not whitelisted and has id 981,which is below the minimum allowed 1000
min.user.id Requested user yarn is not whitelisted and has id 981,which is below the minimum allowed 1000
banned.users
容器执行程序组 yarn.nodemanager.linux-container-executor.group
占用节点总 CPU 的百分比 NodeManager 启动的容器占用节点资源的占比,比如这里是 80%,最多只使用节点 80%的 CPU 资源。 Containers CPU Limit Percentage yarn.nodemanager.resource.percentage-physical-cpu-limit
上述配置项调整后的差异对比:
3.测试效果
下图为设置 80% 的测试数据79.5%,控制在 80% 以内,符合预期
top命令中 %CPU表示进程占用单个核的比例 %Cpu(s)表示所有用户进程占总cpu的比例
当前正在运行 3 个 Container
未开启 Cgroup 时
几乎将服务器打满
reference
- [1] Smarthan's Notebook. Yarn 使用 Cgroup 实现任务资源限制open in new window
- [2] Smarthan's Notebook. Yarn ContainerExecutor 配置与使用open in new window
- [3] aliyun. YARN中的CPU资源隔离-CGroupsopen in new window