Task内部实现——Reduce Task内部实现

整体流程

在这里插入图片描述
五个阶段

  • shuffle阶段:也称为copy阶段,从各个Map Task上远程拷贝一片数据,如果大小超过阈值,落盘,否则放内存中
  • Merge阶段:远程拷贝数据的同时,Reduce Task启动两个后台线程对内存和磁盘上的文件进行合并,防止内存使用过多或磁盘上文件过多。
  • Sort阶段:按照MapReduce语义,用户编写的reduce()函数输入数据是按key聚集的一组数据,为了将key相同的数据聚在一起,hadoop采用了排序的策略,由于map task已经局部排序,因此,reduce task只要进行一次归并排序就ok。
  • reduce阶段:将每组数据交给reduce函数处理
  • write阶段:reduce函数将计算结果写到HDFS上。

shuffle和merge阶段

reduce task中,shuffle和merge是并行进行的。
在这里插入图片描述
三个阶段:

  • 准备运行完成的Map Task列表:GetMaoEventsThread线程周期性通过RPC从TaskTracker获取已经完成的Map Task列表,保存到映射表mapLocations(保存了TaskTracker Host与已完成任务列表的映射关系)中,为防止出现网络热点,Reduce Task通过对所有TaskTracker Host进行”混洗“操作以打乱数据拷贝顺序,并将调整后的Map Task输出数据位置保存到scheduledCopies列表中。
  • 远程数据拷贝:Reduce Task同时启动多个MapOutputCopier线程, 这些线程从scheduledCopies列表中获取Map Task输出位置,并通过HTTP Get远程拷贝数据,对于获取的数据分片,如果大小超过一定阈值(默认是一个数据分片大小不能超过该内存的0.25倍,则可以放在内存中),则落盘,否则放内存。
  • 合并内存文件和磁盘文件:为了防止内存或者磁盘上文件数据过多,Reduce Task启动了LocalFSMerger和InMemFSMergeThread两个线程分别对内存和磁盘上的文件进行合并。

Sort和Reduce阶段

Sort和Reduce可以并行。
Sort阶段,Reduce Task为内存和磁盘中的文件建立了小顶堆,保存了指向该小顶堆根节点的迭代器。
在Reduce阶段,Recuce Task不断移动迭代器,以将key相同的数据顺次交给reduce()函数处理,期间移动迭代器的过程实际上就是不断调整小顶堆的过程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值