MapReduce的执行流程&排序

2024-06-30 1920阅读

        MapReduce 是一种用于处理大规模数据集的分布式计算模型。它将作业分成多个阶段,以并行处理和分布式存储的方式来提高计算效率。以下是 MapReduce 的执行流程以及各个阶段的详细解释:

MapReduce的执行流程&排序
(图片来源网络,侵删)

1. 作业提交(Job Submission)

        用户通过客户端提交 MapReduce 作业。客户端指定作业的输入数据、输出位置、Map 和 Reduce 函数以及其他配置参数。作业提交后,客户端与集群的资源管理器(如 YARN 的 ResourceManager)进行通信,申请资源并提交作业。

2. 作业初始化(Job Initialization)

        资源管理器接收作业请求并启动作业管理器(JobManager),在 YARN 中叫做 ApplicationMaster。作业管理器负责进一步分解作业并为每个任务申请资源。

3. 任务分配(Task Assignment)

        作业管理器将作业分解成多个任务(Tasks),包括多个 Map 任务和 Reduce 任务。资源管理器根据资源情况分配容器(Containers)来执行这些任务。

4. Map 阶段(Map Phase)

4.1. 输入分片(Input Splitting)

        作业管理器将输入数据集分成若干个数据分片(Splits),每个分片通常对应一个 Map 任务。分片是逻辑上的划分,具体的数据读取由记录读取器(RecordReader)完成。

4.2. Map 任务执行

        每个 Map 任务处理一个输入分片。Map 函数读取输入数据(通常是键值对),并产生中间键值对(key-value pairs)。

4.3. 本地排序(In-Memory Sort)

        Map 任务在本地内存中对输出的中间键值对进行排序。如果输出数据超过内存限制,数据会溢出到磁盘,并进行合并和排序。

        并且会将产生的中间键值对写入内存缓冲区(环形缓冲区),缓冲区的大小默认是100MB,存储阈值是80%,当存储的数据达到80%的时候会触发溢写(spill)操作,溢写会对环形缓冲区中的数据写入磁盘文件中,这个过程就被称为溢写文件。

        在写入磁盘时,数据会被分区,排序,这个排序的过程也就是接下来提到的第一次排序,在maptask执行过程中,可能会发生多次溢写,生成多个溢写文件,在maptask结束之后,这些溢写文件会被合并成为一个或者少量文件。     

5. Shuffle 和 Sort 阶段(Shuffle and Sort Phase)

5.1. Shuffle

        在 Map 任务完成后,中间键值对会传输到 Reducer 节点。Shuffle 阶段负责将这些中间数据从 Mapper 节点传输到合适的 Reducer 节点。

5.2. Sort

        Reducer 接收到来自多个 Mapper 的中间数据后,会进行排序。这个排序是基于键的全局排序,确保相同键的所有值聚集在一起。

6. Reduce 阶段(Reduce Phase)

6.1. Reduce 任务执行

        每个 Reduce 任务接收到排序后的中间数据,调用 Reduce 函数处理每个键及其对应的值。Reduce 函数产生最终的输出键值对。

7. 输出阶段(Output Phase)

        Reduce 任务的输出被写入到指定的输出位置(通常是分布式文件系统,如 HDFS)。

8. 作业完成(Job Completion)

        当所有的 Map 和 Reduce 任务都完成后,作业管理器向资源管理器报告作业完成状态。客户端可以查询作业的状态和统计信息。作业的输出数据现在可以供用户使用。

执行流程图解

  1. 作业提交:客户端 -> 资源管理器
  2. 作业初始化:资源管理器 -> 作业管理器(JobManager/ApplicationMaster)
  3. 任务分配:作业管理器 -> Map 任务和 Reduce 任务
  4. Map 阶段:
    • 输入分片 -> Map 任务 -> 本地排序
  5. Shuffle 和 Sort 阶段:Map 输出 -> Shuffle -> Sort
  6. Reduce 阶段:Reduce 任务执行
  7. 输出阶段:Reduce 输出写入 -> 输出位置
  8. 作业完成:作业管理器报告 -> 资源管理器 -> 客户端查询

通过这种结构化的执行流程,MapReduce 实现了对大规模数据的高效处理和分析。

总结:

        总结一下,整个mapreduce的执行过程会包含大致三次排序过程,第一次发生在maptask阶段,map阶段会对输入的数据进行读取并产生中间键值对,maptask在本地内存中对输出的中间键值对进行排序。如果输出数据超过内存限制,就会触发第二次排序,此时数据会溢出到磁盘,并进行合并和排序。第三次排序:数据在进行shuffer和sort阶段的合并排序之后,会发送到对应的reducer节点,此时会进行最后的归并排序,将所有键值对按照相同的键进行合并,保证拥有相同键的值存放在一起,这次的排序是全局排序,reducetask会将排序好的结果进行输出。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]