MapReduce任务的优化

1、任务调度

任务调度是Hadoop中非常重要的一环,这个优化又涉及两个方面的内容。计算方面:Hadoop总会优先将任务分给空闲的机器,使得所有任务能公平地分享系统资源。IO方面:Hadoop会尽量将Map任务分配给InputSplit所在的机器,以减少网络IO的消耗。

2、数据预处理与InputSplit的大小

MapReduce任务擅长处理少量的大数据,而在处理大量的小数据时,mapreduce的性能就会逊色许多。因此在提交mapreduce任务前可以先对数据进行一次预处理,将数据合并以提高mapreduce的效率。

3、Map与Reduce任务的数量

首先要定义两个概念——Map/Reduce任务槽。Map/Reduce任务槽就是这个集群能够同时运行的Map/Reduce任务的最大数量。
设置mapreduce任务的map数量主要参考的是map的运行时间,设置reduce任务的数量就只需要参考任务槽的设置即可。一般来说,reduce任务的数量应该是reduce任务槽的0.95倍或1.75倍,这是基于不同的考虑来决定的。当reduce任务的数量是任务槽的0.95倍时,如果一个reduce任务失败,hadoop可以很快找到一台空闲的机器重新执行这个任务。当reduce任务是任务槽的1.75倍时,执行速度快的机器可以获得更多的reduce任务,因此可以使负载更均衡,以提高任务的处理速度。

4、Combine函数

Combine函数是用于本地合并数据的函数。在有些情况下,map函数产生的中间数据会有很多重复的,比如在一个简单的wordcount程序中,每个map任务可能会产生很多个《the,1》记录,若将这些记录一一传给reduce任务是很耗时的。所以,我们可以运行自定义的combine函数用于本地合并,这会大大减少网络IO操作的消耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值