YARN中的CPU资源隔离-CGroups

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: YARN中集成了CGroups的功能,使得NodeManger可以对container的CPU的资源使用进行控制,比如可以对单个container的CPU使用进行控制,也可以对NodeManger管理的总CPU进行控制。

0. 前言

CGroups(Control Groups)是Linux内核的一个资源隔离功能,限制/隔离/统计进程的资源使用,包括CPU/内存/磁盘IO/网络等资源。

YARN中也集成了CGroups的功能,使得NodeManger可以对container的CPU的资源使用进行控制,比如可以对单个container的CPU使用进行控制,也可以对NodeManger管理的总CPU进行控制。

1. YARN开启CGroups功能

E-MapReduce集群中的YARN默认没有开启CGroups的功能,需要用户根据需求进行开启,下面介绍如何在E-MapReduce集群中开启CGroups。

1.1 umount cgroups cpu

E-MapReduce集群使用的是Centos7的操作系统,默认CGroups的cpu和cpuacct两个子系统控制器(SubSystem Controller)合并到一起,mount的路径在/sys/fs/cgroup/cpu,cpuacct

由于NodeManger在launch container的时候,有个CGroups路径逻辑会以逗号进行解析分隔,所以会造成/sys/fs/cgroup/cpu,cpuacct被错误的解析出/sys/fs/cgroup/cpu,从而导致container启动失败。所以需要避免cpu控制器的mount路径出现逗号,我们需要将默认的mount路径umount掉,然后后续可以交给NodeManger去自动mount到另外一个可配置的路径。

集群上所有节点执行

#umount原来默认路径
umount /sys/fs/cgroup/cpu,cpuacct

#创建新的cpu控制器mount路径
mkdir -p /cgroup/cpu

1.2 配置YARN

可参考官方文档Using CGroups with YARN

添加CGroups配置

在E-MapReduce的集群配置管理页面下的YARN的yarn-site中添加如下配置:

配置名称 备注
yarn.nodemanager.container-executor.class org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor
yarn.nodemanager.linux-container-executor.resources-handler.class org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler
yarn.nodemanager.linux-container-executor.group hadoop 跟/etc/ecm/hadoop-conf/container-executor.cfg文件中yarn.nodemanager.linux-container-executor.group对应的值保持一致
yarn.nodemanager.linux-container-executor.cgroups.mount-path /cgroup 1.1节中新建的CGroups路径,不需要加上/cpu,YARN会自动在该路径后补上/cpu,即/cgroup/cpu
yarn.nodemanager.linux-container-executor.cgroups.mount true 1.1节umount原来的路径后,只是新建了一个新路径/cgroup/cpu,并未mount上cpu控制器,所以这地方需设置为true让YARN去做mount操作
选择添加其它配置

除了上述开启CGroups功能相关的参数外,还有相关参数可以选择设置(针对非Kerberos安全集群)。

配置名称 备注
yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user 建议不做设置,默认是nobody
yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-users false 设置为false,即以实际提交作业的用户跑作业,否则会使用上面local-user的固定用户来运行作业

1.3 重启YARN

添加完上述配置后,在E-MapReduce集群配置管理下的重启YARN集群。

2. YARN中CGroups对CPU控制测试

2.1 控制参数

在开启了CGroups功能的前提下,可以通过调节YARN中的参数来控制CPU的资源使用行为:

配置名称 描述
yarn.nodemanager.resource.percentage-physical-cpu-limit NodeManager管理的所有container使用CPU的硬性比例,默认100%
yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage 对container的CPU使用资源是否严格按照被分配的比例进行控制,即使CPU还有空闲。默认是false,即container可以使用空闲CPU

备注:
任何场景下,NodeManger管理的container的CPU都不能超过yarn.nodemanager.resource.percentage-physical-cpu-limit比例。

2.2 测试

2.2.1 总container的CPU控制测试

通过调节yarn.nodemanager.resource.percentage-physical-cpu-limit参数来控制NodeManager管理的所有container的CPU使用。

下面分别设置该值为10/30/50为例,在yarn中跑一个hadoop pi作业,观察NodeManger所在机器的cpu耗费情况。

集群配置为3台4核16GB,其中2台NodeManger,1台ResourceManager

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

10
physical_cpu_10_1
如上图所示:
%Cpu(s)接近10%
%CPU所有的test用户的container进程加起来(7%+5.3%+5%+4.7%+4.7%+4.3%+4.3%+4%+2%=41.3%=0.413个核,约等于10%*4core,即4个核的10%比例)

30
physical_cpu_30_1
如上图所示:
%Cpu(s)接近30%
%CPU所有的test用户的container进程加起来(19%+18.3%+18.3%+17%+16.7%+16.3%+14.7%+12%=132.3%=1.323个核,约等于30%*4core=1.2核,即4个核的30%比例)

50
physical_cpu_50_1
如上图所示:
%Cpu(s)接近50%
%CPU所有的test用户的container进程加起来(65.1%+60.1%+43.5%+20.3%+3.7%+2%=194.7%=1.947个核,约等于50%*4core=2核,即4个核的50%比例)

2.2.2 container间的CPU控制测试

NodeManger上面启动多个container,所有这些container对CPU资源的占用不超过2.2.1中设置yarn.nodemanager.resource.percentage-physical-cpu-limit的硬性比例上限。

在硬性上限前提下,NodeManger有两种方式来管理控制多个container之间的CPU使用率,这两种方式通过参数yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage来进行控制。

  • 共享模式(share)

yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage设置为false时即为共享模式(默认为false)。

在这种模式下,container除了实际被需要分配的CPU资源外,还可以利用空闲的CPU资源。

例如如果一个container的vcore为1,NodeManger配置的vcore为8,yarn.nodemanager.resource.percentage-physical-cpu-limit设置为50%,NodeManger所在节点是4core,那么该container申请按比例被分配的cpu资源为(1vcore/8vcore)(4core50%)=0.25core,但是如果CPU有空闲,理论上该container可以占满NodeManger管理的上限(4core*50%=2core)

以上述2.2.1节中hadoop pi为例:
yarn.nodemanager.resource.percentage-physical-cpu-limit=50
yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage=false

physical_cpu_50_1

上图可以看出,test用户的多个container进程占用CPU核数的比例相差很大(65%=0.65core 60.1%=0.61core 3.7%=0.37core等),即单个container的CPU使用没有被严格限制在(1vcore/8vcore)(4core50%)=0.25core

  • 严格模式(strict)

yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage设置为true时即为严格模式。

在这种模式下,container只能使用被需要分配的CPU资源,即使CPU有空闲也不能使用。

以上述共享模式同样参数作业为例,只是将该参数改为true:
yarn.nodemanager.resource.percentage-physical-cpu-limit=50
yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage=true

physical_cpu_strict

如上图所示,test账号下的每个container占用的CPU核数均在0.25core附近(26.6%=0.266core 24.9%=0.249core),而0.25core即为该container实际应该被分配的CPU((1vcore/8vcore)(4core50%)=0.25core)

有兴趣或者有需求的用户可以关注一下E-MapReduce的安全相关的功能,有问题及时联系和反馈。

c7c8f09ebf3cc7795e0dd0da330cec88

相关实践学习
基于EMR Serverless StarRocks一键玩转世界杯
基于StarRocks构建极速统一OLAP平台
快速掌握阿里云 E-MapReduce
E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 本课程主要介绍阿里云 E-MapReduce 的使用方法。
目录
相关文章
|
1月前
|
存储 安全 算法
CPU资源
【10月更文挑战第2天】CPU资源
72 5
|
1月前
|
资源调度 分布式计算 大数据
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
90 0
|
3月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
244 0
|
3月前
|
资源调度 分布式计算 Hadoop
揭秘Hadoop Yarn背后的秘密!它是如何化身‘资源大师’,让大数据处理秒变高效大戏的?
【8月更文挑战第24天】在大数据领域,Hadoop Yarn(另一种资源协调者)作为Hadoop生态的核心组件,扮演着关键角色。Yarn通过其ResourceManager、NodeManager、ApplicationMaster及Container等组件,实现了集群资源的有效管理和作业调度。当MapReduce任务提交时,Yarn不仅高效分配所需资源,还能确保任务按序执行。无论是处理Map阶段还是Reduce阶段的数据,Yarn都能优化资源配置,保障任务流畅运行。此外,Yarn还在Spark等框架中展现出灵活性,支持不同模式下的作业执行。未来,Yarn将持续助力大数据技术的发展与创新。
58 2
|
3月前
|
资源调度 分布式计算 Hadoop
揭秘Hadoop Yarn三大调度器:如何玩转资源分配,实现高效集群管理?
【8月更文挑战第24天】Hadoop YARN(Another Resource Negotiator)是一款强大的集群资源管理工具,主要负责高效分配及管理Hadoop集群中的计算资源。本文深入剖析了YARN的三种调度器:容量调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)以及FIFO调度器,并通过具体的配置示例和Java代码展示了它们的工作机制。
69 2
|
3月前
|
缓存 Kubernetes 数据中心
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
|
3月前
|
图形学 C# 开发者
Unity粒子系统全解析:从基础设置到高级编程技巧,教你轻松玩转绚丽多彩的视觉特效,打造震撼游戏画面的终极指南
【8月更文挑战第31天】粒子系统是Unity引擎的强大功能,可创建动态视觉效果,如火焰、爆炸等。本文介绍如何在Unity中使用粒子系统,并提供示例代码。首先创建粒子系统,然后调整Emission、Shape、Color over Lifetime等模块参数,实现所需效果。此外,还可通过C#脚本实现更复杂的粒子效果,增强游戏视觉冲击力和沉浸感。
182 0
|
4月前
|
运维 DataWorks 安全
DataWorks产品使用合集之如何查看空间资源、CPU、内存和存储空间容量
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
NoSQL MongoDB 索引
MongoDB 占用CPU资源过高
MongoDB 占用CPU资源过高
45 0
|
4月前
|
机器学习/深度学习 分布式计算 大数据
MaxCompute产品使用合集之如何查看空间资源、CPU和内存以及存储空间容量
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。