EMR yarn集成Cgroup

耀灵10个月前技术文章210


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


相关文章

数据湖技术之iceberg(六)Iceberg表数据组织与查询

数据湖技术之iceberg(六)Iceberg表数据组织与查询

1     Iceberg表数据组织与查询1) 下载avro-tools jar包由于后期需要查看avro文件内容,我们可以通过avro-tool.jar来查看...

Hive 重新编译-解决Tez JobName的问题

Hive 重新编译-解决Tez JobName的问题

本文采用linux编译首先下载源码https://dlcdn.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-src.tar.gz源码位置ql/src/jav...

大数据集群监控配置操作指导(一)prometheus+grafana部署

大数据集群监控配置操作指导(一)prometheus+grafana部署

1.prometheus+grafana部署(单独部署到一台服务器。4c8g。系统盘300G。操作系统建议7.6到7.9)1.1下载prometheus和grafana的二进制包mkdir /opt/...

oradebug收集事件10046

oradebug 查看10046这是SQL*Plus的工具,需要提供OSPID或者Oracle PID。--1、跟踪当前会话--设置追踪会话oradebug setmypid; --设置trace大小...

flink web监控

flink web监控

1.1 监控指标进入Flink的原生页面,需要从yarn的原生页面的后台链接进入,如下图:这里必须要用supergroup组的用户或者flink提交任务的用户(如果该用户是机机用户不能登录)才能够看到...

ES运维(四)扩容方式迁移

ES运维(四)扩容方式迁移

1 迁移概述本次模拟es在线迁移方式:集群扩容-->数据迁移-->老节点下线-->服务重启刷新配置。 中间master替换的时候会有短暂的不可用。 另外业务测需注意:老节点下线前...

发表评论    

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