【Hadoop22】:MapReduce与YARN常用配置

前言

在前几章中,我们已经对MapReduce以及YARN有了初步的认识,并能够编写一些常见的MapReduce程序。此外,还学习了MapReduce任务的执行流程(任务提交、任务执行、容错、Shuffle等)等。在实际场景中,我们往往希望任务运行的更快一些,效率更高一些,这时候就需要对框架或作业进行一些配置优化了。

MapReduce常用配置

我们首先来看下MapReduce常见的配置,这些配置基本上都可以在提交作业时通过-D key=value的方式进行制定。

内存相关

属性名称 说明
mapreduce.map.memory.mb 设置map容器所用的内存容量,默认是1024
mapreduce.reduce.memory.mb 设置reduce容器所用的内存容量,默认是1024
mapred.child.java.opts JVM选项,用于启动运行map和reduce任务的容器进程。除了用于设置内存,该属性还包括JVM参数设置
mapreduce.map.java.opts JVM选项,针对运行map任务的子进程
mapreduce.reduce.java.opts JVM选择,针对运行reduce任务的子进程

这几个参数可能会有些让人混淆,我们举个例子来说明。例如,假设mapred.child.java.opts被设置为-Xmx800m,mapreduce.map.memory.mb为默认值1024MB,当map任务启动时,NodeManager会为该任务分配一个1024MB的容器(在该任务运行期间,NodeManager的内存池也会相应降低1024MB),并启动配置为最大堆为800MB的任务JVM。注意,JVM进程的内存开销将比该堆的规模要大,开销依赖于所使用的本地库、永久生成空间等因素。需要注意的是,JVM进程所使用的物理内存必须不超出分配给它的内存大小(1024MB)。如果一个容器使用的内存超过所分配的内存,就会被NodeManager中止,并标记为失败。

CPU设置

属性名称 说明
mapreduce.map.cpu.vcores 设置map任务所使用的CPU核心数,默认为1
mapreduce.reduce.cpu.vcores 设置reduce任务所使用的CPU核心数,默认为1

Shuffle相关

属性名称 说明
mapreduce.task.io.sort.mb 设置map任务输出时环形缓冲区大小,默认为100
mapreduce.map.sort.spill.percent 设置缓冲区数据溢写阈值,默认为0.80,即80%
mapreduce.task.io.sort.factor map任务的溢写文件每次最多能合并多少流,默认为10
mapreduce.map.combine.minspills 运行combiner所需的最少溢出文件数
mapreduce.map.output.compress map任务输出是否进行压缩,默认值是false
mapreduce.map.output.compress.codec map任务输出的压缩格式
mapreduce.reduce.shuffle.parallelcopies reduce任务用于获取map任务输出内容的线程数,默认为5
mapreduce.reduce.shuffle.input.buffer.percent 在shuffle的复制阶段,分配给map输出的缓冲区占堆空间的百分比,默认为0.70,即70%
mapreduce.reduce.shuffle.merge.percent map输出缓冲区的阈值使用比例,用于启动合并输出和磁盘一些的过程,默认为0.66,即66%
mapreduce.reduce.merge.inmem.threshold 启动合并输出和磁盘溢写过程的map输出的阈值数,0或更小的数意味着没有阈值限制。默认为1000
mapreduce.reduce.input.buffer.percent 在reduce过程中,在内存中保存map输出的空间占整个堆空间的比例。reduce阶段开始时,内存的map输出大小不能大于这个值。默认情况下,在reduce任务开始之前,所有map输出都合并到磁盘上,以便为reduce提供尽可能多的内存。然而,如果reduce需要的内存较少,可以增加此值来最小化访问磁盘的次数,默认为0.0

其他设置

属性名称 说明
mapreduce.map.maxattempts 设置map任务的最大重试次数,默认为4
mapreduce.reduce.maxattempts 设置reduce任务的最大重试次数,默认为4
mapreduce.job.ubertask.enable 是否启用Uber任务,默认为false
mapreduce.job.ubertask.maxmaps Uber任务最多的map数量,默认为10
mapreduce.job.uber.task.maxreduces Uber任务虽多的reduce数量,默认为1
mapreduce.job.ubertask.maxbytes Uber任务的最大输入大小,默认是一个数据块的大小
mapreduce.task.timeout map或reduce的任务超时时间,默认为10分钟
mapreduce.map.failures.maxpercent map任务允许任务失败的最大百分比,默认为0
mapreduce.reduce.failures.maxpercent reduce任务允许任务失败的最大百分比,默认为0
mapreduce.map.speculative 是否开启map任务推测执行,默认为true
mapreduce.reduce.speculative 是否开启reduce任务推测执行,默认为true

YARN常用配置

属性名称 说明
yarn.nodemanager.resource.memory-mb NodeManager运行的容器可以分配到的物理内存容量,默认值为8192MB
yarn.nodemanager.resource.cpu-vcores NodeManager运行的容器可以分配到的CPU核心数,默认为8
yarn.nodemanager.vmem-pmem-ratio 容器所占的虚拟内存和物理内存之比。该值指示了虚拟内存的使用可以超过所分配内存的量
yarn.scheduler.minimum-allocation-mb 为容器分配的最小内存,默认为1024MB
yarn.scheduler.maximum-allocation-mb 为容器分配的最大内存,默认为8192MB
yarn.scheduler.minimum-allocation-vcores 为容器分配的最小CPU核数,默认为1
yarn.scheduler.maximum-allocation-vcores 为容器分配的最大CPU核数,默认为4

小结

本章主要介绍了MapReduce与YARN的一些常见配置参数,有内存相关、CPU相关、Shuffle相关、容错相关等。这些参数在特定的场景下非常有用,但是使用参数的前提是必须理解为什么要这样配置,原理是什么,才能够做到了然于胸。

如果您觉得不错,请赞赏一下!