【MapReduce】MapReduce工作机制

一个mapreduce作业,一般分为两阶段执行:map阶段和reduce阶段,下面分别对这两阶段进行介绍。

Map阶段

【MapReduce】MapReduce工作机制

Map阶段又分为五部分:读取文件阶段,MapTask阶段,collect阶段,溢写阶段,combine阶段。
首先客户端把待处理文件分片信息、jar包信息、参数信息等提交到HDFS。然后Yarn集群接受任务,启动AppMaster把任务分配NodeManager,并由NodeManager执行MapTask任务。从上图的第6步开始,进入读取文件阶段。

  1. 读取文件阶段
    MapTask通过用户编写的RecordReader,从输入的分片中解析出一个个的k-v对;
  2. MapTask阶段
    每个k-v对调用一次map()函数,输出新的k-v对;
  3. Collect阶段
    MapTask阶段输出的k-v对会先进入环形缓冲区,默认内存大小为100M。在环形缓冲区中,数据进行分区、排序等;
  4. 溢写阶段
    当环形缓冲区写满80%,数据从内存溢写到hdfs,持续多轮以后会产生多个溢写文件。溢写之前,数据会先按分区,再按key排序;
  5. Combine阶段
    当MapTask结束时,多个溢写文件会被合并成一个大的文件。Combine可以把文件中的k-v对数据排列的更紧密一些,减少网络传输I/O。

Reduce阶段

【MapReduce】MapReduce工作机制

Reduce阶段分为四部分:Copy阶段、Merge阶段、sort阶段、Reduce阶段

  1. Copy阶段
    ReduceTask从各个MapTask上远程拷贝一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中;
  2. Merge阶段
    远程拷贝文件的同时,ReduceTask启动两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多;
  3. sort阶段
    为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现了对自己处理结果的局部排序,此步中只需对所有数据进行一次归并排序;
  4. Reduce阶段
    以上步骤处理后的数据调用reduce()函数,每个k-v调用一次。最后把输出文件写到HDFS中。

以上就是对MapReduce工作机制的简单说明,如有错误的地方,还望指正。