YARN的配置详解

以下参数讲解以社区版2.6.0的参数名和默认值为准(配置文件为:hdfs-default.xml / hdfs-site.xml )
mapreduce.task.io.sort.factor
默认为10。当一个map task执行完后,本地磁盘上(由 mapreduce.cluster.local.dir指定)有若干个spill(溢出)文件,map task最后需要执行merge sort,把这些spill文件合并成一个文件,合并时可以同时打开多少个spill文件由该参数决定。如果有大量数据溢出到磁盘,且merge sort阶段的I/O很高,就应该尝试增加该值,通常社区版的默认值10过小,CDH版的默认值64对中等规模集群合适。各Job也可以单独指定。
mapreduce.task.io.sort.mb
默认值100。用于设置map task的merge sort可用的缓冲区大小,在map输 出较大且map端I/O很高时,就应该尝试增加该值,通常社区版的默认值 100过小,CDH版的默认值256对中等规模集群合适。各Job也可以单独指定。
mapreduce.cluster.local.dir
默认为${hadoop.tmp.dir}/mapred/local。MapReduce保存中间数据文件 的本地磁盘路径,可以通过逗号分隔指定多个路径。可按需修改。
mapreduce.job.maps / mapreduce.job.reduces
默认为2/1。每个Job默认的map/reduce task个数,各Job也可以单独指定, 因此集群层面的默认值不一定需要修改。
mapreduce.task.timeout
默认为6000000,即10分钟。指定一个task由于没有读取任何数据、写出任何数据或更新状态达到多长时间后会被终止。设为0表示禁用该特性。
mapreduce.map.memory.mb / mapreduce.reduce.memory.mb
默认均为1024,调度器为每个map/reduce task申请的内存数。各Job也可 以单独指定。
mapreduce.map.cpu.vcores / mapreduce.reduce.cpu.vcores
默认均为1,调度器为每个map/reduce task申请的CPU虚拟核数。各Job也 可以单独指定。
mapreduce.map.speculative / mapreduce.reduce.speculative
默认均为true,是否开启map/reduce task的推测执行特性,我们在核心 课中介绍过推测执行可以解决部分task运行得特别慢的问题,但会消耗额 外的资源,并且非幂等的MR任务不能启用推测执行,否则会影响结果的正 确性。因此,像CDH这样的发行版将默认值设为false。
mapreduce.job.ubertask.enable
默认为false。MapReduce中有一类足够小的作业称为“ubertask”,如果 开启该选项,会在单一JVM内运行该作业的所有task,使得小任务执行时 不需要在节点间交换数据。是否开启区别不大。
mapreduce.output.fileoutputformat.compress
默认为false。指定MR的最终输出结果是否压缩。各Job也可以单独指定。
mapreduce.output.fileoutputformat.compress.type
默认为RECORD。可以为NONE,RECORD,BLOCK,如果输出结果要压缩,以什么单位进行压缩。CDH集群该值默认为BLOCK,即以块为单位进行压缩。
mapreduce.job.queuename
默认为default。MR作业提交的默认队列名。各Job也可以单独指定。
yarn.app.mapreduce.am.staging-dir
默认为/tmp/hadoop-yarn/staging。MR作业在提交时所使用的临时目录, 是一个本地路径。
mapreduce.am.max-attempts
默认为2。AM在失败前可以尝试多少次,如果为2,代表可以在1次失败后 有1次重试。该值必须小于YARN的RM的max-attempts值,否则会被覆盖。 各Job也可以单独指定。
yarn.app.mapreduce.am.resource.mb
默认为1536。MR运行于YARN上时,为AM分配多少内存。默认值通常来说过 小,建议设置为2048或4096等较大的值。
yarn.app.mapreduce.am.resource.cpu-vcores
默认为1。MR运行于YARN上时,为AM分配多少个虚拟核。因为AM并不太消 耗CPU,默认值通常够用。
mapreduce.app-submission.cross-platform
默认为false。我们在核心课中曾经修改过该参数,尤其是使用测试环境 调试时,如果需要用windows、MAC操作系统上的IDE向集群提交作业,应 该将该值设为true。
yarn.acl.enable
默认为false,是否开启YARN的ACL权限控制,在生产集群强烈建议开启, 避免未授信用户随意启动或杀死作业。
yarn.admin.acl
作为YARN的管理员的账号列表,默认为*,即所有账号都视为管理员。 YARN的管理员可以提交作业、杀死作业、移动作业队列等,而普通用户是 只读的。在生产集群建议将该列表限制为yarn,hdfs,dr.who等几个。
yarn.resourcemanager.am.max-attempts
默认为2。见mapreduce.am.max-attempts
yarn.resourcemanager.scheduler.class
默认为"org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler",即使用基于容量的调度器。
yarn.scheduler.minimum-allocation-mb / yarn.scheduler.maximumallocation-mb
分别为1024/8192,指定RM可以为每个container分配的最小/最大内存数,低于或高于该限制的内存申请,会按最小或最大内存数来进行分配。默认值适合一般集群使用,如果集群需要运行超耗内存的任务,观察到container有OOM情况,可以调大最大值。
yarn.scheduler.minimum-allocation-vcores / yarn.scheduler.maximum-allocation-vcores
分别为1/32,指定RM可以为每个container分配的最小/最大虚拟核数,低 于或高于该限制的核申请,会按最小或最大核数来进行分配。默认值适合 一般集群使用。
yarn.resourcemanager.ha.enabled
默认为false。指定是否启用YARN的HA,如果启用,还涉及到 yarn.resourcemanager.ha.rm-ids来配置HA组中的多个RM,以及 yarn.resourcemanager.ha.automatic-failover.enabled等参数来配置自动故障转移。
yarn.resourcemanager.max-completed-applications
默认为10000。指定RM最多保存多少个完成作业的信息,超过该门限之前 的作业,将无法通过RM的管理页面(或yarn命令)查询到信息。对比较繁 忙的生产集群,该值过小,会给故障排查带来困难,建议按需调整。
yarn.log-aggregation-enable
默认为false。是否开启YARN的日志聚合功能,如果开启,各container的 日志会被收集到一起并统一存放(如存到HDFS),之后可以通过Timeline Server进行方便的查询。对生产集群建议开启。
yarn.nodemanager.resource.memory-mb
默认为8192。每个节点可分配多少物理内存给YARN使用,考虑到节点上还 可能有其他进程需要申请内存,该值设置为物理内存总数/1.3比较合适, 例如128G内存的节点可以分配100G
yarn.nodemanager.pmem-check-enabled / yarn.nodemanager.vmemcheck-enabled / yarn.nodemanager.vmem-pmem-ratio
这三个参数控制着YARN对container的内存监控。前两个值默认均为true, 指定是否开启对物理内存/虚拟内存的监控,一旦使用的物理内存或虚拟 内存超过预设值,即会抛出OOM错误,使container被杀死。第三个参数默 认为2.1,控制虚拟内存为物理内存的多少倍,如某container申请的最大 物理内存为2G,则虚拟内存可以到4.2G。这三个参数通常都不需要动,但 是需要理解其含义以进行排错。
yarn.nodemanager.resource.cpu-vcores
默认为8。每个节点可分配多少虚拟核给YARN使用,通常设为该节点定义 的总虚拟核数即可。
yarn.timeline-service.enabled
默认为false。是否启用Timeline Server,生产环境建议打开。
此外,配置了某种scheduler后,还需要修改相应的capacityscheduler.xml或fair-scheduler.xml文件。
posted @ 2025-06-21 22:12  屠魔的少年  阅读(63)  评论(0)    收藏  举报