说明

最近关于YARN的配置,尤其是调试日志的信息,总是记不住,留个记录,方便以后查看。

转自董西成的博客,在此感谢董西成老师的分享。

ResourceManager

参数名称

作用

默认值

yarn.resourcemanager.address

ResourceManager 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等。

${yarn.resourcemanager.hostname}:8032

yarn.resourcemanager.scheduler.address

ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。

${yarn.resourcemanager.hostname}:8030

yarn.resourcemanager.resource-tracker.address

ResourceManager 对NodeManager暴露的地址.。NodeManager通过该地址向RM汇报心跳,领取任务等。

${yarn.resourcemanager.hostname}:8031

yarn.resourcemanager.admin.address

ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。

${yarn.resourcemanager.hostname}:8033

yarn.resourcemanager.webapp.address

ResourceManager对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息。

${yarn.resourcemanager.hostname}:8088

yarn.resourcemanager.scheduler.class

启用的资源调度器主类。目前可用的有FIFO、Capacity Scheduler和Fair Scheduler。

org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

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

处理来自NodeManager的RPC请求的Handler数目。

50

yarn.resourcemanager.scheduler.client.thread-count

处理来自ApplicationMaster的RPC请求的Handler数目。

50

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

单个可申请的最小/最大内存资源量。比如设置为1024和3072,则运行MapRedce作业时,每个Task最少可申请1024MB内存,最多可申请3072MB内存。

1024/8192

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

单个可申请的最小/最大虚拟CPU个数。比如设置为1和4,则运行MapRedce作业时,每个Task最少可申请1个虚拟CPU,最多可申请4个虚拟CPU。什么是虚拟CPU,可阅读我的这篇文章:“YARN 资源调度器剖析”。

1/32

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

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

""

yarn.resourcemanager.nodemanagers.heartbeat-interval-ms

NodeManager心跳间隔

1000(毫秒)

NodeManager

参数名称

作用

默认值

yarn.nodemanager.resource.memory-mb

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

8192

yarn.nodemanager.vmem-pmem-ratio

每使用1MB物理内存,最多可用的虚拟内存数。

2.1

yarn.nodemanager.resource.cpu-vcores

NodeManager总的可用虚拟CPU个数。

8

yarn.nodemanager.local-dirs

中间结果存放位置,类似于1.0中的mapred.local.dir。注意,这个参数通常会配置多个目录,已分摊磁盘IO负载。

${hadoop.tmp.dir}/nm-local-dir

yarn.nodemanager.log-dirs

日志存放地址(可配置多个目录)。

${yarn.log.dir}/userlogs

yarn.nodemanager.log.retain-seconds

NodeManager上日志最多存放时间(不启用日志聚集功能时有效)。

10800(3小时)

yarn.nodemanager.aux-services

NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序

默认值:""

权限与日志聚集

日志聚集

参数名称

作用

默认值

yarn.log-aggregation-enable

是否启用日志聚集功能。

false

yarn.log-aggregation.retain-seconds

在HDFS上聚集的日志最多保存多长时间。

-1

yarn.log-aggregation.retain-check-interval-seconds

多长时间检查一次日志,并将满足条件的删除,如果是0或者负数,则为上一个值的1/10。

-1

yarn.nodemanager.remote-app-log-dir

当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)。

/tmp/logs

yarn.log-aggregation.retain-seconds

远程日志目录子目录名称(启用日志聚集功能时有效)。

日志将被转移到目录{user}/${thisParam}下

MapReduce

本节所有配置都写在mapred-site.xml中

MapReduce JobHistory

参数名称

作用

默认值

mapreduce.jobhistory.address

MapReduce JobHistory Server地址。

0.0.0.0:10020

mapreduce.jobhistory.webapp.address

MapReduce JobHistory Server Web UI地址。

0.0.0.0:19888

mapreduce.jobhistory.intermediate-done-dir

MapReduce作业产生的日志存放位置。

/mr-history/tmp

mapreduce.jobhistory.done-dir

MR JobHistory Server管理的日志的存放位置。

/mr-history/done

MapReduce作业配置

下面的参数可以配置在客户端的mapred-site.xml中,作为MapReduce作业的缺省配置。也可以在提交作业时单独指定这些参数

参数名称

说明

缺省值

mapreduce.job.name

作业名称

 

mapreduce.job.priority

作业优先级

NORMAL

yarn.app.mapreduce.am.resource.mb

ApplicationMaster占用的内存量

1536

yarn.app.mapreduce.am.resource.cpu-vcores

ApplicationMaster占用的虚拟CPU个数

1

mapreduce.am.max-attempts

ApplicationMaster最大失败尝试次数

2

mapreduce.map.memory.mb

每个Map Task需要的内存量

1024

mapreduce.map.cpu.vcores

每个Map Task需要的虚拟CPU个数

1

mapreduce.map.maxattempts

Map Task最大失败尝试次数

4

mapreduce.reduce.memory.mb

每个Reduce Task需要的内存量

1024

mapreduce.reduce.cpu.vcores

每个Reduce Task需要的虚拟CPU个数

1

mapreduce.reduce.maxattempts

Reduce Task最大失败尝试次数

4

mapreduce.map.speculative

是否对Map Task启用推测执行机制

FALSE

mapreduce.reduce.speculative

是否对Reduce Task启用推测执行机制

FALSE

mapreduce.job.queuename

作业提交到的队列

default

mapreduce.task.io.sort.mb

任务内部排序缓冲区大小

100

mapreduce.map.sort.spill.percent

Map阶段溢写文件的阈值(排序缓冲区大小的百分比)

0.8

mapreduce.reduce.shuffle.parallelcopies

Reduce Task启动的并发拷贝数据的线程数目

5

Fair Scheduler相关参数

本节的参数需要在yarn-site.xml中,将配置参数yarn.resourcemanager.scheduler.class设置为org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler 才会生效。Fair Scheduler的配置选项包括两部分,其中一部分在yarn-site.xml中,主要用于配置调度器级别的参数,另外一部分在一个自定义配置文件(默认是fair-scheduler.xml)中,主要用于配置各个队列的资源量、权重等信息。

yarn-site.xml

参数名称

说明

缺省值

yarn.scheduler.fair.allocation.file

自定义XML配置文件所在位置,该文件主要用于描述各个队列的属性,比如资源量、权重等,具体配置格式将在后面介绍。

 

yarn.scheduler.fair.user-as-default-queue

当应用程序未指定队列名时,是否指定用户名作为应用程序所在的队列名。如果设置为false或者未设置,所有未知队列的应用程序将被提交到default队列中

true

yarn.scheduler.fair.preemption

是否启用抢占机制

false

yarn.scheduler.fair.sizebasedweight

在一个队列内部分配资源时,默认情况下,采用公平轮询的方法将资源分配各各个应用程序,而该参数则提供了另外一种资源分配方式:按照应用程序资源需求数目分配资源,即需求资源数量越多,分配的资源越多。

false

yarn.scheduler.assignmultiple

是否启动批量分配功能。当一个节点出现大量资源时,可以一次分配完成,也可以多次分配完成。

false

yarn.scheduler.fair.max.assign

如果开启批量分配功能,可指定一次分配的container数目。

-1,表示不限制。

yarn.scheduler.fair.locality.threshold.node

当应用程序请求某个节点上资源时,它可以接受的可跳过的最大资源调度机会。当按照分配策略,可将一个节点上的资源分配给某个应用程序时,如果该节点不是应用程序期望的节点,可选择跳过该分配机会暂时将资源分配给其他应用程序,直到出现满足该应用程序需的节点资源出现。通常而言,一次心跳代表一次调度机会,而该参数则表示跳过调度机会占节点总数的比例

-1.0,表示不跳过任何调度机会

yarn.scheduler.fair.locality.threshold.rack

当应用程序请求某个机架上资源时,它可以接受的可跳过的最大资源调度机会。

 

yarn.scheduler.increment-allocation-mb

内存规整化单位

默认是1024,这意味着,如果一个Container请求资源是1.5GB,则将被调度器规整化为ceiling(1.5 GB / 1GB) * 1G=2GB。

yarn.scheduler.increment-allocation-vcores

虚拟CPU规整化单位

默认是1,含义与内存规整化单位类似。

自定义配置文件

Fair Scheduler允许用户将队列信息专门放到一个配置文件(默认是fair-scheduler.xml),对于每个队列,管理员可配置以下几个选项:

参数名称

说明

缺省值

minResources

最少资源保证量,设置格式为“X mb, Y vcores”,当一个队列的最少资源保证量未满足时,它将优先于其他同级队列获得资源,对于不同的调度策略(后面会详细介绍),最少资源保证量的含义不同,对于fair策略,则只考虑内存资源,即如果一个队列使用的内存资源超过了它的最少资源量,则认为它已得到了满足;对于drf策略,则考虑主资源使用的资源量,即如果一个队列的主资源量超过它的最少资源量,则认为它已得到了满足。

 

maxResources

最多可以使用的资源量,fair scheduler会保证每个队列使用的资源量不会超过该队列的最多可使用资源量。

 

maxRunningApps

最多同时运行的应用程序数目。通过限制该数目,可防止超量Map Task同时运行时产生的中间输出结果撑爆磁盘。

 

minSharePreemptionTimeout

最小共享量抢占时间。如果一个资源池在该时间内使用的资源量一直低于最小资源量,则开始抢占资源。

 

schedulingMode/schedulingPolicy

队列采用的调度模式,可以是fifo、fair或者drf。

 

aclSubmitApps

可向队列中提交应用程序的Linux用户或用户组列表,默认情况下为“*”,表示任何用户均可以向该队列提交应用程序。需要注意的是,该属性具有继承性,即子队列的列表会继承父队列的列表。配置该属性时,用户之间或用户组之间用“,”分割,用户和用户组之间用空格分割,比如“user1, user2 group1,group2”。


aclAdministerApps

该队列的管理员列表。一个队列的管理员可管理该队列中的资源和应用程序,比如可杀死任意应用程序。

 

Capacity Scheduler相关参数

在Capacity Scheduler的配置文件中,队列queueX的参数Y的配置名称为yarn.scheduler.capacity.queueX.Y,为了简单起见,我们记为Y,则每个队列可以配置的参数如下:

资源分配相关参数

参数名称

说明

缺省值

capacity

队列的资源容量(百分比)。 当系统非常繁忙时,应保证每个队列的容量得到满足,而如果每个队列应用程序较少,可将剩余资源共享给其他队列。注意,所有队列的容量之和应小于100。

 

maximum-capacity

队列的资源使用上限(百分比)。由于存在资源共享,因此一个队列使用的资源量可能超过其容量,而最多使用资源量可通过该参数限制。

 

minimum-user-limit-percent

每个用户最低资源保障(百分比)。任何时刻,一个队列中每个用户可使用的资源量均有一定的限制。当一个队列中同时运行多个用户的应用程序时中,每个用户的使用资源量在一个最小值和最大值之间浮动,其中,最小值取决于正在运行的应用程序数目,而最大值则由minimum-user-limit-percent决定。比如,假设minimum-user-limit-percent为25。当两个用户向该队列提交应用程序时,每个用户可使用资源量不能超过50%,如果三个用户提交应用程序,则每个用户可使用资源量不能超多33%,如果四个或者更多用户提交应用程序,则每个用户可用资源量不能超过25%。

 

user-limit-factor

每个用户最多可使用的资源量(百分比)。比如,假设该值为30,则任何时刻,每个用户使用的资源量不能超过该队列容量的30%。

 

现在应用程序数目相关参数

参数名称

说明

缺省值

maximum-applications

集群或者队列中同时处于等待和运行状态的应用程序数目上限,这是一个强限制,一旦集群中应用程序数目超过该上限,后续提交的应用程序将被拒绝,所有队列的数目上限可通过参数yarn.scheduler.capacity.maximum-applications设置(可看做默认值),而单个队列可通过参数yarn.scheduler.capacity.<queue-path>.maximum-applications设置适合自己的值。

10000

maximum-am-resource-percent

集群中用于运行应用程序ApplicationMaster的资源比例上限,该参数通常用于限制处于活动状态的应用程序数目。该参数类型为浮点型。所有队列的ApplicationMaster资源比例上限可通过参数yarn.scheduler.capacity. maximum-am-resource-percent设置(可看做默认值),而单个队列可通过参数yarn.scheduler.capacity.<queue-path>. maximum-am-resource-percent设置适合自己的值。

0.1,表示10%

队列访问和权限控制参数

参数名称

说明

缺省值

state

队列状态可以为STOPPED或者RUNNING,如果一个队列处于STOPPED状态,用户不可以将应用程序提交到该队列或者它的子队列中,类似的,如果ROOT队列处于STOPPED状态,用户不可以向集群中提交应用程序,但正在运行的应用程序仍可以正常运行结束,以便队列可以优雅地退出。

 

acl_submit_applications

限定哪些Linux用户/用户组可向给定队列中提交应用程序。需要注意的是,该属性具有继承性,即如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序。配置该属性时,用户之间或用户组之间用“,”分割,用户和用户组之间用空格分割,比如“user1, user2 group1,group2”。

 

acl_administer_queue

为队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等。同样,该属性具有继承性,如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序。

 



作者:GoofyWang

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。