说明
最近关于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 | 远程日志目录子目录名称(启用日志聚集功能时有效)。 | 日志将被转移到目录{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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。