map端的调优属性
属性名称 | 类型 | 默认值 | 说明 |
---|
mapreduce.task.io.sort.mb | int | 100 | 排序map输出时所使用的内存缓冲区大小,单位:M |
mapreduce.map.sort.spill.percent | float | 0.80 | map输出内存缓冲和用来开始磁盘溢出写过程的记录边界索引二者的比值 |
mapreduce.task.io.sort.factor | int | 10 | 排序文件时的一次最多合并的流数 |
mapreduce.map.combine.minspills | int | 3 | 运行combiner所需的最少溢出文件数 |
mapreduce.map.output.compress | Boolean | false | map输出端是否压缩 |
mapreduce.map.output.compress.codec | Class | org.apache.hadoop.io.compress.DefaultCodec | map输出端压缩编码器 |
mapreduce.shuffle.max.threads | int | 0 | 集群范围设置每个NM的工作线程数,负责将map输出到reduce。0表示使用Netty默认值,即两倍于可用的处理器数 |
- 大体通过给shuffle过程尽量多的提供内存来提高效率。
- map端避免多次溢出写入磁盘的次数。
- 任务节点上的内存应该尽量大。
- 增加Hadoop的默认缓冲区(4KB),通过改变属性:
io.file.buffer.size
reduce端的调优属性
属性名称 | 类型 | 默认值 | 说明 |
---|
mapreduce.reduce.shuffle.parallelcopies | int | 5 | map端输出复制到reduce端的线程数 |
mapreduce.reduce.shuffle.maxfetchfailures | int | 10 | 在声明失败前,reducer获取一个map输出所花的最大时间 |
mapreduce.task.io.sort.factor | int | 10 | 排序文件时的一次最多合并的流数 |
mapreduce.reduce.shuffle.input.buffer.percent | float | 0.7 | 在shuffle阶段,分配个map输出缓冲区占堆空间的百分比 |
mapreduce.reduce.merge.percent | float | 0.66 | map输出缓冲区(mapred.job.shuffle.input.buffer.percent)的阈值使用比例,用于启动合并输出和磁盘溢出写的过程 |
mapreduce.reduce.merge.in.mem.threshold | int | 1000 | 启动合并输出和磁盘溢出写的map输出阈值数 |
mapreduce.reduce.merge.in.put.buffer.percent | float | 0.0 | reduce阶段,内存中map输出的大小不能大于这个数值,以便给reduce提供更多的内存;也可以增加比值,让map端减少磁盘溢出写的次数 |
- reduce端增加中间数据放在内存的比例,为reduce函数预留内存。如果reduce函数内存需求不大,改变属性:
mapreduce.reduce.merge.inmem.threshold
设置为0,把mapreduce.reduce.merge.in.put.buffer.percent
设置1.0或更低
推测执行的属性
属性名称 | 类型 | 默认值 | 说明 |
---|
mapreduce.map.speculative | boolean | true | 决定如果任务运行慢,是否启动map任务的另外一个实例 |
mapreduce.reduce.speculative | boolean | true | 决定如果任务运行慢,是否启动reduce任务的另外一个实例 |
yarn.app.mapreduce.am.job.speculator.class | Class | org.apach.hadoop.map.reduce.v2.app.speculate.DefaultSpeculaor | Speculaor类实现推测执行策略 |
yarn.app.mapreduce.am.job.estimator.class | Class | org.apach.hadoop.map.reduce.v2.app.speculate.LegacyTaskRuntimeEstimator | Speculaor实例用TaskRuntimeEstimator估计任务运行时间 |
对于reduce任务,为减少集群上的网络传是,关闭推测执行是有利的。