图文详解 MapReduce 工作流程

282 篇文章 546 订阅
订阅专栏

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见 大数据技术体系

正文

在这里插入图片描述

MapReduce 编程模型

MapReduce 编程模型开发简单且功能强大,专门为并行处理大规模数据量而设计,接下来,通过一张图来描述 MapReduce 的工作过程,如图所示。

在这里插入图片描述

关于 MapReduce 编程模型的更多细节请参考我的这篇博客—— MapReduce 编程模型到底是怎样的?

整体流程

在上图中, MapReduce 的工作流程大致可以分为5步,具体如下:
在这里插入图片描述

分片、格式化数据源

输入 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 方法,实现文件的写入操作。

MapTask

在这里插入图片描述

  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 操作,这样做的目的是尽可能少地执行数据写入磁盘的操作。

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

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

ReduceTask

在这里插入图片描述

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

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

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

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

MapReduce工作流程
Wuyikkk的博客
02-17 8103
1、Mapper的map()方法传来的<k,v>数据会先进入环形缓冲区kvbuffer(内存中首尾相连的数据结构,环形缓冲区由数据区和索引区组成),当kvbuffer中的数据达到80%,就会发生溢写。 2、溢写前,kvbuffer会对缓冲区内的数据进行快排,先按分区编号排序,再按map的key排序。(排序只会改变索引区索引的顺序,不会改变数据区的数据) 3、溢写多次,就会产生多个磁盘文件file.out,和索引文件file.out.index。 4、多个溢写文件会合并成一个文件(通过归并排序).
Hadoop新MapReduce框架Yarn详解
03-04
使用和学习过老Hadoop框架(0.20.0及之前版本)的同仁应该很熟悉如下的原MapReduce框架图:图1.Hadoop原MapReduce架构从上图中可以清楚的看出原MapReduce程序的流程及设计思路:可以看得出原来的map-reduce架构是...
MapReduce执行流程
03-04
MapReduce的大体流程是这样的,如图所示:由图片可以看到mapreduce执行下来主要包含这样几个步骤1.首先对输入数据源进行切片2.master调度worker执行map任务3.worker读取输入源片段4.worker执行map任务,将任务输出保存在本地5.master调度worker执行reduce任务,reduceworker读取map任务的输出文件6.执行reduce任务,将任务输出保存到HDFS若对流程细节进行深究,可以得到这样一张流程图从生命周期的角度来看,mapreduce流程大概经历这样几个阶段:初始化、分配、执行、反馈、成功与失败的后续处理每个阶段所做的事情大致如下1
Hadoop各组件详解MapReduce篇)
01-07
MapReduce MapReduce简介及优点 MapReduce是一个分布式运算程序的编程框架,是Hadoop数据分析的核心 MapReduce的核心思想是将用户编写的逻辑代码和架构中的各个组件整合成一个分布式运算程序,实现一定程序的并行处理海量数据,提高效率 海量数据难以在单机上处理,而一旦将单机版程序扩展到集群上进行分布式运行势必将大大增加程序的复杂程度,所以引入MapReduce架构,开发人员可以将精力集中于数据处理的核心业务逻辑上,而将分布式程序中的公共功能封装成框架,以降低开发的难度 一个完整的MapReduce 程序有三类实例进程 MRAppMaster:负责整个程序的协调过程
Hadoop中的MapReduce流程(图解)
最新发布
weixin_52134189的博客
04-11 1351
MapReduce流程
MapReduce框架原理之MapReduce工作流程
qq_44110741的博客
09-19 362
文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 MapReduce工作流程详解 一、MapReduce工作流程图 二、MapReduce工作流程详解 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warn..
MapReduce概述及工作流程
热门推荐
yaya_jn的博客
09-20 1万+
Map:1、根据业务需求处理数据并映射为KV模型2、并行分布式3、计算向数据移动Reduce:1、数据全量/分量加工2、Reducer中可以包含不同的key 分区的范围大于分组3、相同分区的Key汇聚到一个Reducer中4、“相同”的Key调用一次reduce方法5、排序和比较实现key的汇聚K,V使用自定义数据类型 MyKey:WritableComparable1、节省开发成本,提高程序自由度。
MapReduce详细流程
08-17
里边就一张图,显示了MapReduce的详细流程,还算是比较实用。
2020-10-10
CurtCosling的博客
10-10 80
shuffle机制 具体Shuffle过程详解,如下: (1)MapTask收集我们的map()方法输出的kv对,放到内存缓冲区中 (2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件 (3)多个溢出文件会被合并成大的溢出文件 (4)在溢出过程及合并的过程中,都要调用Partitioner进行分区和针对key进行排序 (5)ReduceTask根据自己的分区号,去各个MapTask机器上取相应的结果分区数据 (6)ReduceTask会抓取到同一个分区的来自不同MapTask的结果文件,
MapReduce核心思想图文详解
08-26
今天小编就为大家分享一篇关于MapReduce核心思想图文详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
20、MapReduce 工作流介绍
05-29
20、MapReduce 工作流介绍 网址:https://blog.csdn.net/chenwewi520feng/article/details/130455696 本文介绍MapReduce 工作流。 本文前提:hadoop环境可用。
JavaScript mapreduce工作原理简析
10-27
MapReduce是一个编程模型,用于作业调度,也是一个处理和生成超大数据集的算法模型的相关实现,本文将详细介绍JavaScript mapreduce工作原理,需要的朋友可以参考下
MapReduce工作流程(MapTask、ReduceTask工作机制)
weixin_47621995的博客
07-23 884
MapReduce工作流程一: MapReduce工作流程二: 上面的流程是整个MapReduce最全工作流程,但是Shuffle过程只是从第7步开始到第16步结束,具体Shuffle过程详解,如下: (1)MapTask收集我们的map()方法输出的kv对,放到内存缓冲区中 (2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件 (3)多个溢出文件会被合并成大的溢出文件 (4)在溢出过程及合并的过程中,都要调用Partitioner进行分区和针对key进行排序 (5)ReduceTask根据自己的分
mapreduce详细流程总结
m0_64622390的博客
10-24 1024
mapreduce详细流程理解,总结
干货丨MapReduce工作流程是怎样的?
传智播客的专栏
06-09 4447
MapReduce编程模型开发简单且功能强大,专门为并行处理大规模数据量而设计,接下来,我们通过一张图来描述MapReduce工作过程,如下图所示。在图中,MapReduce工作流程大致可以分为5步,具体如下:1.分片、格式化数据源输入Map阶段的数据源,必须经过分片和格式化操作。分片操作:指的是将源文件划分为大小相等的小数据块(Hadoop2.x中默认128M),也...
MapReduce工作流程
weixin_44901473的博客
03-07 1585
Collect 阶段:在用户编写的 map() 函数中,数据处理完成后,一般会调用 outputCollector.collect() 输出结果,在该函数内部,它会将生成的 key / value 分片(通过调用 partitioner ),并写入一个环形内存缓冲区中(该缓冲区默认大小是 100MB )。Reduce 阶段:对排序后的键值对调用 reduce() 方法,键相等的键值对调用一次 reduce()方法,每次调用会产生零个或者多个键值对,最后把这些输出的键值对写入到 HDFS 中。
智能指针shared_ptr实现
09-14
shared_ptr是一种智能指针,它是C++11引入的一种新特性。shared_ptr的设计思路是利用三个主要组件来实现智能指针的功能:一块空间、计数器和锁。 首先,shared_ptr通过一块堆空间来存储所指向的对象。这个堆空间是由shared_ptr自动管理的,当最后一个指向对象的shared_ptr被销毁时,这块空间会被释放。 其次,shared_ptr使用一个计数器来记录当前有多少个shared_ptr共享同一个对象。每当有一个新的shared_ptr指向对象时,计数器就会加1;当有一个shared_ptr被销毁时,计数器就会减1。当计数器为0时,表示没有任何shared_ptr指向对象,此时对象会被释放。 最后,shared_ptr还使用锁来确保多线程环境下的安全访问。由于shared_ptr是可以被多个指针共享的,因此在多线程环境中,可能存在多个线程同时操作同一个shared_ptr。为了避免竞争条件,shared_ptr内部使用了锁来保证多线程操作的原子性和线程安全性。 总结起来,shared_ptr实现了智能指针的功能,通过一块空间、计数器和锁来管理所指向对象的生命周期。它可以跟踪对象的引用计数,并在最后一个shared_ptr被销毁时自动释放对象。同时,shared_ptr还具备多线程安全的特性,可以在多线程环境下使用。 参考文献: 前面介绍的auto_ptr和unique_ptr都存在着些许的缺陷,显得不是那么的“智能”,下面我们来看一下较为智能的shared_ptr的设计思路(一块空间、计数器、锁) 主要介绍了C++11新特性之智能指针,包括shared_ptr, unique_ptr和weak_ptr的基本使用,感兴趣的小伙伴们可以参考一下 这是因为weak_ptr是一种不控制所指向对象生存期的智能指针,它指向由一个shared_ptr管理的对象。将一个weak_ptr绑定到shared_ptr不会改变shared_ptr的引用计数。一旦最后一个指向对象的shared_ptr被销毁,对象就会被释放。即使weak_ptr指向对象,对象也会被释放。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 图文详解 MapReduce 工作流程 99734
  • MySQL 启动报错:Job for mysqld.service failed because the control process exited with error code. 73266
  • G1 GC是什么? 46689
  • Arthas 看了官方文档还不会用?进来了解一哈~ 46064
  • 全网最新最全的Java即时编译器优化手段大全 45450

分类专栏

  • 大数据技术体系 282篇
  • 大数据理论体系 99篇
  • JVM 67篇
  • Java并发 46篇
  • 算法 37篇
  • 人工智能 6篇
  • Java 2篇
  • Spark异常问题汇总 14篇
  • Spark 配置参数 2篇
  • 大数据异常 8篇
  • 大数据安装部署 13篇

最新评论

  • MySQL 启动报错:Job for mysqld.service failed because the control process exited with error code.

    扛着火车兜风i: 我的老哥哥,你太6了

  • Hadoop 集群如何升级?

    2301_78790639: 没用,我需要的是步骤和命令,你这个纯文字有什么用?

  • 大数据存储架构详解:数据仓库、数据集市、数据湖、数据网格、湖仓一体

    普通网友: 学到了!我也写了一篇获取【大厂面试真题解析、核心开发学习笔记、最新全套讲解视频、实战项目源码讲义、学习路线简历模板】的文章

  • Hive 3.1.2启动报错 guava 版本冲突问题解决

    q842508326: 但是这样的话hive和spark又冲突了,spark的guava版本是低版本

  • 图文详解HDFS体系架构

    -.-不爱江山爱大饼萌。: 我也想问

大家在看

  • nacos配置发布流程代码示例
  • 基于 Redis 实现分布式锁的全过程
  • C语言 | Leetcode C语言题解之第126题单词接龙II
  • 如何才能更好地融入自我世界 106
  • Java | Leetcode Java题解之第126题单词接龙II

最新文章

  • Flink 环境对象
  • Flink DataStream 体系
  • 大数据处理架构详解:Lambda架构、Kappa架构、流批一体、Dataflow模型、实时数仓
2023年28篇
2022年97篇
2021年433篇
2020年11篇

目录

目录

评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司池州关键词按天收费朔州建站价格来宾网站优化排名哪家好邢台SEO按天计费哪家好阳江企业网站建设公司海东推广网站报价泰安网站优化按天计费多少钱岳阳网站seo优化推荐漳州外贸网站建设多少钱铜川优秀网站设计哪家好威海seo网站推广哪家好阿坝百度网站优化排名多少钱梧州关键词按天扣费报价黄石建网站公司沧州网站搭建报价舟山百度网站优化排名推荐文山百度网站优化排名池州建站报价锦州高端网站设计哪家好天门网站推广系统多少钱石岩百姓网标王推广哪家好银川网络广告推广哪家好天水关键词按天收费报价本溪网站关键词优化多少钱桂林网站改版公司宝鸡模板推广公司成都建站推荐淮南百搜标王漯河seo优化多少钱湛江网站排名优化哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化