Map/reduce原理

     从MapReduce自身的命名特点可以看出,MapReduce由两个阶段组成:Map和
Reduce。用户只需编写map()和reduce()两个函数,即可完成简单的分布式程序的设计。
map()函数以key/value对作为输入,产生另外一系列key/value对作为中间输出写入本地
磁盘。MapReduce框架会自动将这些中间数据按照key值进行聚集,且key值相同(用户可
设定聚集策略,默认情况下是对key值进行哈希取模)的数据被统一交给reduce()函数处理。
reduce()函数以key及对应的value列表作为输入,经合并key相同的value值后,产

生另外一系列key/value对作为最终输出写入HDFS。

关于中间的聚集过程,官方称之为shuffle。shuffle直译为洗牌,其实是key value键值对

的洗牌,这其中的原理和步骤如下:



1.        Copy过程,简单地拉取数据。其实就是将map过程的输出倒进啦i
2.        Merge阶段。这里的merge如map端的merge动作,只是数组中存放的是不同map端copy来的数值。Copy过来的数据会先放入内存缓冲区中,这里的缓冲区大小要比map端的更为灵活,它基于JVM的heap size设置,因为Shuffle阶段Reducer不运行,所以应该把绝大部分的内存都给Shuffle用。Merge的话其实涉及到记录合成问题,记录的合成过程中,会自动对key值进行排序。
3.        Reducer的输入文件。不断地merge后,最后就输出到reduce的输入里面。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值