EMR yarn集成Cgroup

耀灵2年前技术文章578


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

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

1.安装cgroup

默认系统已经安装了cgroup了,如果没有安装可以通过命令安装

yum install -y libcgroup-tools   ##nodemanager节点都要安装

然后通过命令启动:

systemctl start cgconfig.service

2. YARN开启CGroups功能

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

2.1 配置YARN

添加CGroups配置

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

/opt/dtstack/Hadoop/hadoop_pkg/etc/hadoop/yarn-site.xml

配置名称

备注

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

跟/opt/dtstack/Hadoop/hadoop_pkg/etc/container-executor.cfg文件中yarn.nodemanager.linux-container-executor.group对应的值保持一致

yarn.nodemanager.linux-container-executor.cgroups.mount-path

/sys/fs/cgroup

不需要加上/cpu,YARN会自动在该路径后补上/cpu,即/sys/fs/cgroup/cpu

yarn.nodemanager.linux-container-executor.cgroups.mount

false

/sys/fs/cgroup路径下已经mount上cpu控制器,所以这地方需设置为false让YARN不去做mount操作

选择添加其它配置

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

配置名称

备注

yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user

yarn

建议不做设置,默认是nobody

yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-users

false

设置为false,即以实际提交作业的用户跑作业,否则会使用上面local-user的固定用户来运行作业

在开启了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

备注:

1.使用 yarn.nodemanager.resource.percentage-physical-cpu-limit 来设置所有 containers 的总的 CPU 使用率占用总的 CPU 资源的百分比。所有的containers的CPU使用总和在任何情况下都不会超过机器总体CPU资源的60%。

2.使用 yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage 设置是否对 container 的 CPU 使用进行严格限制。如果设置为true,即使NodeManager的CPU资源比较空闲,containersCPU使用率也不能超过限制,可以严格限制CPU使用,保证每个container只能使用自己分配到的CPU资源;如果设置为false,container可以在有空闲CPU资源时,超额使用CPU,可以保证NodeManager总体CPU使用率比较高,提升集群的计算性能和吞吐量,所以建议使用非严格的限制方式。但是无论这个值如何设置,所有containers总的CPU使用率都不会超过cpu-limit设置的值。

yarn-site.xml(nodemanager节点都要添加)

  <!-- cgroup -->
<property>
  <name>yarn.nodemanager.container-executor.class</name>
  <value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
</property>
<property>
  <name>yarn.nodemanager.linux-container-executor.resources-handler.class</name>
  <value>org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler</value>
</property>

<property>
  <name>yarn.nodemanager.linux-container-executor.cgroups.hierarchy</name>
  <value>/hadoop-yarn</value>
</property>
<property>
  <name>yarn.nodemanager.linux-container-executor.group</name>
  <value>yarn</value>
</property>


<property>
  <name>yarn.nodemanager.linux-container-executor.cgroups.mount-path</name>
  <value>/sys/fs/cgroup</value>
</property>
<property>
  <name>yarn.nodemanager.linux-container-executor.cgroups.mount</name>
  <value>false</value>
</property>

<property>
  <name>yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user</name>
  <value>yarn</value>
</property>
<property>
  <name>yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-users</name>
  <value>false</value>
</property>
<property>
  <name>yarn.nodemanager.resource.percentage-physical-cpu-limit</name>
  <value>10</value>
</property>
<property>
  <name>yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage</name>
  <value>true</value>
</property>

2.2 重启YARN

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


3.测试

3.1 总container的CPU控制测试

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

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

su - yarn
yarn jar /opt/dtstack/Hadoop/hadoop_pkg/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar pi 400 1000

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

10

1.png

30

2.png

50

3.png

FAQ:

4.png

处理1:

chown -R root:root /opt/dtstack/Hadoop/hadoop_pkg/etc/
chown root:root container-executor.cfg

5.png

6.png


相关文章

MySQL运维实战(5.4) MySQL元数据乱码

表结构Comment乱码如果DDL实际编码和character_set_client设置不一致,也会引起乱码。$ cat test_comment_utf8.sql create...

win2016系统新增辅助网卡无法访问公网

win2016系统新增辅助网卡无法访问公网

问题现象:一台阿里云win2016系统服务器,在主网卡已绑定弹性公网ip之后,再新增了一块辅助网卡,无法访问公网。另外,使用NAT网关做了dnat到辅助网卡的映射。该台服务器网卡信息为:主网卡:172...

Prometheus结合VictoriaMetrics:更高效、稳定的多集群监控方案

在Prometheus的架构中,其核心组件包括Prometheus Server、Exporters、Alertmanager等,它采用基于拉的模型收集指标数据,并存储在本地TSDB中,支持通过Pro...

MySQL排障实战(一)—— 连接异常中断

MySQL排障实战(一)—— 连接异常中断

问题背景数栈数据质量模块,接入客户的数据源后,一执行就报错。报错信息:{"logInfo": {{"jobid":"1a4ebbbd&quo...

Elasticsearch如何使用内存

ES作为一个JAVA程序,其对内存的使用和管理依赖底层JVM。因而设置内存时需要遵从JAVA的普适原则,如-xmx和-xms设置为相同值等。在JVM的基础上,ES对内存的使用可按功能分为以下几大部分:...

flink sql 批处理

进入flink sql命令行sql-client.shSource 表        与所有 SQL 引擎一样,Flink 查询操作是在表上进行。与传统数据库不同,Flink 不在本地管理静态数据;相...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。