MapReduce工作流程及Shuffle

一、分片、格式化数据源

输入 Map 阶段的数据源,必须经过分片和格式化操作。

分片操作:指的是将源文件划分为大小相等的小数据块( Hadoop 2.x 中默认 128MB )
格式化操作:将划分好的分片( split )格式化为键值对<key,value>形式的数据,其中, key 代表偏移量, value 代表每一行内容。

二、执行 MapTask

执行自己编写的map函数,Map过程开始处理,MapTask会接收输入分片,通过不断的调用map方法对数据进行处理,处理完毕后,转换为新的<key,value>键值对输出.

三、执行 Shuffle 过程

 

shuffle阶段主要负责将map端生成的数据传递给reduce端,因此shuffle分别在map端的过程和在reduce端的执行过程。

每个 Map 任务都有一个内存缓冲区(缓冲区大小 100MB ),输入的分片( split )数据经过 Map 任务处理后的中间结果会写入内存缓冲区中。

环形缓冲区到达一定阈值(环形缓冲区大小的80%)时,会将缓冲区中的数据溢出本地磁盘文件,这个过程会溢出多个文件,多个溢写文件会被合并成大的溢写文件。

在溢写之前,要进行分区和分区内排序,是快排,按照字典对key进行排序

combiner(归并)可选的 ,对数据进行压缩,进行分区归并排序,分区合并,然后分区压缩

分区输出通过reduce拉取放入内存缓冲区,如果不够写入磁盘,然后归并排序,按key分组到达reduce方法

四、执行 ReduceTask

输入 ReduceTask 的数据流是<key, {value list}>形式,用户可以自定义 reduce()方法进行逻辑处理,最终以<key, value>的形式输出。

五、写入文件

MapReduce 框架会自动把 ReduceTask 生成的<key, value>传入 OutputFormat 的 write 方法,实现文件的写入操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值