MapReduce工作流程
MapReduce工作流程
MapReduce工作流程
Map阶段:
1.首先由客户端把数据进行切片处理,然后提交切片信息给ResourceManager。
2.ResourceManager找到一个NodeManager,由NodeManager创建分析出Maptask数量
3.每个输入分片由一个Maptask任务来处理。由RecorderReader以KV键值对的形式读取数据并传递给Mapper,读取一行,传递一行。
4.环形缓冲区:Mapper处理完成之后输出数据,首先会放在环形缓冲区中(outputCollector),当 缓冲区中的数据到 80%时,会把数据写到本地磁盘中,所以一个分区的数据可能会存在多个文件中。在写入磁盘前,首先根据业务逻辑的设定将数据划分为相应数目的分区,一个分区对应一个reduce,并且把数据 K 按字典顺序进行排序(区内有序)
5.归并排序:把属于一个分区中的数据合在一起再次进行排序(归并排序),但只是排序并没有把V
值合并
6.Combiner合并:由于一个分区中可能存在非常多的键值对,数据量非常大,为了减少map任务
和reduce任务之间的大量的数据传输,在mapper阶段对一个分区内的数据的V值进行合并,计算
出V的最大值,把这对最终算出的键值对传递给Reduce。
Reduce阶段:
接受各个节点Mapper传递过来的键值对,一个redure负责一个分区,相同K值为一组,调用一次
reduce,把V值相加,求出最终结果