Hadoop3教程(十一):MapReduce的详细工作流程

这篇具有很好参考价值的文章主要介绍了Hadoop3教程(十一):MapReduce的详细工作流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(94)MR工作流程

本小节将展示一下整个MapReduce的全工作流程。

Map阶段

首先是Map阶段:

Hadoop3教程(十一):MapReduce的详细工作流程,大数据技术,mapreduce,数据库,大数据,hadoop

  1. 首先,我们有一个待处理文本文件的集合;

  2. 客户端开始切片规划;

  3. 客户端提交各种信息(如切片规划文件、代码文件及其他配置数据)到yarn;

  4. yarn接收信息,计算所需的MapTask数量(按照切片数);

  5. MapTask启动,读取输入文件,默认使用的是TextInputFormat。输出KV对,以TextInputFormat为例,K是偏移量(行在整个文件的字节数),V是这一行的内容;

  6. TextInputFormat读取完毕后,将得到的KV对都输入Mapper(),做自定义业务逻辑处理(核心处理部分);

  7. Mapper()处理完的数据,放入outputCollector,也被叫做环形缓冲区;环形缓冲区是位于内存中的,其实就是个缓冲数组,里面每行数据是分左右两部分,右边一部分是KV数据位,存放的是输入进来的K值和V值,左边一部分是对应的索引数据,存放的信息有:本行KV对的索引、本行KV对的分区、keystart以及valuestart;这里的keystart和valuestart都是指数据在内存中的存储位置,(keystart~valuestart)表示本行key值的存储起止位置,而(valuestart~下一行数据的keystart)表示本行value值的存储起止位置,其他行以此类推。

    环形缓冲区默认大小是100M,它有个有趣的机制用来协调写 + 磁盘持久化。当写满到80%的时候,环形缓冲区会开始进行反向逆写操作

    什么是反向逆写呢?

    可以结合数组做简单理解,就是假设数组有100个位置,即索引位0~99,当写到80%位置,即从索引0开始,到索引79写完了之后,就开始反向逆写,从索引99开始往前写,依次是98/97这样子。

    为什么要这么设置?

    很简单,当写满到80%的时候,系统会开启一个线程,将这80%的数据持久化到磁盘,但持久化的同时,一般希望不会影响正常的写,于是留了20%的空位置,供正常的写操作。因此是持久化 + 写,并行运行。

    想象一下,如果规定只有写满到100%之后才能持久化到磁盘,或者说溢出到磁盘,那么在它持久化的过程中,整个写流程就必须暂停,直到持久化完成后,环形缓冲区清空后才能继续写,这个时间消耗未免太长,效率太低。这么看的话,它这个80%后开始逆写的设置,还挺棒的。

    这里有个潜在的问题,就是如果系统写的很快,在没有持久化完那80%之前,那20%的空位置就写满了,这时候会发生什么情况?

    这时候,写流程就不得不暂停,直到持久化完成之后再恢复写。

  8. 注意,上一步中持久化,或者说溢写数据之前,会先将数据分区(不同分区的数据在Reduce阶段将会被送进不同的ReduceTask)。然后分区内做排序,一般使用快排。

    那排序是针对什么来排呢?

    不是数据的KV,而是数据的那几个索引。

  9. 将数据溢出至文件。注意,单次溢写的数据虽然是写在一个文件里,但是是分区且分区内有序的。

  10. 在数据溢出数次后,我们就有了好几个文件,接下来我们将这些文件merge,做归并排序,相当于是合并成一个文件,然后将结果存储在磁盘。

  11. 做预聚合。比如说如果有两个<a, 1>,那可以直接合并成<a, 2>。当然,这一步并不是必要的,可以结合实际场景具体看是否需要。

到这里,一个MapTask的工作就正式结束了,其他的MapTask就是重复以上过程。

Reduce阶段

Reduce阶段:

Hadoop3教程(十一):MapReduce的详细工作流程,大数据技术,mapreduce,数据库,大数据,hadoop

  1. 一般情况下,等所有MapTask任务都完成后,就会启动响应数据的ReduceTask,并告知每个ReduceTask它需要处理的数据范围。

    这里说的是一般情况下,实际上我们也可以设置,等到一部分MapTask完成之后就先启动几个ReduceTask做处理,相当于Map阶段和Reduce阶段同时进行。这个比较适合MapTask很多的情况,比如说有100个MapTask,等到100个都执行完,才进入Reduce阶段,未免太慢了,所以可以这样并行走。

  2. ReduceTask 主动 从MapTask的结果数据中去拉取需要的数据,然后做合并文件 + 归并排序

    举个例子,ReduceTask_1可能会从MapTask_1拉取指定分区数据,也会从MapTask_2中拉取该分区的数据,这样的话就会有多个文件,而且虽然每个文件内部是有序的(MapTask处理过),但是不同文件之间可能是无序的,因此合并文件 + 归并排序,是很有必要的。

  3. 对上一步产生的结果,一次读取一组,送进Reducer()去做业务逻辑处理。这里的一组是KEY值相同作为一组,因为上一步中已经排序过了,所以KEY值相同的会被放在一起,直接取这一组就可以了。

  4. 分组,暂且不表;

  5. Reducer()处理完了之后,由OutputFormat往外输出,默认是TextOutputFormat,即输出成文本文件。

这就是整个MR处理的流程。文章来源地址https://www.toymoban.com/news/detail-724092.html

参考文献

  1. 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】

到了这里,关于Hadoop3教程(十一):MapReduce的详细工作流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hadoop3教程(三十四):(生产调优篇)MapReduce生产经验汇总

    MR程序执行效率的瓶颈,或者说当你觉得你的MR程序跑的比较慢的时候,可以从以下两点来分析: 计算机性能 节点的CPU、内存、磁盘、网络等,这种属于硬件上的检查; IO操作上的检查 是否发生了数据倾斜?即单一reduce处理了绝大部分数据 Map运行时间过长,导致Reduce一直在

    2024年02月08日
    浏览(47)
  • Hadoop3教程(三十一):(生产调优篇)异构存储

    异构存储,也叫做冷热数据分离 。其中,经常使用的数据被叫做是热数据,不经常使用的数据被叫做冷数据。 把冷热数据,分别存储在不同的存储介质里,从而达到对每个介质的利用率最高,从而实现整体最佳性能,或者说性价比更高(比如说高性能硬盘放经常使用的数据

    2024年02月08日
    浏览(40)
  • MapReduce概述及工作流程

    mapreduce原语(独创) mapreduce工作流程(重点) MR作业提交流程(重点) YARN RM-HA搭建(熟练) 运行自带的wordcount(了解) 动手写wordcount(熟练) MapReduce原语 hadoop MapReduce框架可以让你的应用在集群中 可靠地 容错地 并行 处理TB级别的数据 1024TB=1PB  1024PB=1EB  1024EB=1ZB MapReduc

    2023年04月08日
    浏览(39)
  • mapreduce 的工作原理以及 hdfs 上传文件的流程

    推荐两篇博文 mapreduce 的工作原理: 图文详解 MapReduce 工作流程_mapreduce工作流程_Shockang的博客-CSDN博客 hdfs 上传文件的流程 HDFS原理 - 知乎

    2024年02月10日
    浏览(38)
  • Hadoop3 - MapReduce COVID-19 案例实践

    上篇文章对 MapReduce 进行了介绍,并编写了 WordCount 经典案例的实现,本篇为继续加深 MapReduce 的用法,实践 COVID-19 新冠肺炎案例,下面是上篇文章的地址: https://blog.csdn.net/qq_43692950/article/details/127195121 COVID-19,简称“新冠肺炎”,世界卫生组织命名为“2019冠状病毒病” [1-

    2024年02月08日
    浏览(33)
  • Hadoop之MapReduce 详细教程

    MapReduce 思想在生活中处处可见。或多或少都曾接触过这种思想。MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想,而不是自己原创。 1、 Map 负责“分” ,即把复杂

    2024年02月03日
    浏览(60)
  • 大数据面试题:请描述MapReduce中shuffle阶段的工作流程,如何优化shuffle阶段?

    map阶段处理的数据如何传递给reduce阶段 ,是MapReduce框架中最关键的一个流程,这个流程就叫 shuffle 。 shuffle: 洗牌、发牌——(核心机制:数据分区,排序,合并)。 shuffle是Mapreduce的核心,它分布在Mapreduce的map阶段和reduce阶段。一般把从Map产生输出开始到Reduce取得数据作为输

    2024年02月07日
    浏览(39)
  • kafka入门,Kafka Broker工作流程、Broker重要参数(十一)

    在zookeeper的服务端存储的Kafka相关信息 1)/kafka/brokers/ids [0,1,2] 记录有哪些服务器 2)/kafka/brokers/topics/first/partitions/0/state 记录谁是leader,有哪些服务器可用 3)/kafka/controller 辅助选举leader 1)broker启动后在zk中注册 2)controller谁先注册,谁说了算 3)由选举出来的Controller监听bro

    2024年02月11日
    浏览(35)
  • 大数据-安装 Hadoop3.1.3 详细教程-伪分布式配置(Centos7)

    **相关资源:**https://musetransfer.com/s/q43oznf6f(有效期至2023年3月16日)|【Muse】你有一份文件待查收,请点击链接获取文件 1.检查是否安装ssh (CentOS 7 即使是最小化安装也已附带openssh 可跳过本步骤) 若已安装进行下一步骤 若未安装 请自行百度 本教程不做过多讲解 2.配置ss

    2023年04月08日
    浏览(35)
  • Hadoop3.0大数据处理学习3(MapReduce原理分析、日志归集、序列化机制、Yarn资源调度器)

    前言:如果想知道一堆牌中有多少张红桃,直接的方式是一张张的检查,并数出有多少张红桃。 而MapReduce的方法是,给所有的节点分配这堆牌,让每个节点计算自己手中有几张是红桃,然后将这个数汇总,得到结果。 官方介绍:MapReduce是一种分布式计算模型,由Google提出,

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包