mapreduce之shuffle详解

本文详细解析了MapReduce任务中的数据切分、Shuffle过程,包括Map阶段的环形缓冲溢写、分区排序,以及Reduce阶段的磁盘数据复制、归并排序。重点介绍了如何通过优化Shuffle提高性能。
摘要由CSDN通过智能技术生成

在这里插入图片描述

FileInputFormat阶段切分的3数据片(也可根据需求生成多个MapTask来处理数据片,能够提高速度)
map方法按行读取生成KV对
MapTask阶段的Shuffle过程(所有MapTask是并行的)
(1) Map方法执行的数据进入环形缓冲区,当数据达到80%时,溢写
(2) 溢写到磁盘前对数据进行分区和区内排序 ,调用分区器进行分区(默认是Hash),对key进行排序,默认按字典顺序,采用的手段是快排,就是Collect收集阶段,
(3) 溢写到了磁盘(这时只是临时文件,并没有真正落盘,因为文件还没有溢写完)
(4) 将多次溢写到磁盘的相同分区的数据排序(不停的溢写不停的排序),溢写完之后进行排序且合并
(5) 合并完之后对数据写入磁盘(此时才算是落盘)等待ReduceTask读取
ReduceTask阶段的Shuffle过程
(1)ReduceTask从磁盘拷贝对应分区的数据,如果内存存不下,就溢写到磁盘,就是Copy阶段(每一个ReduceTask根据自己的分区号,去运行MapTask的机器上拷贝相对应的的结果分区数据,分区和ReduceTask是一一对应的,几个分区就有几个ReduceTask)(RedceTask会读取到同一个分区来自不同MapTask的结果文件)
(2) 在内存中,ReduceTask会将这些文件再进行归并排序,生成一个大的文件,shuffle阶段结束
(3) 按照Key进行分组,进入ReduceTask的reduce方法按照分区通过TextOutputFormat写出(写出前可选择压缩与否)到相应的分区

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值