【MapReduce】MapReduce工作机制

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

Map阶段

在这里插入图片描述

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阶段

在这里插入图片描述

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值