1.MapReduce过程
MR流程:输入分片 —> map阶段 —> combiner阶段(可选) —> shuffle阶段 —> reduce阶段
- 输入分片(input split):
把输入文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的。默认情况下,输入片(InputSplit)的大小与数据块(Block)的大小是相同的。 - map阶段:
输入片中的记录按照一定的规则解析成键值对,调用Mapper类中的map方法 比如wordcount 解析成以字符为key value 为1的map - combiner阶段:
Combiner是一个本地化的reduce操作,它是map运算的后续操作,主要是在map计算出中间文件前做一个简单的合并重复key值的操作 - shuffle阶段:
从功能看,进行合并把分散的数据排序,局部聚合,合并成一个大的数据
4.1.map端的shuffle
分区
在将map()函数处理后得到的(key,value)对写入到缓冲区之前,需要先进行分区操作,这样就能把map任务处理的结果发送给指定的reducer去执行写入环形内存缓冲区 map函数开始产生输出时并非简单地将它输出到磁盘。因为频繁的磁盘操作会导致性能严重下降。它的处理过程更复杂,数据首先写到内存中的一个缓冲区。
当写入的数据量达到预先设置的阙值后便会执行一次I/O操作将数据写入到磁盘。每个map任务都会分配一个环形内存缓冲区,用于存储map任务输出的键值对(
spill(溢写)
作用 把内存缓冲区中的数据写入到本地磁盘,在写入本地磁盘时