大数据基础篇--MapReduce工作原理

这篇具有很好参考价值的文章主要介绍了大数据基础篇--MapReduce工作原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

理解什么是map,什么是reduce,为什么叫mapreduce

MapReduce可以分成Map和Reduce两部分理解。

Map详解

1.Map:映射过程,把一组数据按照某种Map函数映射成新的数据。我们将这句话拆分提炼出重要信息,也就是说,map主要是:映射、变换、过滤的过程。一条数据进入map会被处理成多条数据,也就是1进N出。

Reduce详解

2.Reduce:归纳过程,把若干组映射结果进行汇总并输出。我们同样将重要信息提炼,得到reduce主要是:分解、缩小、归纳的过程。一组数据进入reduce会被归纳为一组数据(或者多组数据),也就是一组进N出。

MapReduce详解

3.mapreduce:我们将map过程和reduce过程连接起来,会发现会发现它是这样的(如下图)

大数据基础篇--MapReduce工作原理
在mapreduce的过程中,想要实现复杂的操作,就要多个类似上图的计算串联成为一个复杂计算过程,得到想要的结果,因为mapreduce过程更关心的是方法(过程的实现),并没有给出API层面的数据集的概念。所以可以理解为,mapreduce过程是整个计算框架的基本运算单位。
MapReduce工作流程
大数据基础篇--MapReduce工作原理
在上图中, MapReduce 的工作流程大致可以分为5步,具体如下:
大数据基础篇--MapReduce工作原理

分片、格式化数据源

输入 Map 阶段的数据源,必须经过分片和格式化操作。

分片操作:指的是将源文件划分为大小相等的小数据块( Hadoop 2.x 中默认 128MB ),也就是分片( split ),
Hadoop 会为每一个分片构建一个 Map 任务,并由该任务运行自定义的 map() 函数,从而处理分片里的每一条记录;
格式化操作:将划分好的分片( split )格式化为键值对<key,value>形式的数据,其中, key 代表偏移量, value 代表每一行内容。

执行 MapTask

每个 Map 任务都有一个内存缓冲区(缓冲区大小 100MB ),输入的分片( split )数据经过 Map 任务处理后的中间结果会写入内存缓冲区中。
如果写人的数据达到内存缓冲的阈值( 80MB ),会启动一个线程将内存中的溢出数据写入磁盘,同时不影响 Map 中间结果继续写入缓冲区。
在溢写过程中, MapReduce 框架会对 key 进行排序,如果中间结果比较大,会形成多个溢写文件,最后的缓冲区数据也会全部溢写入磁盘形成一个溢写文件,如果是多个溢写文件,则最后合并所有的溢写文件为一个文件。

执行 Shuffle 过程

MapReduce 工作过程中, Map 阶段处理的数据如何传递给 Reduce 阶段,这是 MapReduce 框架中关键的一个过程,这个过程叫作 Shuffle 。
Shuffle 会将 MapTask 输出的处理结果数据分发给 ReduceTask ,并在分发的过程中,对数据按 key 进行分区和排序。

执行 ReduceTask

输入 ReduceTask 的数据流是<key, {value list}>形式,用户可以自定义 reduce()方法进行逻辑处理,最终以<key, value>的形式输出。

写入文件

MapReduce 框架会自动把 ReduceTask 生成的<key, value>传入 OutputFormat 的 write 方法,实现文件的写入操作。

整体流程图
大数据基础篇--MapReduce工作原理

MapTask
大数据基础篇--MapReduce工作原理
1.Read 阶段: MapTask 通过用户编写的 RecordReader ,从输入的 InputSplit 中解析出一个个 key / value 。
2.Map 阶段:将解析出的 key / value 交给用户编写的 Map ()函数处理,并产生一系列新的 key / value 。
3.Collect 阶段:在用户编写的 map() 函数中,数据处理完成后,一般会调用 outputCollector.collect() 输出结果,在该函数内部,它会将生成的 key / value 分片(通过调用 partitioner ),并写入一个环形内存缓冲区中(该缓冲区默认大小是 100MB )。
4.Spill 阶段:即“溢写”,当缓冲区快要溢出时(默认达到缓冲区大小的 80 %),会在本地文件系统创建一个溢出文件,将该缓冲区的数据写入这个文件。

将数据写入本地磁盘前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作。
写入磁盘之前,线程会根据 ReduceTask 的数量,将数据分区,一个 Reduce 任务对应一个分区的数据。
这样做的目的是为了避免有些 Reduce 任务分配到大量数据,而有些 Reduce 任务分到很少的数据,甚至没有分到数据的尴尬局面。
如果此时设置了 Combiner ,将排序后的结果进行 Combine 操作,这样做的目的是尽可能少地执行数据写入磁盘的操作。

5.Combine 阶段:当所有数据处理完成以后, MapTask 会对所有临时文件进行一次合并,以确保最终只会生成一个数据文件

合并的过程中会不断地进行排序和 Combine 操作,
其目的有两个:一是尽量减少每次写人磁盘的数据量;二是尽量减少下一复制阶段网络传输的数据量。
最后合并成了一个已分区且已排序的文件。

ReduceTask
大数据基础篇--MapReduce工作原理
1.Copy 阶段: Reduce 会从各个 MapTask 上远程复制一片数据(每个 MapTask 传来的数据都是有序的),并针对某一片数据,如果其大小超过一定國值,则写到磁盘上,否则直接放到内存中
2.Merge 阶段:在远程复制数据的同时, ReduceTask 会启动两个后台线程,分别对内存和磁盘上的文件进行合并,以防止内存使用过多或者磁盘文件过多。
3.Sort 阶段:用户编写 reduce() 方法输入数据是按 key 进行聚集的一组数据。

为了将 key 相同的数据聚在一起, Hadoop 采用了基于排序的策略。
由于各个 MapTask 已经实现对自己的处理结果进行了局部排序,因此, ReduceTask 只需对所有数据进行一次归并排序即可。

4.Reduce 阶段:对排序后的键值对调用 reduce() 方法,键相等的键值对调用一次 reduce()方法,每次调用会产生零个或者多个键值对,最后把这些输出的键值对写入到 HDFS 中
5.Write 阶段: reduce() 函数将计算结果写到 HDFS 上。

合并的过程中会产生许多的中间文件(写入磁盘了),但 MapReduce 会让写入磁盘的数据尽可能地少,并且最后一次合并的结果并没有写入磁盘,而是直接输入到 Reduce 函数。

参考文章:https://blog.csdn.net/Shockang/article/details/117970151

mapreduce的一些知识点:添加链接描述

mapreduce详细讲解:添加链接描述

借鉴的文章 添加链接描述文章来源地址https://www.toymoban.com/news/detail-441499.html

到了这里,关于大数据基础篇--MapReduce工作原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 数据链路层基本原理及交换机基础工作原理(入门)

    1.1什么是数据链路层 数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层来的数据可靠地传输到相邻节点的目标机网络层。 1.2功能 数据链路层主要有两个功能 :帧编

    2024年02月03日
    浏览(48)
  • 什么是向量数据库?向量数据库工作原理?向量数据库解决方案?

    向量数据库是一种专门用于存储和处理向量数据的数据库系统。向量数据是指具有多维度属性的数据,例如图片、音频、视频、自然语言文本等。传统的关系型数据库通常不擅长处理向量数据,因为它们需要将数据映射成结构化的表格形式,而向量数据的维度较高、结构复杂

    2024年02月15日
    浏览(56)
  • Hadoop之MapReduce实现原理-基础篇

    MR诞生于搜索领域,主要是为了解决海量数据处理扩展性差的问题,它的实现时基于谷歌MR的设计思想,包括简化编程接口、提高系统容错性等。 易于编程:用户无需关注数据切片、数据传输、节点间通信等,只需要关注业务逻辑的实现,简化了开发过程且提高了开发效率。

    2024年02月05日
    浏览(47)
  • MapReduce基础原理、MR与MPP区别

    MapReduce(MR)本质上是一种用于数据处理的编程模型; MapReduce用于海量数据的计算 , HDFS用于海量数据的存储 (Hadoop Distributed File System,Hadoop分布式文件系统)。 Hadoop MapReduce 是一个编程框架,Hadoop环境中,可运行用各种语言编写的MapReduce程序,用于创建在大型商用硬件集群

    2024年02月14日
    浏览(33)
  • 深入理解区块链的工作原理

    作者:禅与计算机程序设计艺术 区块链是一个由分布式数据库组成的共享系统,它的独特之处在于它能够记录下所有历史上的数据,并通过一个公共的、不可篡改的 ledger(账本) 来记录所有交易记录和数据变更。通过这种方式,所有的用户都可以验证、验证交易记录和数据,

    2024年02月08日
    浏览(42)
  • 深入理解 PostgreSQL 的架构和内部工作原理

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月16日
    浏览(36)
  • Java开发 - 深入理解Redis Cluster的工作原理

    前面我们讲过Redis Cluster的搭建方式,也是本着应用优先的原则,所以对其基础概念和原理几乎没有涉及,但当学会了Redis集群的搭建方式之后,对于其原来我们还是要知道一些的,所以这篇博客,我们将一起来学习Redis Cluster的一些相关知识。 在开始Redis Cluster的讲解之前,还

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

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

    2024年02月07日
    浏览(44)
  • 大数据学习(6)-hive底层原理Mapreduce

    大数据学习 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞 MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个

    2024年02月08日
    浏览(58)
  • “深入理解Java虚拟机(JVM):背后的工作原理解析“

    标题:深入理解Java虚拟机(JVM):背后的工作原理解析 摘要:本文将深入探讨Java虚拟机(JVM)的工作原理,包括内存管理、垃圾回收、即时编译器等关键概念,以及如何优化代码以提高性能。通过示例代码和详细解释,读者将对JVM的底层原理有更深入的理解。 正文: 一、

    2024年02月12日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包