MapReduce 工作原理

news2024/12/25 9:29:58

文章目录

  • MapReduce 工作原理
    • 一、MapReduce工作过程
    • 二、MapTask工作原理
    • 三、Reduce Task工作原理
    • 四、Shuffle工作原理
    • 五、MapReduce编程组件
      • 1、inputFormat组件
      • 2、Mapper组件
      • 3、Reducer组件
      • 4、Partitioner组件
      • 5、Combiner组件
      • 6、OutputFormat组件
    • 六、MapReduce运行模式
      • 1、本地运行模式
      • 2、集群运行模式
    • 七、MapReduce性能优化策略
      • 1、数据输入
      • 2、Map阶段
      • 3、Reduce阶段
      • 4、Shuffle阶段
      • 5、其它调优属性

MapReduce 工作原理

一、MapReduce工作过程

分片、格式化数据源⟹ Longrightarrow⟹执行MapTask⟹ Longrightarrow⟹执行Shuffle过程⟹ Longrightarrow⟹执行ReduceTask过程⟹Longrightarrow⟹写入文件
在这里插入图片描述

二、MapTask工作原理

MapTask作为MapReduce工作流程前半部分,它主要经历5个阶段,分别是Read阶段、Map阶段、Collect阶段、Spill阶段和Combiner阶段。
在这里插入图片描述

三、Reduce Task工作原理

ReduceTask的工作过程主要经历了5个阶段,分别是Copy阶段、Merge阶段、Sort阶段、Reduce阶段和Write阶段。
在这里插入图片描述

四、Shuffle工作原理

Shuffle是MapReduce的核心,它用来确保每个reducer的输入都是按键排序的。它的性能高低直接决定了整个MapReduce程序的性能高低,map和reduce阶段都涉及到了shuffle机制。
在这里插入图片描述

五、MapReduce编程组件

1、inputFormat组件

主要用于描述输入数据的格式,它提供两个功能,分别是数据切分和为Mapper提供输入数据。定义如何读取和分割输入数据。InputFormat是一个类,定义了InputSplit用于把输入数据拆分到任务,并提供RecordReader对象工厂用于读取文件。InputFormat由作业的驱动器直接调用,基于InputSplit来确定map任务执行的数量和位置。
在这里插入图片描述

2、Mapper组件

Hadoop提供的Mapper类是实现Map任务的一个抽象基类,该基类提供了一个map()方法。mapper执行MapReduce程序第一阶段的用户自定义工作。从实现角度来看,mapper实现以一系列键值对(k1,v1)的形式接收输入数据,这些数据会用于单个map执行。map通常将输入对转换成输出对(k2,v2),后者会被用作洗牌和排序的输入。对于构成总的作业输入的每个map任务而言,mapper的新实例均运行在独立的JVM实例中。这是特意设计,即不为单独的mapper提供以任何方式与其它mapper进行通信的机制。这使得每个map任务的可靠性仅取决于本地机器的可靠性。
在这里插入图片描述

3、Reducer组件

Map过程输出的键值对,将由Reducer组件进行合并处理,最终的某种形式的结果输出。reducer负责执行第二阶段作业特定工作的用户提供代码。对于分配给特定reducer的每一个键,reducer的reduce()方法仅被调用一次。该方法接收一个键,以及一个与键关联的所有值的迭代器。迭代器以未定义的顺序返回与键相关的值。典型地,reducer将输入的键值对转换成输出对(k3,v3)。
在这里插入图片描述

4、Partitioner组件

Partitioner组件可以让Map对Key进行分区,从而可以根据不同的key分发到不同的Reduce中去处理,其目的就是将key均匀分布在ReduceTask上。由每个单独mapper产生的中间键空间(k2,v2)的子集会被分配给每个reducer。这些子集(或分区)是reduce任务的输入。每个map任务可能会向任何分区派发键值对。相同键的所有值总要在一起进行reduce,无论它们来自哪个mapper。其结果是,所有map节点必须达成一致,确定由哪个reducer来处理不同的中间数据片段。Partitioner类确定了一个给定的键值对要去向哪一个reducer。默认的Partitioner为每个键计算散列值,并基于这个结果来分配分区
默认的分区是HashPartitioner
在这里插入图片描述

5、Combiner组件

Combiner组件的作用就是对Map阶段的输出的重复数据先做一次合并计算,然后把新的(key,value)作为Reduce阶段的输入。一个可选的处理步骤,用于优化MapReduce作业执行。如果存在的话,组合器在mapper之后、reducer之前运行。一个Combiner类的实例在每个map任务和部分reduce任务中运行。组合器接收mapper实例派发的所有数据作为输入,并尝试着组合有着相同键的值,从而缩小键空间,同时减少了需要排序的键(不必要的数据)的数量。接下来,组合器的输出会被排序并发送到reducer。
在这里插入图片描述

6、OutputFormat组件

OutputFormat是一个用于描述MapReduce程序输出格式和规范的抽象类。OutputFormat管理作业输出(作业输出由reducer生成,如果reducer不存在,则由mapper生成)的写方式。OutputFormat的职责是定义输出数据的位置以及用于保存结果数据的RecordWriter
在这里插入图片描述

六、MapReduce运行模式

1、本地运行模式

在当前的开发环境模拟MapReduce执行环境,处理的数据及输出结果在本地操作系统

2、集群运行模式

把MapReduce程序打成一个Jar包,提交至Yarn集群上去运行任务。由于Yarn集群负责资源管理和任务调度,程序会被框架分发到集群中的节点上并发的执行,因此处理的数据和输出结果都在HDFS文件系统中。

七、MapReduce性能优化策略

使用Hadoop进行大数据运算,当数据量极其大时,那么对MapReduce性能的调优重要性不言而喻,尤其是Shuffle过程中的参数配置对作业的总执行时间影响特别大,我们可以从五个方面对MapReduce程序进行性能调优,分别是数据输入、Map阶段、Reduce阶段、Shuffle阶段和其他调优属性方面。

1、数据输入

在执行MapReduce任务前,将小文件进行合并,大量小文件会产生大量的map任务,增大map任务装载次数,而任务装载较耗时,从而导致MapReduce运行速度较慢。因此采用CombineTextInputFormat来作为输入,解决输入端大量的小文件场景。

2、Map阶段

减少溢写(spill)次数
减少合并(merge)次数
在map之后,不影响业务逻辑前提下,先进行combine处理,减少 I/O

3、Reduce阶段

合理设置map和reduce数
设置map、reduce共存
规避使用reduce
合理设置reduce端的buffer

4、Shuffle阶段

Shuffle阶段的调优就是给Shuffle过程尽量多地提供内存空间,以防止出现内存溢出现象,可以由参数mapred.child.java.opts来设置,任务节点上的内存大小应尽量大。

5、其它调优属性

MapReduce还有一些基本的资源属性的配置,这些配置的相关参数都位于mapred-default.xml文件中,我们可以合理配置这些属性提高MapReduce性能,例如合理设置MapTask、ReduceTask等参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于个人网站的搭建日志(1)静态网页

注:这篇文章不是教程,仅仅是个人踩过的一些坑的整理,建议大家去和前辈们多多交流,祝早日进步 (1)第一步,关于服务器: 我这里使用的是阿里云的云服务器(0元一个月。。。…

视觉合集4

这里总结一些论文,包括多标签分类、姿态估计、目标检测、HOI、小样本学习等研究方向。 01 面向具有标注噪声的人脸表情识别 Attack can Benefit: An Adversarial Approach to Recognizing Facial Expressions under Noisy Annotations 大规模人脸表情数据集通常表现出极端的…

基于VBA实现电缆结构自动出图(一)——自动出圆形

大家敢相信吗,原来VBA竟然可以实现电缆结构自动出图,换句话说,只要输入数据,VBA会自动将电缆的结构画出来,同时还可以渲染,结果竟然不输画图软件,真真让我刮目相看。这里我就不过多介绍VBA了&am…

类的六个默认成员函数

1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情 况下,都会自动生成下面6个默认成员函数。 2.构造函数 构造函数是一个特殊的成员函数,名字与…

STM32F4 | 跑马灯实验

文章目录一、 STM32F4 IO 口简介二、硬件设计三、软件设计1.位带操作(F7除外)四、实验现象五、STM32CubeMX 配置 IO 口输入在本章中,我们将通过代码控制 ALIENTEK 阿波罗 STM32 开发板上的两个 LED 灯 DS0 和 DS1 交替闪烁,实…

【salesforce Admin必备】-想到啥写点啥

【salesforce Admin必备】-想到啥写点啥 文章目录【salesforce Admin必备】-想到啥写点啥前言一,货币相关1.带汇率的多种货币-Activate multiple currencies with exchange rates1.1 启用多币种2.Update the Exchange Rate with ACM2.1启用高级货币管理(…

数据结构【树和二叉树的相关知识和题目】

文章目录引言:一、树和二叉树的相关知识(一、)什么是树1.树(1.)日常生活中的树(2.)树的基本概念(非线性结构)(3.)代码人眼中的树:&…

ORB-SLAM2 --- Tracking::UpdateLocalKeyFrames函数

目录 1.函数作用 2. 函数步骤 3.code 4.函数解析 4.1 记录共视 4.2 更新局部关键帧(mvpLocalKeyFrames) 4.3 更新当前帧的参考关键帧,与自己共视程度最高的关键帧作为参考关键帧 1.函数作用 跟踪局部地图函数里,更新局部…

【在SpringBoot项目中删除相册数据--Service层】

由于AlbumMapper.java中已经实现了“根据id删除数据表中的相册数据”,所以,可以直接从Service开始开发此功能。 先在IAlbumService中添加抽象方法: /** * 删除相册 * param id 尝试删除的相册的id */ void delete(Long id); 然后&#xf…

[附源码]Python计算机毕业设计SSM基于web的烟草售卖系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Android Studio Gradle 无限 Build「假死」

Android Studio Gradle 无限 Build「假死」 解决方案 工程配置 Gradle 的 gradle.properties 文件中添加如下代码: org.gradle.daemontrue org.gradle.paralleltrue然后重新 Sync 工程,漫长等待依赖下载完成后,重新 Build 项目即可 补充 …

【Unity 3D 从入门到实战】Unity 3D 组件总结

目录 一,前言 二,常用组件 1,Transform 组件 2,Mesh Filter 组件 3,Box Collider 组件 4,Rigidbody 组件 5,脚本组件 三,总结 一,前言 组件是 Unity 3D 中的重要…

Attention Is All You Need

摘要 The dominant sequence transduction models 显性序列转换模型。complex recurrent 复杂的递归。convolutional neural networks 卷积神经网络。an encoder and a decoder 编码器和解码器。The best performing models性能最佳的模型the encoder →\rightarrow→ an atte…

D. Lucky Chains

传送门 题意:给你两个数x,y让你求满足xk,yk并且GCD(xk,yk)!1的最小值。 思路:要求满足xk,yk并且GCD(xk,yk)!1的最小值,那么就相等于存在(xk)%d(yk)%d 变化一下就等于(x-y)%d0,那么就是找x-y的约数,然后这个约数可能是…

疫情散去想看电影,用css动画模拟一个阿凡达2完美开场

在历经了艰苦卓绝的3年抗疫后,疫情终于还是来了,很多小伙伴变成了小洋人酸奶,我相信过不了多少天,疫情终将散去,那个时候就可以和家人走进电影院啦。 今天用css布局一个阿凡达2的影院场景,提前过一过瘾。 目…

ARM 异常返回地址

armv7-a armv8-a linux5.15 Preferred exception return address armv7 exception return address correction armv8-32 exception return address correction armv8-64 没有查到link value offset表 arm32 data abort exception为例 周期1周期2周期3周期4周期5指令1pc-8取指…

[附源码]Node.js计算机毕业设计电影推荐系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

【LSTM预测】基于鲸鱼算法优化双向长短时记忆BiLSTM(多输入单输出)航空发动机寿命预测含Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

CloudCompare算法库(CCCorelib)编译与使用

文章目录一、简介二、编译过程三、举个栗子优秀的算法库,值得所有点云爱好者去使用和研究*~*。 一、简介 之前一直没注意到CloudCompare的作者(光头大佬)已经将CloudCompare的算法库与其可视化部分进行了分离,今天正好有同学问了这…

以太坊地址Address介绍附代码示例

Address是什么 通常情况下,地址代表一外部账户或合约账户,它们都可以在区块链上接收(目标地址)或发送(源地址)。 更具体地说,它是根据ECDSA算法,从公钥的Keccak-256哈希值的最后20个…