原创 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。在角色配置组和单个角色的配置页面中可以找到按资源列出的控件。

-w1919

2.然后在 YARN 中开启 Cgroup

-w1918

使用 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.

-w1917

  • allowed.system.user -w1915 Requested user yarn is not whitelisted and has id 981,which is below the minimum allowed 1000

  • min.user.id -w1625 Requested user yarn is not whitelisted and has id 981,which is below the minimum allowed 1000

  • banned.users -w1910

  • 容器执行程序组 yarn.nodemanager.linux-container-executor.group -w1919

  • 占用节点总 CPU 的百分比 NodeManager 启动的容器占用节点资源的占比,比如这里是 80%,最多只使用节点 80%的 CPU 资源。 Containers CPU Limit Percentage yarn.nodemanager.resource.percentage-physical-cpu-limit -w1918

上述配置项调整后的差异对比:

-w1914

-w1919

3.测试效果

下图为设置 80% 的测试数据79.5%,控制在 80% 以内,符合预期

top命令中 %CPU表示进程占用单个核的比例 %Cpu(s)表示所有用户进程占总cpu的比例 -w742

当前正在运行 3 个 Container -w1712

未开启 Cgroup 时

几乎将服务器打满

-w1358

-w1710

reference