随笔 - 154  文章 - 0  评论 - 18  阅读 - 24万

MapReduce Shuffle机制

Mapper端:每个mapTask有一个环形缓冲区,用于存储map任务的输出。默认大小100M(io.sort.mb属性),一旦达到阀值0.8(io.sort.spill.percent),一个后台线程把内容写到(spill)磁盘的指定目录(mapred.local.dir)下的新建的一个溢写文件。写磁盘前,会在内存里(快排)进行partition, sort, combiner(如果配置了combiner)操作,如果有后续的数据,将会继续写环形缓冲区,最终写入下一个溢出文件中。等最后记录写完,合并(归并排序)全部溢出文件为一个分区且排序的文件。如果在最终合并时,被合并的文件大于等于3个,则合并完再执行一次combiner操作,否则不会。
 
Reducer端:Reducer通过http方式得到输出文件的分区。NodeManager为分区文件运行Reduce任务,复制阶段把Map输出复制到Reducer的内存或磁盘。一旦Map任务完成,Reducer就开始复制。排序阶段合并map输出,然后走Reduce阶段。

参考资料:http://www.atguigu.com/bigdata_video.shtml#bigdata

posted on   wzyy  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2019-03-26 Redis数据结构:链表
2019-03-26 Redis数据结构:SDS

点击右上角即可分享
微信分享提示