MapReduce 调优基本思路

本文介绍了MapReduce中shuffle阶段的调优策略,包括如何合理分配内存、减少磁盘I/O操作,以及调整相关参数来提升性能。适用于需要优化MapReduce作业的大数据处理场景。

mapreduce 的调优一般都是基于shuffle阶段的。下面就讲讲基本思路。

调优的基本原则就是给 shuffle 阶段尽可能大的内存。但是因为map和reduce函数的执行也需要内存,所以shuffle需要多少内存需要权衡一下,比如尽量避免在 map reduce 用 哈希表等结构对数据进行聚合操作,让 map 和 reduce 占用的内存尽可能小。

map 和 reduce 任务占用的内存是由参数 mapred.child.java.opts 设置的,这个值应该尽可能大,但是要小于节点容器所占据的内存。

在map阶段应该尽量避免多次spill数据到磁盘,map阶段的调优参数:


属性名类型默认值说明
mapreduce.task.io.sort.mbint100map 输出结果进行排序阶段用到的内存大小,单位是 M
mapreduce.map.sort.spill.percentfloat0.80map 和 reduce 阶段输出结果保存在内存缓存中,达到这一比例便开始spill 到磁盘
mapreduce.task.io.sort.factorint10当对文件进行排序时,一次可以合并的最大文件数量。
mapreduce.map.combine.minspillsint3如果设置了combiner函数,触发combine动作的最少文件数量。
mapreduce.map.out.compressboleanfalsemap 输出结构是否压缩
mapreduce.map.output.compress.codecclass nameorg.apache.hadoop.io.compress.Default
Codec
对 map 数据结果进行压缩的类
mapreduce.shuffle.max.threadsint0每个节点上开启的线程数用于将map输出结果传送到reducer。0 代表用Netty框架的默认值,默认为可用的逻辑处理器的2倍


reduce 阶段的参数

mapreduce.reduce.shuffle.parallelcopies       int       5            将map阶段的输出结果copy到reducer的并行度(线程数)
mapreduce.reduce.shuffle.maxfetchfailures   int      10           拉取map阶段输出结果的线程允许失败的最大次数
mapreduce.task.io.sort.factor                            int        10          一次可以合并的最大文件数量。
mapreduce.reduce.shuffle.input.buffer.percent   float    0.70   在shuffle过程的copy phase ,map 端的输出结果占用的堆内存比例。
mapreduce.reduce.shuffle.merge.percent      float     0.66     
mapreduce.reduce.merge.inmem.threshold   int        1000



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值