前言

部分内容摘自尚硅谷、黑马等等培训资料

1. YARN Resource资源配置

  YARN 支持可扩展的资源模型。默认情况下,YARN会跟踪所有节点,应用程序和队列的CPU和内存,但资源定义可以扩展为包含任意 “countable” 资源。可数资源是在容器运行时消耗的资源,但之后会释放,CPU 和内存都是可数资源。
  此外,YARN 还支持使用 “resource profiles”,允许用户通过单个配置文件指定多个资源请求,例如,“large” 可能意味着 8 个虚拟内核和 16GB RAM。
  默认情况,提交 MapReduce 程序运行至 YARN 集群时,日志信息中显示出resource-types.xml资源类型配置文件未到,原因在于没有进行 YARN Resource 配置。

2. 资源配置参数

  如果进行 YARN Resource 配置,相关参数说明如下:

  • 启动资源配置:yarn-site.xml
    • 参数:yarn.resourcemanager.resource-profiles.enabled,是否启用资源配置文件支持,默认为 false;
  • 资源类型配置:resource-types.xml
    • 参数:yarn.resource-types,逗号分隔的附加资源列表;
    • 参数:yarn.resource-types.<resource>.units,指定资源类型的默认单位;
    • 参数:yarn.resource-types.<resource>.minimum-allocation,指定资源类型的最小请求;
    • 参数:yarn.resource-types.<resource>.minimum-allocation,指定资源类型的最大请求;
  • 节点资源配置:node-resource.xml
    • 参数:yarn.nodemanager.resource-type.<resource>,节点管理器中可用的指定资源的数量;

  注意,如果使用resource-types.xmlnode-resources.xml文件,则还需要将它们放在与yarn-site.xml相同的配置目录[$HADOOP_HOME/etc/hadoop]中,或者将属性放入yarn-site.xml文件中。

3. YARN资源模型

  YARN 在资源模型设置与管理中,可以分为2个方面:ResourceManager 和 NodeManager 设置。

3.1 Resource Manager

  资源管理器是跟踪集群中哪些资源的最终仲裁者。资源管理器从 XML 配置文件加载其资源定义。例如,要定义除 CPU 和内存之外的新资源,应配置以下属性:

1
2
3
4
5
6
7
8
<property>
<name>yarn.resource-types</name>
<value>resource1,resource2</value>
<description>
The resources to be used for scheduling.
Use resource-types.xml to specify details about the individual resource types.
</description>
</property>

  对于定义的每个新资源类型,可以添加可选的单元属性以设置资源类型的默认单位,及具有可选的最小和最大属性。可以定义yarn-site.xml文件或在一个文件名为resource-types.xml中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<configuration>
<property>
<name>yarn.resource-types</name>
<value>resource1, resource2</value>
</property>
<property>
<name>yarn.resource-types.resource1.units</name>
<value>G</value>
</property>
<property>
<name>yarn.resource-types.resource2.minimum-allocation</name>
<value>1</value>
</property>
<property>
<name>yarn.resource-types.resource2.maximum-allocation</name>
<value>1024</value>
</property>
</configuration>

3.2 Node Manager

  每个节点管理器独立定义该节点可用的资源。资源定义是通过为每个可用资源设置属性来完成的,可以放在通常的yarn-site.xml文件或名为noderesources.xml的文件中。属性的值应该是节点提供的资源量。例如:

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>yarn.nodemanager.resource-type.resource1</name>
<value>5G</value>
</property>
<property>
<name>yarn.nodemanager.resource-type.resource2</name>
<value>2m</value>
</property>
</configuration>

  注意,此处资源的单位不需要与资源管理器持有的定义匹配,如果单位不匹配,会自动进行转换。

4. MapReduce 使用 Resource

  MapReduce 从 YARN 请求三种不同类型的容器:master container,map containers 和 reduce containers 。对于每种容器类型,都有一组相应的属性可用于设置所请求的资源。
  在 MapReduce 中设置资源请求的属性是:

属性 描述
yarn.app.mapreduce.am.resource.memory-mb 将应用程序主容器请求的内存设置为以 MB 为单位的值。默认为 1536
yarn.app.mapreduce.am.resource.vcores 将应用程序 master container 请求的 CPU 设置为该值。默认为 1
yarn.app.mapreduce.am.resource.<resource> 将应用程序 master container 的<resource> 请求的数量设置为该值
mapreduce.map.resource.memory-mb 将所有 map master container 请求的内存设置为以 MB 为单位的值。默认为 1024
mapreduce.map.resource.vcores 将所有映射 map master container 请求的 CPU 设置为该值。默认为 1
mapreduce.map.resource.<resource> 将所有 map master container 的 <resource> 请求的数量设置为该值
mapreduce.reduce.resource.memory-mb 将所有 educe task container 请求的内存设置为以 MB 为单位的值。默认为 1024
mapreduce.reduce.resource.<resource> 将所有 educe task container 的 <resource> 请求的数量设置为该值

  注意,YARN 可以修改这些资源请求以满足配置的最小和最大资源值,或者是配置增量的倍数。