当前位置: 首页 > news >正文

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

相关文章:

  • Spring Boot中的分布式文件系统
  • 版本控制系统:Git 纯应用(持续更新)
  • 轻松创建对象——简单工厂模式(Python实现)
  • vue 中使用element-ui实现锚点定位表单
  • 矮油,希喂、喜崽、爱立方主食冻干是超贵的进口平替?最新测评
  • 大二暑假 + 大三上
  • uniapp小程序打开地图导航
  • 2024国内排名靠前的十大源码交易平台
  • 《Unity3D高级编程之进阶主程》第二章 架构(二) - 软件系统架构思维方式
  • keepalived HA nginx方案
  • vue3记个坑关于router的特点
  • Reflector简介-archlinux更新镜像列表工具
  • Kafka 进阶指南
  • vue3引入本地静态资源图片
  • 免费的CMS指纹识别系统
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Kibana配置logstash,报表一体化
  • Quartz初级教程
  • React16时代,该用什么姿势写 React ?
  • Spring Boot快速入门(一):Hello Spring Boot
  • Theano - 导数
  • 记一次删除Git记录中的大文件的过程
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 说说动画卡顿的解决方案
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 赢得Docker挑战最佳实践
  • 原生js练习题---第五课
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • $.ajax()参数及用法
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (9)目标检测_SSD的原理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (定时器/计数器)中断系统(详解与使用)
  • (二十三)Flask之高频面试点
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (七)glDrawArry绘制
  • (四)Android布局类型(线性布局LinearLayout)
  • .NET 8.0 发布到 IIS
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .Net 路由处理厉害了
  • .net 设置默认首页
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net 验证控件和javaScript的冲突问题
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @Transactional 竟也能解决分布式事务?
  • [ C++ ] STL_list 使用及其模拟实现
  • [17]JAVAEE-HTTP协议
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [AIGC] CompletableFuture的重要方法有哪些?
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured