MapReduce 原理分析

#MapReduce 分析

image

  1. User 请求 MapReduce 处理,MapReduce 接收到 User 的文件,将文件划分用户事先定义的 M 份,每一份16MB到64MB, 然后使用fork将用户进程拷贝到集群内其它机器上。
  2. user program的副本中有一个 Master , 其余为 Worker。 Master 负责调度, 为空闲的 Worker 分配作业。司令指挥小兵捡地上的子弹。
  3. worker 小兵接收到任务后,开始读取分片的数据,一个分片对应一个 Map; Map 从输入数据中抽取键值,每一对键值对作为参数给map 函数,map 函数产生的中间键值对缓存在内存中。 小兵从地上捡子弹放到弹框里。
  4. 缓冲的中间键值对定期写入磁盘,且被分为R个区,每一区再对应一个Reduce 作业;同时位置通报给 master, master 负责分配 Reduce worker。小兵把捡好的弹框报告给司令。
  5. master通知分配了Reduce作业的worker它负责的分区在什么位置,当Reduce worker把所有它负责的中间键值对都读过来后,先对它们进行排序,使得相同键的键值对聚集在一起。因为不同的键可能会映射到同一个分区也就是同一个Reduce作业(谁让分区少呢),所以排序是必须的。
  6. reduce worker遍历排序后的中间键值对,对于每个唯一的键,都将键与关联的值传递给reduce函数,reduce函数产生的输出会添加到这个分区的输出文件中。
  7. 当所有的Map和Reduce作业都完成了,master唤醒正版的user program,MapReduce函数调用返回user program的代码。
  8. 所有执行完毕后,MapReduce输出放在了R个分区的输出文件中(分别对应一个Reduce作业)。用户通常并不需要合并这R个文件,而是将其作为输入交给另一个MapReduce程序处理。整个过程中,输入数据是来自底层分布式文件系统(GFS)的,中间数据是放在本地文件系统的,最终输出数据是写入底层分布式文件
    系统(GFFS)的。而且我们要注意Map/Reduce作业和map/reduce函数的区别:Map作业处理一个输入数据的分片,可能需要调用多次map函数来处理每个输入键值对;Reduce作业处理一个分区的中间键值对,期间要对每个不同的键调用一次reduce函数,Reduce作业最终也对应一个输出文件。

大数据设计的一个基本的思想是将计算的任务推送到数据所在的地方,而不是反过来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值