MapReduce总结

  • MapReduce运行流程:

在这里插入图片描述1) 首先对输入数据源进行切片
2) master 调度 worker 执行 map 任务
3) worker 读取输入源片段
4) worker 执行 map 任务,将任务输出保存在本地
5) master 调度 worker 执行 reduce 任务,reduce worker 读取 map 任务的输出文件
6) 执行 reduce 任务,将任务输出保存到 HDFS

总结:
先将输入文件进行切片,然后通过Map对数据进行处理,处理结果为k/v,并保存到本地,然后通过Reduce对数据进行归约操作,将输出结果保存到HDFS中。

  • 运行流程详解

  • 以WordCount为例
    在这里插入图片描述
    Map对每一个接收到的切片内容做相同的处理,即记录每个单词的次数,然后进行分区(partition)并按照key进行排序(sort),然后进行本地归约combine阶段(即相当于map端的reduce),各分区按key进行汇总。之后进入shuffle阶段,将相同分区进行合并与排序。最后进入Reduce,每个Reduce从Map的输出中获取数据,然后汇总每个key对应的值,最终多个Reduce的结果再做一次汇总就输出为最终的内容。在整个过程中,只有map操作和reduce操作是用户需要关心的,其他的部分全部交给Hadoop。

  • 举例说明

需要在一堆扑克牌(张数未知)中统计四种花色的牌有多少张,只需要找几个人,每人给一堆,数出来四种花色的张数,然后汇总给另外一个人就可以了。比如两个人每人一堆扑克牌,查出红桃、黑桃、梅花、方片之后四个人,每个人只负责统计一种花色,最终将结果汇报给一个人,这是典型的map-reduce模型。

  • combiner说明:

    每一个map可能会产生大量的输出,combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量。
    combiner最基本是实现本地key的归并,combiner具有类似本地的reduce功能。 如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner,先完成的map会在本地聚合,提升速度。

    注意:Combiner的输出是Reducer的输入,Combiner绝不能改变最终的计算结果。所以从我的想法来看,Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。


部分引用
原文:http://www.cnblogs.com/ahu-lichang/p/6657572.html
原文:https://blog.csdn.net/afandaafandaafanda/article/details/52828870
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值