架构师带你细细的捋一遍MapReduce全流程【附调优指南】

简介: 架构师带你细细的捋一遍MapReduce全流程【附调优指南】

这是我的第22篇原创


MapReduce是分布式计算的鼻祖,虽然我们已经不需要再写MR了,但是了解MR的底层逻辑,对解决各种分布式遇到的问题、调优,有极大的帮助。废话不多说,OK,let's GO!


大数据工程师版

MapReduce流程分为4个步骤:

  1. input:从hdfs中读取文件,数据读取组件是TextInputFormat和LineRecordReader。
  2. mapper:根据input步骤读取过来的数据,进行数据映射。之后进行混洗,混洗主要进行分区、排序和合并。
  3. reduce:混洗好的数据交给Reduce步骤进行计算。
  4. output:Reduce计算好的数据经过TextOutputFormat和LineRecordQriter组件,输出到对应OutPutPath中。


大数据高级工程师版

MapReduce流程分为7个步骤:

  1. 数据读取:从hdfs中读取文件,数据读取组件是TextInputFormat和LineRecordReader。
  2. 数据分片:调用Job.steInputFormaiClass()定义的InputFormat,将数据切分成小的Split。
  3. Mapper:每一个Split生成一个MapTask,对每个分片中的数据进行排序,并进行部分合并,刷写到磁盘中。
  4. Shuffle:将每个MapTask中处理好的数据,重新排序后,进行分区,copy到Reduce的缓存中。其中可以配置数据压缩、reduce节点数等参数。
  5. Reduce:将缓存中的数据进行进一步的排序和merge,形成一份文件,交给Reduce函数进行顺序计算。
  6. 计算好的数据经过TextOutputFormat和LineRecordQriter组件,进行输出。
  7. 最后根据OutPutPath输出每个文件到对应的HDFS中。


架构师版

MapReduce一共有7个角色参与,分为4个大阶段,7个小阶段。分别是:

1、任务启动阶段

   1.1、由Client端发起请求;

   1.2、YarnRunner接受请求并申请资源;

   1.3、ResourceManager检索资源情况,分配资源路径给YarnRunner;

   1.4、YarnRunner进行分片,申请启动MRAppMaster

   1.5、ResourceManager根据分片和job等信息,选择数据所在节点启动MapTask(程序找数据),唤醒MRAppMaster

   1.6、MRAppMaster启动,持续监控和管理任务

   1.7、MapTask启动,开始干活

2、Map阶段

   2.1数据读取,每个task读取自己节点上的数据。

   2.2数据处理

       2.2.1每个task对自己读取到的数据进行split,分成更小的数据块

       2.2.2对每个split的数据进行map,提取key、value、con

       2.2.3对数据进行分区,有条件建议自定义分区,可以解决数据倾斜的问题,对之后的reduce也有极大的优化

       2.2.4数据进入环形缓冲区,以起始点为赤道,到达溢出比后,刷新赤道

       2.2.5溢出的数据刷入sort进行排序

       2.2.6排序好的数据放入spill,进行merge后有序写入hdfs

   2.3shuffle阶段:广义shuffle阶段从map之后就开始,到调用reduce函数结束。这里只是将hdfs的数据刷入reduce的缓存区域。

3、reduce阶段:

   3.1Reduce启动

       3.1.1MRAppMaster监控到redeuce任务即将结束,开始申请启动ReduceTask;RM接受申请,根据分区结果,启动若干ReduceTask

       3.1.2ReduceTask启动,把每个map结果中的不同分区的数据,shuffle数据到对应Reducetask所在节点的缓存

   3.2数据处理

       3.2.1在缓存中对每个sort进行merge(内存、缓存都有)

       3.2.2将merge后的结果,重新进行spill,排序后,落到hdfs

       3.2.3将所有小文件merge成一个大文件

   3.4、Reduce阶段

       3.4.1调用Reduce函数,对排序好的file进行汇总

       3.4.2将最终结果写入到hdfs中

4任务结束阶段

   4.1MRAppMaster监控到每个Reduce节点的执行情况

   4.2向上汇报,并申请注销自己

   4.3RM注销MRAppMaster,并向上汇报

   4.4YarnRunner返回任务执行完成信息

   4.5客户端接受信息,任务结束

   

MapReduce调优指南

相关文章
|
4月前
|
存储 缓存 运维
LAMP架构调优(五)——网页缓存设置
LAMP架构调优(五)——网页缓存设置
32 1
|
17天前
|
存储 缓存 前端开发
Django 后端架构开发:存储层调优策略解析
Django 后端架构开发:存储层调优策略解析
35 2
|
17天前
|
消息中间件 存储 监控
Django后端架构开发:Celery异步调优,任务队列和调度
Django后端架构开发:Celery异步调优,任务队列和调度
32 1
|
2月前
|
NoSQL Redis UED
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
|
25天前
|
缓存 Java Maven
SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程
Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件,它基于RESTful风格,为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。
|
4月前
|
存储 监控 供应链
一款数字化管理平台源码:云MES系统(附架构图、流程、)
制造生产企业打造数字化生产管控的系统,从原材料、生产报工、生产过程、质检、设备、仓库等整个业务流程的管理和控制,合理安排生产计划、实时监控生产、优化生产工艺、降低不良产出和运营成本;
86 8
一款数字化管理平台源码:云MES系统(附架构图、流程、)
|
3月前
|
监控 Java 持续交付
构建Java微服务架构的CI/CD流程
构建Java微服务架构的CI/CD流程
|
4月前
|
监控 测试技术 数据库
探索微服务架构下的系统调优实践
【5月更文挑战第27天】在当今软件开发领域,微服务架构因其灵活性、可扩展性而受到青睐。然而,随之而来的是复杂性增加和性能调优的挑战。本文将深入探讨在微服务环境中进行系统调优的策略与实践,通过分析真实案例,揭示优化过程中的关键步骤和考虑因素,为追求高性能微服务系统的开发者提供参考。
48 1
|
4月前
|
分布式计算 Hadoop Java
Hadoop MapReduce 调优参数
对于 Hadoop v3.1.3,针对三台4核4G服务器的MapReduce调优参数包括:`mapreduce.reduce.shuffle.parallelcopies`设为10以加速Shuffle,`mapreduce.reduce.shuffle.input.buffer.percent`和`mapreduce.reduce.shuffle.merge.percent`分别设为0.8以减少磁盘IO。
|
4月前
|
架构师 开发工具 C++
最新python--类与面向对象-1,一线互联网架构师360°全方面性能调优
最新python--类与面向对象-1,一线互联网架构师360°全方面性能调优
最新python--类与面向对象-1,一线互联网架构师360°全方面性能调优