一、MapReduce的工作流程
1、Map阶段
(1)读取hdfs上的文件,每个block启动一个maptask,按行读取一个block中的内容。
(2)map函数对数据split拆分,得到数组,组成一个键值对<word,1>
(3)做分区对应多个reduceTask
(4)分区数据,按key分组排序
(5)在map端执行小reduce,一个map中输出<key,times>
2、Rudeuce阶段
(1) 每个分区对应一个reduce task,他会读取(所有map节点上的maptask)相同分区的所有输出
(2) reduce Task对接受的所有map输出,排序
(3) 执行reduce,对数据累加
(4) 输出到hdfs上
3、shuffle过程
原因:因为频繁的磁盘I/O操作会严重降低效率,所以"中间结果"不会立马写入磁盘&