开启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 使用极高的任务,常常会导致节点上运行的所有的任务都延时。
1、安装cgroup
默认系统已经安装了cgroup了,如果没有安装可以通过命令安装
yum install -y libcgroup-tools ##nodemanager节点都要安装
然后通过命令启动:
systemctl start cgconfig.service
2、Cloudera Manager 中设置
2.1先在主机上开启 启用基于 Cgroup 的资源管理
启用使用控制组 (cgroup) 的资源管理。当切换此开关后,必须重启该主机上的角色才能启用或禁用 cgroup。在角色配置组和单个角色的配置页面中可以找到按资源列出的控件。
2.2 然后在 YARN 中开启 Cgroup
注意:
开启了 yarn.nodemanager.container-executor.class 后,会自动开启运行用户的设置,报错信息如下
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://yilitestdn02.com:18088/cluster/app/application_1623116025711_0002 Then click on links to logs of each attempt. . Failing the application.
使用 Linux Container Executor 的非安全模式的 UNIX 用户 yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user 在非安全模式中使用 Linux-container-executor 时,运行容器的 UNIX 用户。
设置允许系统用户:
设置最小用户id
禁止的系统用户,只保留bin
容器执行程序组 yarn.nodemanager.linux-container-executor.group
占用节点总 CPU 的百分比 NodeManager 启动的容器占用节点资源的占比,比如这里是 80%,最多只使用节点 80%的 CPU 资源。 Containers CPU Limit Percentage yarn.nodemanager.resource.percentage-physical-cpu-limit
上述配置调整后的差异对比: