MapReduce过程详解

  1. 用户提交MapReduce作业到Master节点上。
  2. 由Master节点将M个Map任务和R个Reduce任务分配到空闲的节点上运行。输入文件被分成固定大小 (默认为64 MB, 用户可以调整) 的M个分片(split) 。Master节点会尽量将任务分配到离输入分片较近的节点上执行, 以减少网络通信量。
  3. 在Map阶段, 被分配到Map任务的节点以输入分片作为输入, 对于每条记录, 会执行map函数, 产生一系列 key intermediate /value intermediate 对, 这些数据会缓存于内存中。
  4. 缓存的 key intermediate /value intermediate 对会按 key intermediate进行排序, 利用分区函数将输出结果分为R个区, 以一定的时间间隔写入节点的硬盘, 并将数据的位置信息传送到Master节点。
  5. Master节点接收到中间结果的位置信息后,会将位置信息传送给Reduce任务的节点, Reduce任务节点远程读取中间结果。在这一阶段中, 数据会在不同节点之间进行相互传输, 因此这一阶段也被称为数据混洗 (shuffle) 阶段。当Reduce任务读取到全部的中间结果后, 会按 key intermediate 进行再次排序,以保证数据按 key intermediate 连续存放。
  6. 在 Reduce 阶 段 , 处 理 有 序 的 key intermediate /value intermediate 对集合, 对相同的 key intermediate 结果进行合并处理, 执行用户提供的reduce函数, 并将最终结果写入到分布式文件系统上。

由 MapReduce 处理过程可以看出, MapReduce框架将问题分而治之, 并且将计算尽量分配到数据存储的节点(即将计算移到数据,“移动计算而不是移动数据”的策略), 以减少计算中大量的数据通信开销。


详解:

在第3步,内存缓冲区有大小限制,默认是100MB;如果缓冲区中的内容过多就需要将它的内容交换到磁盘中,这一步称为spill,为了不影响map参数的执行和缓冲区的交换,缓冲区不会再真正写满之后再全部写入到磁盘,而是通过参数控制交换到磁盘的时机。如果map结果集较小能全部放入到内存中,那么只需要最后写一次磁盘。总之我的看法是,map出来的中间数据小,就放内存,内存放不进,spill到磁盘;反正最后都要写到磁盘。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值