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写出(写出前可选择压缩与否)到相应的分区
mapreduce之shuffle详解
最新推荐文章于 2024-04-17 15:04:02 发布