说明

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

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

如需转载,请注明出处,链接列表如下

RM与NM相关参数
权限与日志聚集相关参数
MapReduce相关参数
Fair Scheduler相关参数
Capacity Scheduler相关参数

RM与NM相关参数

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 远程日志目录子目录名称(启用日志聚集功能时有效)。 日志将被转移到目录{yarn.nodemanager.remote-app-log-dir}/{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
链接:https://www.jianshu.com/p/73442811773f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。