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会将排序好的结果进行输出。

相关推荐
链上日记1 分钟前
凯敏雅克签约恒远善汇团队为进军中国市场打下坚实的基石
大数据
注塑机数据采集联网31 分钟前
中科晟达注塑机 MES 系统:从车间到数字化的智能制造实践
大数据·数据仓库·人工智能·物联网·制造·数据库架构
段一凡-华北理工大学43 分钟前
高炉能源系统智能化:热风炉、煤气与极致能效~系列文章02:走进热风炉:蓄热、换炉、送风的工艺机理
大数据·数据库·能源·高炉能源管控·热风炉·热风炉工作原理
EnCi Zheng1 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
大数据·数据库·人工智能
安托智造10 小时前
MBD:从二维图纸到三维模型的制造革命(下)
大数据·人工智能·制造·mbd
geovindu11 小时前
sql:SQL Pagination and Limiting Results using PorstgreSQL 18.0
大数据·数据仓库·sql·postgresql·数据库开发·数据库架构·1024程序员节
鲁邦通物联网12 小时前
PLC数据接入MES的边缘计算网关架构设计:别让MES直接理解控制变量
大数据·边缘计算·数据采集·工业数据采集·边缘计算网关·5g数采·plc数采
Never_every9912 小时前
位图转矢量工具哪个好?实测抠抠图AI位图转矢量工具
大数据·前端
4SAPI13 小时前
AI 数据分析工具大模型 API 选型指南
大数据·人工智能·架构·php·1024程序员节