Hadoop YARN配置参数剖析

本文部分转自 Hadoop YARN配置参数剖析(1)—RM与NM相关参数
本文部分转自 Hadoop YARN中内存的设置

  • 一 ResourceManager 相关配置参数
    • 1 通信配置参数
    • 2 调度器配置参数
    • 3 内存和 CPU 配置参数
  • 二 NodeManager 相关配置参数
    • 1 内存与 CPU 配置参数
    • 1 日志配置参数
    • 3 运行配置参数
  • 三 Hadoop YARN 中内存的设置详解
    • 1 nodemanager 属性配置
    • 2 动态设置内存大小
    • 3 总结内存配置

注意,配置这些参数前,应充分理解这几个参数的含义,以防止误配给集群带来的隐患。另外,这些参数均需要在 yarn-site.xml 中配置。

一. ResourceManager 相关配置参数

1.1 通信配置参数

1. yarn.resourcemanager.address

  • 参数解释:ResourceManager 对客户端暴露的地址。客户端通过该地址向 RM 提交应用程序,杀死应用程序等
  • 默认值:${yarn.resourcemanager.hostname}:8032

2. yarn.resourcemanager.scheduler.address

  • 参数解释:ResourceManager 对 ApplicationMaster 暴露的访问地址。ApplicationMaster 通过该地址向 RM 申请资源、释放资源等
  • 默认值:${yarn.resourcemanager.hostname}:8030

3. yarn.resourcemanager.resource-tracker.address

  • 参数解释:ResourceManager 对 NodeManager 暴露的地址.。NodeManager 通过该地址向 RM 汇报心跳,领取任务等
  • 默认值:${yarn.resourcemanager.hostname}:8031

4. yarn.resourcemanager.admin.address

  • 参数解释:ResourceManager 对管理员暴露的访问地址。管理员通过该地址向 RM 发送管理命令等。
  • 默认值:${yarn.resourcemanager.hostname}:8033

5. yarn.resourcemanager.webapp.address

  • 参数解释:ResourceManager 对外 web ui 地址。用户可通过该地址在浏览器中查看集群各类信息
  • 默认值:${yarn.resourcemanager.hostname}:8088

1.2 调度器配置参数

1. yarn.resourcemanager.scheduler.class

  • 参数解释:启用的资源调度器主类。目前可用的有 FIFO、Capacity Scheduler 和 Fair Scheduler。
  • 默认值:Fair Scheduler (hadoop 2.5)

2. yarn.resourcemanager.resource-tracker.client.thread-count

  • 参数解释:处理来自 NodeManager 的 RPC 请求的 Handler 数目
  • 默认值:50

3. yarn.resourcemanager.scheduler.client.thread-count

  • 参数解释:处理来自 ApplicationMaster 的 RPC 请求的 Handler 数目
  • 默认值:50

4. yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path

  • 参数解释:NodeManager 黑白名单。如果发现若干个 NodeManager 存在问题,比如故障率很高,任务运行失败率高,则可以将之加入黑名单中。注意,这两个配置参数可以动态生效。(调用一个 refresh 命令即可)

  • 默认值:“”

5. yarn.resourcemanager.nodemanagers.heartbeat-interval-ms

  • 参数解释:NodeManager 心跳间隔
  • 默认值:1000(毫秒)

1.3 内存和 CPU 配置参数

1. yarn.scheduler.minimum-allocation-mb/ yarn.scheduler.maximum-allocation-mb

  • 参数解释:单个可申请的最小/最大内存资源量。比如设置为 1024 和 3072,则运行 MapRedce 作业时,每个 Task 最少可申请 1024MB 内存,最多可申请 3072MB 内存
  • 默认值:1024/8192

2. yarn.scheduler.minimum-allocation-vcores / yarn.scheduler.maximum-allocation-vcores

  • 参数解释:单个可申请的最小/最大虚拟 CPU 个数。比如设置为 1 和 4,则运行 MapRedce 作业时,每个 Task 最少可申请 1 个虚拟 CPU,最多可申请 4 个虚拟 CPU
  • 默认值:1/32


二. NodeManager 相关配置参数

2.1 内存与 CPU 配置参数

1. yarn.nodemanager.resource.memory-mb

  • 参数解释:NodeManager 总的可用物理内存。注意,该参数是不可修改的,一旦设置,整个运行过程中不 可动态修改。另外,该参数的默认值是 8192 MB,即使你的机器内存不够 8192 MB,YARN 也会按照这些内存来使用,因此,这个值通过一 定要配置。不过,Apache 已经正在尝试将该参数做成可动态修改的
  • 默认值:8192

2. yarn.nodemanager.vmem-pmem-ratio

  • 参数解释:每使用 1MB 物理内存,最多可用的虚拟内存数
  • 默认值:2.1

3. yarn.nodemanager.resource.cpu-vcores

  • 参数解释:NodeManager总的可用虚拟CPU个数
  • 默认值:8

2.1 日志配置参数

1. yarn.nodemanager.local-dirs

  • 参数解释:中间结果存放位置,类似于 1.0 中的 mapred.local.dir。注意,这个参数通常会配置多个目录,已分摊磁盘IO负载
  • 默认值:${hadoop.tmp.dir}/nm-local-dir

2. yarn.nodemanager.log-dirs

  • 参数解释:日志存放地址(可配置多个目录)。
  • 默认值:${yarn.log.dir}/userlogs

3. yarn.nodemanager.log.retain-seconds

  • 参数解释:NodeManager上日志最多存放时间(不启用日志聚集功能时有效)。
  • 默认值:10800(3小时)

2.3 运行配置参数

1. yarn.nodemanager.aux-services

  • 参数解释:NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序
  • 默认值:“”


三. Hadoop YARN 中内存的设置详解

在 YARN 中,资源管理由 ResourceManager 和 NodeManager 共同完成,其中,ResourceManager 中的调度器负责资源的分配,而 NodeManager 则负责资源的供给和隔离。ResourceManager 将某个 NodeManager 上资源分配给任务(这就是所谓的“资源调度”)后,NodeManager 需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证,这就是所谓的资源隔离。

3.1 nodemanager 属性配置

基于以上考虑,YARN 允许用户配置每个节点上可用的物理内存资源,注意,这里是“可用的”,因为一个节点上的内存会被若干个服务共享,比如一部分给 YARN,一部分给 HDFS,一部分给 HBase等,YARN 配置的只是自己可以使用的,配置参数如下:

1. yarn.nodemanager.resource.memory-mb

表示该节点上 YARN 可使用的物理内存总量,默认是 8192(MB),注意,如果你的节点内存资源不够 8GB,则需要调减小这个值,而 YARN 不会智能的探测节点的物理内存总量。

2. yarn.nodemanager.vmem-pmem-ratio

任务每使用 1MB 物理内存,最多可使用虚拟内存量,默认是2.1。

Hadoop YARN配置参数剖析_第1张图片

3. yarn.nodemanager.pmem-check-enabled

是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true。

4. yarn.nodemanager.vmem-check-enabled

是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true。

5. yarn.scheduler.minimum-allocation-mb

单个任务可申请的最少物理内存量,默认是1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数。

6. yarn.scheduler.maximum-allocation-mb

单个任务可申请的最多物理内存量,默认是8192(MB)。

默认情况下,YARN 采用了线程监控的方法判断任务是否超量使用内存,一旦发现超量,则直接将其杀死。由于 Cgroups 对内存的控制缺乏灵活性(即任务任何时刻不能超过内存上限,如果超过,则直接将其杀死或者报 OOM),而 Java 进程在创建瞬间内存将翻倍,之后骤降到正常值,这种情况下,采用线程监控的方式更加灵活(当发现进程树内存瞬间翻倍超过设定值时,可认为是正常现象,不会将任务杀死),因此 YARN 未提供 Cgroups 内存隔离机制。

3.2 动态设置内存大小

可以使用如下命令在提交任务时动态设置:

hadoop jar <jarName> -D mapreduce.map.memory.mb=5120
或者
hadoop jar <jarName> -D mapreduce.reduce.memory.mb=5120

例如如下,其中后面的 1024 及两个 1 均为 jar 的输入参数。

./bin/hadoop jar /home/hadoop/jar-output/TestLoop-1024M.jar -D mapreduce.map.memory.mb=5120 AESEnTest 1024 1 1
或者
 ./bin/hadoop jar /home/hadoop/jar-output/TestLoop-1024M.jar -D mapreduce.map.memory.mb=5120 AESEnTest 1024 1 1

3.3 总结内存配置

当发生如下错误

Container [pid=24156,containerID=container_1427332071311_0019_01_000002] is running beyond physical memory limits. Current usage: 2.1 GB of 2 GB physical memory used; 2.7 GB of 4.2 GB virtual memory used. Killing container.

1. 在 RM 内存资源配置——两个参数(yarn-site.xml)

  • yarn.scheduler.minimum-allocation-mb
  • yarn.scheduler.maximum-allocation-mb

它们表示单个容器可以申请的最小与最大内存

2. 在 NM 内存资源配置(yarn-site.xml)

  • yarn.nodemanager.resource.memory-mb
  • yarn.nodemanager.vmem-pmem-ratio

前者表示单个节点可用的最大内存,RM 中的两个值都不应该超过该值。
后者表示虚拟内存率,即占 task 所用内存的百分比,默认为 2.1。

3. 在 AM 配置(mapred-site.xml)

  • mapreduce.map.memory.mb
  • mapreduce.reduce.memory.mb

指定 map 和 reduce task 的内存大小,该值应该在 RM 的最大最小 container 之间。如果不设置,则默认用以下规则进行计算:max{MIN_Container_Size,(Total Available RAM/containers)}

一般地,reduce 设置为 map 的两倍。

  • mapreduce.map.java.opts
  • mapreduce.reduce.java.opts

这两个参数是为需要运行 JVM 程序(java,scala等)准备,通过这两个参数可以向 JVM 中传递参数,与内存有关的是 -Xmx, -Xms 等选项,数值的大小应该要在 AM 中的 map.mb 和 reduce.mb 之间。

你可能感兴趣的:(Hadoop YARN配置参数剖析)