EMR yarn集成Cgroup

耀灵1年前技术文章439


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


相关文章

EMR部署Kudu

EMR部署Kudu

前置准备部署kudu的节点yum安装cyrus相关包,如果有不通外网的可以在通外网的节点开启yum缓存包配置,将yum包缓存在本地后scp到不通外网的节点在进行yum安装。yum install cy...

linux时间同步工具Chrony的配置和使用

linux时间同步工具Chrony的配置和使用

一、chrony简介       chronony是网络时间协议(NTP)的通用实现。它可以同步系统时钟与NTP服务器,chronyd包含两个程序,chronyd是一个守护进程,chronyc是一个命...

HBase使用snappy压缩

HBase使用snappy压缩

安装编译环境依赖yum install -y automake autoconf gcc-c++ cmake libedit libtool openssl-devel ncurses-devel安装...

静默安装oracle11g单实例

环境: CentOS 7.8 11.2.0.4.0 orclp:172.16.104.31一、准备1、依赖包检查pdksh 在 redhat 上叫 ksh检查是否有安装root# rpm -q bin...

CDP实操--集群扩容

CDP实操--集群扩容

一、前提准备工作1.确保OS的yum源可以正常使用,通过yum repolist命令可以查看到匹配的OS的所有包2.确保Cloudera Manager的yum源运行正常3.hosts文件配置,需要将...

hive部署

安装前准备修改环境变量vi /etc/profile 添加内容如下:(hive节点都要执行)export HIVE_HOME=/opt/hiveexport PATH=$PATH:$HIVE_HOME...

发表评论    

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