hadoop 中map、reduce数量对mapreduce执行速度的影响

本文通过实验分析了MapReduce作业中Map和Reduce任务数量对执行时间的影响,并提供了优化建议,包括合理设置InputSplit大小、调整MapReduce任务数量以达到理想的并行度,以及考虑集群资源利用效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 增加task的数量,一方面增加了系统的开销,另一方面增加了负载平衡和减小了任务失败的代价;
  • map task的数量即mapred.map.tasks的参数值,用户不能直接设置这个参数。Input Split的大小,决定了一个Job拥有多少个map。默认input split的大小是64M(与dfs.block.size的默认值相同)。然而,如果输入的数据量巨大,那么默认的64M的block会有几万甚至几十万的Map Task,集群的网络传输会很大,最严重的是给Job Tracker的调度、队列、内存都会带来很大压力。mapred.min.split.size这个配置项决定了每个 Input Split的最小值,用户可以修改这个参数,从而改变map task的数量。
  • 一个恰当的map并行度是大约每个节点10-100map,且最好每个map的执行时间至少一分钟。
  •  reduce task的数量由mapred.reduce.tasks这个参数设定,默认值是1。
  • 合适的reduce task数量是0.95或者0.75*( nodes * mapred.tasktracker.reduce.tasks.maximum), 其中,mapred.tasktracker.tasks.reduce.maximum的数量一般设置为各节点cpu core数量,即能同时计算的slot数量。对于0.95,当map结束时,所有的reduce能够立即启动;对于0.75,较快的节点结束第一轮reduce后,可以开始第二轮的reduce任务,从而提高负载均衡。

http://blog.youkuaiyun.com/npucloud/article/details/6432145


测试总结:

一.数据2亿的数据量

整个测试过程中输入数据保持不变,输出逻辑数据保持不变


二,测试数据


第一组数据:

1.map=128,reduce=20

Elapsed:5hrs, 18mins, 56sec
Diagnostics: 
Average Map Time1hrs, 43mins, 29sec
Average Reduce Time2hrs, 36mins, 2sec
Average Shuffle Time1hrs, 14mins, 12sec
Average Merge Time0sec


2.map=256,reduce=20

Elapsed:4hrs, 23mins, 59sec
Diagnostics: 
Average Map Time56mins, 23sec
Average Reduce Time2hrs, 40mins, 58sec
Average Shuffle Time1hrs, 5mins, 56sec
Average Merge Time2sec


3.map=512,reduce=20

Elapsed:4hrs, 13mins, 31sec
Diagnostics: 
Average Map Time28mins, 16sec
Average Reduce Time2hrs, 37mins, 19sec
Average Shuffle Time56mins, 45sec
Average Merge Time1mins, 39sec


由上面的数据来看,在reduce数量不变前提下

map执行时间会成倍数下降,但是shuffle和redue执行时间变化很小,导致,总体执行时间越到最后执行时间下降越缓慢


 
 
 
 


第二组数据:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值