YARN启用Cgroup

56d5b757306905b083d740917170ece1.png

ed7058202858a746d17821c0c5caa9a8.png

“梦想感到一股清凉,在夏日黄昏”

fc46b1ab5213202a396b94b8b1ff66ad.png

111a30ab90cfda657f311d8975699426.png

环境说明

5f5d5c44e51a415a969a669af61b1a91.png

集群测试环境:CDH6.2.1

Linux系统:centos7.6 内存15G 物理核数2个(逻辑核4个)

fb8f9945c6f059589e7844ba0e71d418.png

6054c74a7a80235d0db211a1fd99f52b.png

60f94ab256ccad985e3eeb0ec220cc28.png

未启用CGroup时验证

f5cf165fe05f1e98c535866dcb5b9cfc.png

1.1前置准备

前置条件1:spark.dynamicAllocation.enabled=false,取消动态资源分配并更新到客户端配置,避免应用程序分配过多的CPU,影响判断。

前置条件2:YARN 配置 :yarn.nodemanager.resource.cpu-vcores

6305848992055f62d9f085687ad6fd9b.png

RM UI页面验证结果 总vcore为6 已和物理cpu个数比例 1:1

dbc1ae1e128528a2dada25b60bb699a1.png

测试程序:使用spark pi 程序测试仅启用1个Vcore用于查看CPU使用率(后续的验证也都使用该用例)

spark-submit --class org.apache.spark.examples.SparkPi \
 --master yarn-client \ 
--num-executors 1 \ 
--driver-memory 512m \
 --executor-memory 512m \ 
--executor-cores 1 \ /opt/cloudera/parcels/CDH/jars/spark-examples_2.11-2.4.0-cdh6.2.1.jar 10000

1.2 场景一测试

CGroup未启用,虚拟核跟物理核分配分配为1:1(这也是常用的配置),提交spark 作业后,

在Spark History Server 界面上找到该Application > 查看Executors > Active 的Executor

cm116 节点 确认Vcore 分配为1。

确认Vcore数为1 和 executor 所在机器

c0c6368560116f61af21ff3626d6a286.png

到该节点执行 如下命令:

#查找该程序的进程 ps -ef | grep application_1658928582683_0002 #使用top -p 命令查看进程ID的CPU使用率 top -p 52896

cm116机器top截图 第一行即为cpu使用情况

1b1d899c82226d1cdcb0ece400cca922.png

结论:确认在未启用CGroup的情况下单个Vcore的使用率可以超过100%。

1.3 场景二测试

Cgroup 未启用,虚拟核分配分配为物理核2.5倍 即yarn.nodemanager.resource.cpu-vcores配置为5(当集群要求并发高时可以超配Vcore的数量实现更多的并发)

设置完成重启服务生效 已显示15个vcore

c5e9598c6000903515dcd171c7c1fd46.png

运行上面的Spark程序 查看UI页面 确认机器和vcore

87d6a7e9d8c4ea5013d6c5be8486491c.png

#查找该程序的进程 ps -ef | grep application_1623411625770_0974 #使用top -p 命令查看进程ID的使用率 top -p 18484

2cf85398084473912846cba8b6766ac1.png

结论:单个Vcore的使用率也可以超过100%,如果集群中CPU 使用率高的场景较多的情况下,因为超配的情况,就会出现即使有些作业能够分配Vcore,但是却没有实际物理cpu资源可调度,从而导致应用慢的情况。

1e05acb11a532f67833a8c9315fd363d.png

启用CGroup 时验证

55450488b19a22d5ab7c9c30b854d0d7.png

1.1 Yarn启用CGroup

打开CM yarn配置选择搜索:

1、yarn.nodemanager.linux-container-executor.resources-handler.class

613504ff1406e943a8593b5670b49214.png

2、yarn.nodemanager.container-executor.class

cd4b23564d449d1542447d0a18c6561a.png

3、yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage

0fa2b6d37339368f34f0c6255fbc7350.png

4、在YARN服务> 配置> yarn-site.xml YARN服务高级参数配置代码段(安全阀)

<property>
 <name>yarn.nodemanager.resource.count-logical-processors-as-cores</name> <value>true</value> 
<description>是否将虚拟核当cpu 核心数</description>
 </property> 
<property> <name>yarn.nodemanager.resource.detect-hardware-capabilities</name> <value>true</value> 
<description>YARN 自动探测CPU和内存</description>
 </property>
 <property>
 <name>yarn.nodemanager.resource.cpu-vcores</name>
 <value>-1</value> 
<description>关闭虚拟vcore配置,如物理机有启用超线程不关闭该参数无法读取到超线程核数</description>
 </property>
 <property> <name>yarn.nodemanager.resource.pcores-vcores-multiplier</name> <value>2.5</value> 
<description>物理核与vcore的配比倍数</description>
 </property>

fbc99aa9d6a1925467a7ed3f2b252b8b.png

5、打开CM首页->Hosts->Hosts Configuration

搜索Enable Cgroup-based Resource Management

9c90f728c314eea39835276c3968b550.png

6、重启集群此时cgroup已启用

1.2 验证

1、开始运行spark pi 程序程序测试

查看任务ui页面

e06216632823efbc5951300f84cfffff.png

查看进程任务

7e89970fb7251c1600c3af28e189cc71.png

如上图所示,运行的应用程序cgroups目录默认在/var/lib/yarn-ce/cgroups/cpu/hadoop-yarn 目录下

查看CPU使用率

top -e 进程ID 结果展示CPU使用率稳定在40&左右

1e371b2f4426f268d127907d41cab4ec.png

在2.5倍Vcore的配置下,CPU使用率一直在40%左右,符合期望值。

如果启用CGroup限制成功那么理论值应该在40%,理论CPU最大使用率= 物理core数量/ Vcore数量*100%

比如我集群的物理core数量是2核,配置的Vcore数量是2.5倍。一台机器的总vcore为5个, 那么每个Vcore的CPU最大使用率是 2/5*100%=40%,如果配置的Vcore数量是2倍,那么那么每个Vcore的CPU最大使用率是 2/4*100%=50%.

c89ed6ab6084bde6148f7b9d427c9ec4.png

总结

ced57121959df70edc155b717fe0a5f2.png

启用CGroup对CPU的最大使用率进行限制,可以使作业性能可预测(比如预估Spark Streaming 作业中每个executor的Vcore可以处理数据量的大小)。在分配同样的cpu下,如果不设置严格CPU使用率限制,则CPU密集型作业在集群未大量使用时运行得更快(例如所表现的情况是同样CPU资源分配下,Spark Streaming 作业中每个executor的Vcore可以处理数据量的大),但在集群中运行更多作业时运行速度较慢(可能的风险是例如同样CPU资源分配下Spark Streaming 作业中每个executor的Vcore可以处理数据量的小,导致数据堆积从而导致应用失败)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值