图解MapReduce工作流程

MapReduce概述及工作流程 Map:1、根据业务需求处理数据并映射为KV模型2、并行分布式3、计算向数据移动Reduce:1、数据全量/分量加工2、Reducer中可以包含不同的key 分区的范围大于分组3、相同分区的Key汇聚到一个Reducer中4、“相同”的Key调用一次reduce方法5、排序和比较实现key的汇聚K,V使用自定义数据类型 MyKey:WritableComparable1、节省开发成本,提高程序自由度。 阅读详情



MapReduce特点

整体结构

Hadoop工作架构


我们的应用程序通过Hadoop job client向Hadoop集群提交作业,Hadoop集群中Master节点负责调度各个Slave节点共同完成作业。

Hadoop job client是什么?



我认为有2个含义。1是在代码中使用的api,2是提交作业时使用的命令行工具。


比如在参考文章中的WordCount v1.0源代码,main方法负责构建配置并提交作业:


  public static void main(String[] args) throws Exception {
   Configuration conf = new Configuration();
   Job job = Job.getInstance(conf, "word count");
   job.setJarByClass(WordCount.class);
   job.setMapperClass(TokenizerMapper.class);
   job.setCombinerClass(IntSumReducer.class);
   job.setReducerClass(IntSumReducer.class);
   job.setOutputKeyClass(Text.class);
   job.setOutputValueClass(IntWritable.class);
   FileInputFormat.addInputPath(job, new Path(args[0]));
   FileOutputFormat.setOutputPath(job, new Path(args[1]));
   System.exit(job.waitForCompletion(true) ? 0 : 1);
 }


这里大部分的类都来自包org.apache.hadoop.mapreduce。

而在运行这个程序的时候,先生成jar包,再执行下面的命令:


$ bin/hadoop jar wc.jar WordCount /user/joe/wordcount/input /user/joe/wordcount/output


我们需要提供什么





  1. 提供input locations和output location
    这个是在运行jar包的命令行中提供的.

  2. 提供map和reduce的实现
    这个对应源代码中的TokenizerMapper和IntSumReducer类。

  3. 提供job参数
    具体对应源代码中的main方法.
    包括上面的input/output locations, map和reduce的实现, 都需要以job参数的形式来提供, 才能实际被使用.

流程细节

flat


流水细节


client将软件和数据提交给job,job将输入拆分成一个个独立的数据块,每个数据块提交给不同的map task来处理.


结合HDFS的内容,我推论实际的过程是这样子的:


job查询NameNode元数据,得知输入数据文件对应的数据块及其所在的DataNode位置.
然后将所要执行的软件,和对应的数据块的元数据信息传给对应的DataNode.
每个DataNode所接收到的软件是一样的,但是数据块的元数据信息就只是自己相关的那一部分.
DataNode接收软件和数据块元数据之后,就找出对应的数据,作为输入来执行软件.


map对数据块中的数据进行初次处理,由于每个map task处理的是不同的数据块,所以这里是并行的. 处理完之后输出<key1, value1>形式的中间结果.


框架对中间结果进行处理,对每个中间结果进行排序,分区,发到具体的reduce task,然后再进行排序,分组.


最后reduce程序接收到的输入是<key1, list<value1>>的格式,这是按照key进行分组的结果.


reduce负责处理<key1, list<value1>>, 并输出最终的结果<key2, value2>到输出目录.


整个过程的数据类型变化情况


(input)<k0, v0> -> map -> <k1, v1> -> shuffle & sort -> <k1, list<v1>> -> reduce -> <k2, v2>(output)

map和reduce的个数

map task的个数 = input文件的所有的块的个数.


reduce task的个数可以设置:Job.setNumReduceTasks();设置的大, 会增加框架开销, 但是可以增加负载均衡 并降低故障成本(每一个reduce负责的内容少了). 设置的小则会有相反的结论.


 分区和reduce个数

group


 

MapReduce的细节


浅绿色背景是我们要做的,其他是框架做的.


Map


  • map 是我们定义的map函数, 负责从我们指定的输入中解析出作为中间结果的<Key1, Value1>

  • sort 负责对map的结果进行排序

  • partition 负责对上一步的结果数据进行分区.不同的分区会发到不同的Reduce task.

  • combine 负责本地聚合数据,这样可以减少发到Reduce task的数据量. 由我们自己定义聚合函数,这一步不是必须的.

Reduce


  • shuffle 通过HTTP接收分区数据

  • sort 对分区数据排序, 分组(考虑到不同Map发来的分区,可能有相同的key)

  • reduce 产生最终结果<Key2, Value2>

结合WordCount v1.0看流程

这里结合WordCount v1.0运行过程来对工作流程中每一步的工作有个形象的了解.



demo处理过程


WordCount负责统计输入文件中每个单词的出现次数.


input有2个文件, 每个文件占据一个数据块(每个文件都那么小), 所以会有2个map task分别处理一个数据块.


map的结果是以此记录哪个单词出现了一次, 并没有进行排序和聚合处理.


map到combine之间还有一段, 就是框架对数据进行了排序, combine接收到的已经是排序的结果.


combine负责在本地聚合, 它主要可以减少数据从map到reduce的传输量. 可以看到combine的输出已经是排好序且做了聚合处理.


reduce负责对接收到的来自2个map的数据块进行再分组, 排序, 聚合. 并最终输出结果.



 End 


MapReduce特点

整体结构

Hadoop工作架构


我们的应用程序通过Hadoop job client向Hadoop集群提交作业,Hadoop集群中Master节点负责调度各个Slave节点共同完成作业。

Hadoop job client是什么?



我认为有2个含义。1是在代码中使用的api,2是提交作业时使用的命令行工具。


比如在参考文章中的WordCount v1.0源代码,main方法负责构建配置并提交作业:


  public static void main(String[] args) throws Exception {
   Configuration conf = new Configuration();
   Job job = Job.getInstance(conf, "word count");
   job.setJarByClass(WordCount.class);
   job.setMapperClass(TokenizerMapper.class);
   job.setCombinerClass(IntSumReducer.class);
   job.setReducerClass(IntSumReducer.class);
   job.setOutputKeyClass(Text.class);
   job.setOutputValueClass(IntWritable.class);
   FileInputFormat.addInputPath(job, new Path(args[0]));
   FileOutputFormat.setOutputPath(job, new Path(args[1]));
   System.exit(job.waitForCompletion(true) ? 0 : 1);
 }


这里大部分的类都来自包org.apache.hadoop.mapreduce。

而在运行这个程序的时候,先生成jar包,再执行下面的命令:


$ bin/hadoop jar wc.jar WordCount /user/joe/wordcount/input /user/joe/wordcount/output


我们需要提供什么





  1. 提供input locations和output location
    这个是在运行jar包的命令行中提供的.

  2. 提供map和reduce的实现
    这个对应源代码中的TokenizerMapper和IntSumReducer类。

  3. 提供job参数
    具体对应源代码中的main方法.
    包括上面的input/output locations, map和reduce的实现, 都需要以job参数的形式来提供, 才能实际被使用.

流程细节

flat


流水细节


client将软件和数据提交给job,job将输入拆分成一个个独立的数据块,每个数据块提交给不同的map task来处理.


结合HDFS的内容,我推论实际的过程是这样子的:


job查询NameNode元数据,得知输入数据文件对应的数据块及其所在的DataNode位置.
然后将所要执行的软件,和对应的数据块的元数据信息传给对应的DataNode.
每个DataNode所接收到的软件是一样的,但是数据块的元数据信息就只是自己相关的那一部分.
DataNode接收软件和数据块元数据之后,就找出对应的数据,作为输入来执行软件.


map对数据块中的数据进行初次处理,由于每个map task处理的是不同的数据块,所以这里是并行的. 处理完之后输出<key1, value1>形式的中间结果.


框架对中间结果进行处理,对每个中间结果进行排序,分区,发到具体的reduce task,然后再进行排序,分组.


最后reduce程序接收到的输入是<key1, list<value1>>的格式,这是按照key进行分组的结果.


reduce负责处理<key1, list<value1>>, 并输出最终的结果<key2, value2>到输出目录.


整个过程的数据类型变化情况


(input)<k0, v0> -> map -> <k1, v1> -> shuffle & sort -> <k1, list<v1>> -> reduce -> <k2, v2>(output)

map和reduce的个数

map task的个数 = input文件的所有的块的个数.


reduce task的个数可以设置:Job.setNumReduceTasks();设置的大, 会增加框架开销, 但是可以增加负载均衡 并降低故障成本(每一个reduce负责的内容少了). 设置的小则会有相反的结论.


 分区和reduce个数

group


 

MapReduce的细节


浅绿色背景是我们要做的,其他是框架做的.


Map


  • map 是我们定义的map函数, 负责从我们指定的输入中解析出作为中间结果的<Key1, Value1>

  • sort 负责对map的结果进行排序

  • partition 负责对上一步的结果数据进行分区.不同的分区会发到不同的Reduce task.

  • combine 负责本地聚合数据,这样可以减少发到Reduce task的数据量. 由我们自己定义聚合函数,这一步不是必须的.

Reduce


  • shuffle 通过HTTP接收分区数据

  • sort 对分区数据排序, 分组(考虑到不同Map发来的分区,可能有相同的key)

  • reduce 产生最终结果<Key2, Value2>

结合WordCount v1.0看流程

这里结合WordCount v1.0运行过程来对工作流程中每一步的工作有个形象的了解.



demo处理过程


WordCount负责统计输入文件中每个单词的出现次数.


input有2个文件, 每个文件占据一个数据块(每个文件都那么小), 所以会有2个map task分别处理一个数据块.


map的结果是以此记录哪个单词出现了一次, 并没有进行排序和聚合处理.


map到combine之间还有一段, 就是框架对数据进行了排序, combine接收到的已经是排序的结果.


combine负责在本地聚合, 它主要可以减少数据从map到reduce的传输量. 可以看到combine的输出已经是排好序且做了聚合处理.


reduce负责对接收到的来自2个map的数据块进行再分组, 排序, 聚合. 并最终输出结果.



 End 

MapReduce工作流程 1、Mapper的map()方法传来的<k,v>数据会先进入环形缓冲区kvbuffer(内存中首尾相连的数据结构,环形缓冲区由数据区和索引区组成),当kvbuffer中的数据达到80%,就会发生溢写。 2、溢写前,kvbuffer会对缓冲区内的数据进行快排,先按分区编号排序,再按map的key排序。(排序只会改变索引区索引的顺序,不会改变数据区的数据) 3、溢写多次,就会产生多个磁盘文件file.out,和索引文件file.out.index。 4、多个溢写文件会合并成一个文件(通过归并排序). 阅读详情

相关推荐

MapReduce入门(一)—— MapReduce概述 + WordCount案例实操

MapReduce入门(一)—— MapReduce概述 MapReduce知识点总览图 MapReduce入门(一)—— MapReduce 概述 1.1 MapReduce 定义 MapReduce 是一个分布式运算程序的编程框架,是用户开发“基于 Hadoop 的数据分析应用”的核心框架。 MapReduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个 Hadoop 集群上。 1.2 MapReduce 优缺点 1.2.1 优点 1

小哨的博客 2万+

MapReduce 整体的工作流程和原理介绍

一、MR 的整体工作流程 MapTask 阶段 Shuffle 阶段 ReduceTask 阶段 二、MapTask 阶段 1. 工作机制 Read 阶段:客户端根据待处理的数据进行接片,然后向 Yarn 提交作业信息申请 对应数量的 MapTask;MapTask 启动后通过 InputFormat 获得的 RecordReader,从输入 InputSplit 中解析出一个个的 key/value 读取到 Mapper 程序。 Map 阶段:将解析出的 key/value 交给用户编写的 ma

weixin_44480009的博客 3927

hadoopMapReduce框架原理(全网最详细最通俗易懂)

为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。缓冲区默认是100MB,当数据输入进来缓冲区,会先放在缓冲区里面,然后输入完在从缓冲区开始写到临时目录,如果数据不断输入到缓冲区,而且如果超出了80%的缓冲区内存,就不会等数据输入完,就立马溢写到临时目录,所以可能会产生多个溢写文件(不过每个溢写的文件都会有分区排序的操作)。)合并:就是combiner,也就是预合并,和reduce一样的功能,先就是归并,在合并,然后传给Reduce,这样reduce就接受的就是合并好的,所以就减轻的压力。

互联网知识分享 185

图文详解 MapReduce 工作流程

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 正文 MapReduce 编程模型 MapReduce 编程模型开发简单且功能强大,专门为并行处理大规模数据量而设计,接下来,通过一张图来描述 MapReduce 的工作过程,如图所示。 关于 MapReduce 编程模型的更多细节请参考我的这篇博客——MapReduce 编程模型到底是怎样的? 整体流程

Shockang的博客 11万+

STM32异常与中断过程详解

1. 异常与中断概念引入 异常主要是指来自CPU内部的意外事件,比如执行了未定义指令、算术溢出、除零运算等发生在CPU内部的意外事件,这些异常的发生,会引起CPU运行相应的异常处理程序;中断一般来自硬件(如片上外设、外部I/O输入等)发生的事件,当这些硬件产生中断信号时,CPU会暂停当前运行的程序,转而去处理相关硬件的中断服务程序。但无论是异常还是中断,都会引起程序执行偏离正常的流程,转而去执行异常/中断的处理函数。 下面对异常和中断的介绍,如果中断信号的产生原因来自CPU内部,则称之为异常;如果中断信号来

luobeihai的博客 1万+

别再一个个BAPI调了!用CVI_EI_INBOUND_MAIN一次性搞定SAP BP主数据(附完整ABAP代码)

本文详细介绍了如何使用SAP标准函数CVI_EI_INBOUND_MAIN高效维护业务伙伴(BP)主数据,替代传统的多BAPI调用方式。通过完整ABAP代码示例,展示了如何一站式处理供应商、客户、公司代码等所有视图的创建与更新,提升数据一致性和开发效率。

weixin_29204205的博客 291

Hadoop3:MapReduce工作流程图解

Hadoop

Brave_heart4pzj的博客 1086

从零构建XVC协议栈:FPGA+W5300的跨界调试架构实战

本文详细介绍了如何从零构建XVC协议栈,通过FPGA与W5300以太网控制器的创新组合实现跨界调试架构。重点解析了JTAG时序逆向、TCP/IP协议栈集成与XVC协议实现,提供了硬件设计优化和性能加速技术,为嵌入式开发者和FPGA工程师提供实用的远程调试解决方案。

raspberrypi5的博客 247

Hadoop:MapReduce工作流程最详细解释(图解)小白都能看懂的流程

MapReduce工作流程最详细解释 MapReduce是我们再进行离线大数据处理的时候经常要使用的计算模型, 后续还会有更新请耐心等待

9475

用C++从零复刻Wordle:手把手教你实现命令行猜词游戏(含完整源码解析)

本文详细介绍了如何使用C++从零开始实现一个命令行版本的Wordle猜词游戏,包含完整的源码解析和核心模块设计。通过游戏逻辑控制器、单词库管理器等模块的构建,开发者可以学习C++实战技巧和性能优化方法,适合提升编程能力和游戏开发兴趣。

weixin_26763955的博客 334

从X86到ARM:全面解析服务器CPU架构的演变与未来趋势

本文深入解析了服务器CPU架构从X86到ARM的演变历程与未来趋势。文章从CISC与RISC两种设计哲学切入,分析了X86凭借生态建立的帝国地位及其面临的功耗挑战,并重点阐述了ARM架构凭借其卓越的能效比优势,正从移动端向数据中心市场发起冲击。未来,异构计算、软硬协同与专用芯片将成为服务器CPU发展的核心方向。

gold的博客 1127

MapReduce 流程介绍

MapReduce 流程介绍1.图解 1.图解 一个完整的过程,只是分为了两部分而已 ## 1.1 图解1 ## 1.2 图解2

叁木大数据 1085

【Halcon-1D测量】measure_pairs 函数功能(用于提取垂直于矩形/环形弧主轴的直边对)

HALCON算子measure_pairs是1D测量模块的基础工具,专用于提取垂直于矩形/环形弧主轴的直边对。该算子通过振幅阈值和灰度过渡规则(如positive/negative)进行边对分组,支持_strongest后缀选择最强边缘避免误配对。输出包含边缘坐标、振幅及内外间距(IntraDistance/InterDistance)。关键限制包括仅适用于直边、Sigma需≤0.5×测量长度,且忽略图像域。相比模糊版本算子,它更适用于边缘清晰的简单场景(如电子元件间距测量)。典型应用需配合gen_meas

weixin_45590420的博客 303

MapReduce多节点工作机制图

刚才发现一张讲解mapreduce整个工作机制图,跟大家分享一下,大家发表一下建议,对mapreduce工作机制有何看法,或者那里有不清楚。mapreduce每一个工作阶段,对我们在工作中处理某种业务都是有很大帮助的。图中1:表示待处理数据,比如日志,比如单词计数 图中2:表示map阶段,对他们split,然后送到不同分区 图中3:表示reduce阶段,对这些数据整合处理。 图中4:表示二次map...

999

【电机应用控制】——步进电机控制原理(四相五线/两相四线/细分驱动)&驱动器&梯形/S形加减速算法&直线/圆弧插补

步进电机是一种把电脉冲信号转换为角位移(左)或线位移(右)的电动机。两相通常1.8°,三相通常1.2°、无相通常0.72°,角位移=脉冲个数X步距角。在非超载且不超频的情况下,电机的旋转位置只取决于脉冲个数,转速只取决脉冲信号的频率。所以只需要统计脉冲个数和频率,不再需要编码器测速和位置,具有优秀的开环能力,当然也可接编码器反馈速度和位置数据,实现更加精准的闭环控制。永磁式动态性能好,输出力矩大,但步距角大通常7.5°;反应式(磁阻式)结构简单成本低,步距角小一般1.2°,但振动噪音大动态性能差;

weixin_51658186的博客 5万+

pandas教程:2012 Federal Election Commission Database 2012联邦选举委员会数据库

里面包含了支持者的名字,职业和雇主,地址,赞助金额。我们可以已经能想到如何切割、整理数据,来提取赞助者的统计数据,或提取宣传活动的模式,这里我们展示一些不同的分析方法。可以看到有些职业是同一种工作类型,指代的是同一个东西。这两个连续操作是分别独立执行的,一个结束后,另一个才开始。上,这里我是把数据集压缩成了ZIP格式,解压后能正常导入)。我觉得也有必要好好了解一下,这个网站做了很好的讲解,),所以我们最好添加这样的信息。这样的情况,即把两个索引操作连在一起。,发现映射关系被正常执行了,所以这里的。

Cachel Wood的博客 349

MapReduce经典4幅示意图(转载)

MapReduce经典4幅示意图 第一幅示意图:数据流向图 数据流首先进行了分片(与HDFS的分块大小一致),然后每个分片会分配给一个map进行处理,之后针对reduce的数量产生对应的输出分片,这里原先的分片顺序会打乱,类似于洗牌,之后分别交给reduce处理后输出结果。 第二幅示意图:word count过程图 将input的文件拆分成splits,由于测试用的文件较小,所以每个文件作为一个split,并将文件按行分割。这一步由mapreduce框架自动完成。 将分割好的文件交给用户定义的map方法进行

Solomwn的博客 1198

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

一文彻底搞懂 Hadoop:分布式存储与计算的基石

Hadoop 常被称为大数据时代的“操作系统”——掌握其原理与应用,是高效处理海量数据的关键。本文将系统解析 Hadoop 的核心组件、工作机制,并结合实战代码,揭示其在分布式系统中的架构价值与工程实践意义。

2402_89768441的博客 1073

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

hadoop相关原理图

hadoop的HA 图解 失败迁移 当active状态的NameNode由于不可预知的原因突然挂掉时,ZK收不到心跳反馈,超过配置的最大等待时间后,将原来standby状态的NameNode置为Active状态,这时由新的Active的NameNode来想JurnalNode中写入日志文件,并响应客户端的请求 hadoop的联盟(Federation) 图解 负载均衡 每个NameNode...

s127838498的专栏 228

图解mapreduce原理和执行过程

本文旨在对接触了mapreduce之后,但是对mapreduce的工作流程仍不是很清楚的人员,当然包括博主自己,希望与大家一起学习。

挑灯看剑的专栏 1万+

MapReduce框架原理

最后,生成一个全局排序的文件。对于Map Task,它会将处理的结果暂时放到一个缓冲区中,当缓冲区使用率达到一定阈值后,再对缓冲区中的数据进行一次排序,并将这些有序数据写到磁盘上,而当数据处理完毕后,它会对磁盘上所有文件进行一次合并,以将这些文件合并成一个大的有序文件。1)默认情况下TextInputformat对任务的切片机制是按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个maptask,这样如果有大量小文件,就会产生大量的maptask,处理效率极其低下。最简单的方法是使用一个分区。

qq_15304885的博客 1618

MapReduce过程图解

1. 一个mr程序启动的时候,最先启动的是MRAppMaster,MRAppMaster启动后根据本次job的描述信息,计算出需要的maptask实例数量,然后向集群申请机器启动相应数量的maptask进程2.maptask进程启动之后,根据给定的数据切片范围进行数据处理,主体流程为:a) 利用客户指定的inputformat来获取RecordReader读取数据,形成输入KV对b) 将输入KV对...

liyifan687的博客 759

mapreduce工作流程(图示)

qq_44698610的博客 296

mapreduce执行过程流程图_Hadoop学习之Mapreduce执行过程详解

一、MapReduce执行过程MapReduce运行时,首先通过Map读取HDFS中的数据,然后经过拆分,将每个文件中的每行数据分拆成键值对,最后输出作为Reduce的输入,大体执行流程如下图所示:整个流程图具体来说:每个Mapper任务是一个java进程,它会读取HDFS中的文件,解析成很多的键值对,经过我们覆盖的map方法处理后,转换为很多的键值对再输出,整个Mapper任务的处理过程又可以分...

weixin_35349247的博客 1271

MapReduce简述、工作流程

MapReduce简述、工作流程 MR编程模型之执行步骤:   1、准备map处理的输入数据   2、mapper处理   3、Shuffle   4、Reduce处理   5、结果输出 (input)<k1,v1> -> map -><k2,v2> -> combine -> <k2,v2> ->reduce -> <k3,v3>(output) 处理流程:    流程:   ...

周红伟讲AI 5427
上一篇: 图解服务化架构演进
下一篇: 30分钟掌握ES6核心内容
! 不再维护
博客等级 码龄11年 63粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值