MapReduce的工作过程以及Shuffle的通俗理解

在这里插入图片描述

  1. MapReduce的处理流程
    a. 在runner类中设置输入和输出路径,输入路径可以是文件,也可以是文件夹,对文件或文件夹中的所有目录,交给job设定的InputFormat进行处理

    b. 程序根据InputFormat将文件分割成一个个Split,一个Split是一个Maptask,每个Map task有一个环形的内存缓冲区,输入数据经过map阶段处理后的中间结果会写入该内存缓冲区,并且决定数据写入到哪个分区(也就是最终交给哪个Reduce task来完成),这是由设置的Partition来完成的。

    c. 当一个Map task写入其缓冲区的数据达到阈值,会启动一个线程将内存数据写入磁盘(这期间Map仍然在不断将数据写入缓冲区),生成一个溢写文件,这个过程称为溢写

    d. 在溢写的开始后,会对内存中的数据进行排序和合并(合并过程保证的是每个溢写文件没有相同的key值),以减少数据拉取到Reduce端的开销

    e. 在Map task处理完成并完成溢写后,将所有的溢写文件进行合并形成一个溢写文件(也就是一共两次合并过程),同样保证最终形成的溢写文件没有重复的key值

    f. Reduce端会不断的从jobTracker那里询问map task工作是否结束,如果结束(或者完成任务的map task的数量到达了一定的比例),则不断的从已完成的Map task端拉取数据,并不断的进行排序和合并过程,最终形成一个文件作为Reduce task的输入

    g. Reduce task根据输入完成相应的操作后,通过job设置的OutputFormat进行输出

  2. MapReduce的Shuffle过程
    a. Shuffle是MapReduce的核心,描述了从Map task输出数据到数据输入Reduce task的这一整段过程

    b. 在Map端,每个Map task会有一个环形缓冲区,其输出的值会写入缓冲区并对每个值进行分区决定要处理的Reduce task端,当缓冲区内存到达阈值时候开启溢写过程将缓冲区写入到磁盘,在溢写的过程中对值进行合并,在所有Map task完成任务后,对所有的溢写文件再次进行合并,一遍Reduce task拉取

    c. 在Reduce端,在Map task完成或完成数量到达一定比例后,Reduce端从Map端进行数据的拉取,并对拉取的数据不断进行和Map端相同的排序,合并过程,形成的文件作为Reduce端的输入。

    d. 上述的两个过程就是发生在Map端和Reduce端的shuffle过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值