首页 > 代码库 > Hadoop调优参数总结

Hadoop调优参数总结

Map端调优参数

属性名称
类型默认值说明
io.sort.mbint100排序map输出时所使用的内存缓冲区大小,以M为单位。当节点内存较大时,可调高该参数,以减少磁盘写入次数。
io.sort.record.percentfloat0.05
用作存储map输出(io.sort.mb)记录的比例。剩余的空间用来存储map输出记录本身
io.sort.spill.percentfloat0.80map输出开始写磁盘的阈值。
io.sort.factorint10map输出排序时,一次最多合并的流数。该属性在reduce中也用到。
min.num.spills.for.combineint3运行combiner所需的最少溢出文件数(指定combiner时,才生效)。默认为3,即当map的spill的个数大于或等于3时,则会在map的merge操作之前,对各spill执行combine操作,以减少写入到磁盘的文件的数量。
mapred.compress.map.outputBooleanfalse是否压缩map输出
mapred.map.output.compression.codecClass nameorg.apache.hadoop.io.
compress.DefaultCodec
用于map输出压缩编解码器
tasktracker.http.threadsint40每个tasktracker的工作线程数,用于将map输出到reducer。该属性为集群范围的设置,不能由单个作业设置
mapred.map.max.attemptsint4map任务失败后,重新尝试执行次数。默认值为4,如果任务map任务失败次数大于4,整个计算任务都会失败。
mapred.max.map.failures.percent  不触发作业失败的情况下,允许map任务失败的最大百分比
mapred.map.tasks.speculative.executionbooleantrue是否启动map任务的推测执行。默认为开启,当某个map任务运算时间长于平均map时间后,hadoop将启动一个新的map实例。

Reduce端调优参数
属性名称类型默认值说明
mapred.reduce.parallel.copiesint5用于把map输出复制到reduce的线程数
mapred.reduce.copy.backoffint300在声明任务失败之前,reducer获取一个map输出所花的最大事件,以秒为单位。
如果任务失败,reducer可以再此时间内尝试重传
io.sort.factorint10排序文件时,一次最多合并的流的数量。该属性也在map端使用。
mapred.job.shuffle.input.buffer.percentfloat0.70在shuffle的复制阶段(copy),分配给map输出的缓冲区占reduce堆空间的百分比。
mapred.job.shuffle.merge.percentfloat0.66map输出缓冲区(由mapred.job.shuffle.input.buffer.percent定义)的阈值使用比例,用于启动合并输出和磁盘溢出写的过程。
mapred.inmem.merge.thresholdint1000启动合并输出和磁盘溢出写过程的map输出的阈值数。0或者更小的数意味着没有阈值限制,溢出写行为由mapred.job.shuffle.merge.percent单独控制
mapred.job.reduce.input.buffer.percentfloat0在reduce过程中,在内存中保存map输出的空间占整个堆空间的比例。
reduce阶段开始时,内存中的map输出大小不能大于该值。默认情况下,在reduce任务开始之前,所有map输出都合并到磁盘上,以便为reducer提供尽可能多的内存。如果reducer需要的内存较少,可以增加该值,来最小化访问磁盘的次数,提高计算效率。
mapred.reduce.max.attemptsint4reduce任务失败后,重新尝试执行次数。默认值为4,如果任务reduce任务失败次数大于4,整个计算任务都会失败。
mapred.max.reduce.failures.percent  不触发作业失败的情况下,允许reduce任务失败的最大百分比
mapred.reduce.tasks.speculative.executionbooleantrue是否启动reduce任务的推测执行

Hadoop整体调优
属性名称类型默认值说明
mapred.child.java.opts  map或reduce任务的JVM内存大小。若设置太小,则会报错“Java heap space”
mapred.job.reuse.jvm.num.tasksint1在一个tasktrakcer上,对于给定作业的每个JVM上可以运行的任务最大数。-1表示无限制,即同一个JVM可以被该作业的所有任务使用。共享JVM的好处在于:作业各个任务之间的状态共享,通过在静态字段中存储相关数据,任务可以较快速访问共享数据。


Hadoop调优参数总结