EMR yarn集成Cgroup

耀灵2年前技术文章722


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


相关文章

apache Kyuubi部署及对接hive

apache Kyuubi部署及对接hive

1、背景客户重度使用spark sql,但是使用spark thriftserver存在各种各样的问题,我们选择使用kyuubi来替代spark thriftserver的使用2、安装包下载下载地址:...

Python Web 自动化测试工具 — Selenium

Selenium 是一个 Web 自动化测试工具,Selenium 通过非常简洁方便的 API,使用 Selenium WebDrivers(Selenium web 驱动器)像使用 Firefox,...

大数据集群二次开发及调优使用指导(三)-Hive

大数据集群二次开发及调优使用指导(三)-Hive

1.   业务调优:Hive业务的业务主要以批量处理作业为主,批处理主要特点是耗时时间长,消耗的资源比较多,主要的调优和设计推荐如下:1.   &nb...

Flink window详解

Flink window详解

一、窗口(window)一般真实的流都是无界的,如果是无界怎样处理无界的数据可以把无限的数据流进行切分,得到有限的数据集进行处理 —— 也 就是得到有界流 窗口(window)就是将无限流切割为有限流...

emr部署hive并适配达梦数据库

emr部署hive并适配达梦数据库

一、达梦 用户、数据库初始化1、创建hive的元数据库create tablespace hive_meta datafile '/dm8/data/DAMENG/hive_meta.dbf' siz...

MySQL 函数触发隐式转换应对策略

前言MySQL 中,当 SQL 索引字段使用了函数的话,会出现隐式转换的问题,导致索引失效,从而导致 SQL 执行效率变慢。本篇文章介绍 MySQL 不同版本此类问题的应对策略。1. 环境介绍以下是本...

发表评论    

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