广告
返回顶部
首页 > 资讯 > 精选 >MapReduce的运行原理
  • 851
分享到

MapReduce的运行原理

2023-06-02 18:06:49 851人浏览 安东尼
摘要

本篇内容介绍了“mapReduce的运行原理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MapReduce是一种编程模型,用于大规模数据集

本篇内容介绍了“mapReduce的运行原理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。MapReduce采用”分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是”任务的分解与结果的汇总”。

MapReduce架构

先来看一下MapReduce1.0的架构图

MapReduce的运行原理

上图中的TaskTracker对应hdfs中的Datanode

在MapReduce1.x中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个hadoop集群中只有一台JobTracker。

流程分析

  1. 在客户端启动任务,客户端向JobTracker请求一个Job ID。

  2. 将运行任务所需要的程序文件复制到HDFS上,包括MapReduce程序打包的jar文件、配置文件和客户端计算所得的输入划分信息。这些文件都存放在JobTracker专门为该任务创建的文件夹中。文件夹名Job ID。

  3. JobTracker接收到任务后,将其放在一个队列里,等待调度器对其进行调度,当作业调度器根据自己的调度算法调度到该任务时,会根据输入划分信息创建N个map任务,并将map任务分配给N个TaskTracker(DataNode)执行。

  4. map任务不是随随便便地分配给某个TaskTracker的,这里有个概念叫:数据本地化(Data-Local)。意思是:将map任务分配给含有该map处理的数据块的TaskTracker上,同时将程序JAR包复制到该TaskTracker上来运行,这叫“运算移动,数据不移动”。而分配reduce任务时并不考虑数据本地化。

  5. TaskTracker每隔一段时间会给JobTracker发送一个Heartbeat(心跳),告诉JobTracker它依然在运行,同时心跳中还携带着很多的信息,比如当前map任务完成的进度等信息。当JobTracker收到作业的最后一个任务完成信息时,便把该作业设置成“成功”。当JobClient查询状态时,它将得知任务已完成,便显示一条消息给用户。

以上是在客户端、JobTracker、TaskTracker的层次来分析MapReduce的工作原理的,下面我们再细致一点,从map任务和reduce任务的层次来分析分析吧。

MapReduce运行流程

Wordcount为例,运行的详细流程图如下

MapReduce的运行原理

split阶段

首先mapreduce会根据要运行的大文件来进行split,每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据位置的数组。输入分片(input split)往往和HDFS的block(块)关系很密切,假如我们设定HDFS的块的大小是64MB,我们运行的大文件是64x10M,mapreduce会分为10个map任务,每个map任务都存在于它所要计算的block(块)的DataNode上。

map阶段

map阶段就是程序员编写的map函数了,因此map函数效率相对好控制,而且一般map操作都是本地化操作也就是在数据存储节点上进行。本例的map函数如下:

publicclassWCMapperextendsMapperLongWritable,Text,Text,IntWritable{@Override  protectedvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsioException,InterruptedException{  Stringstr=value.toString();  String[]strs=StringUtils.split(str,'');for(Strings:strs){  context.write(newText(s),newIntWritable(1));  }  }  }

根据空格切分单词,计数为1,生成key为单词,value为出现1次的map供后续计算。

shuffle阶段

shuffle阶段主要负责将map端生成的数据传递给reduce端,因此shuffle分为在map端的过程和在reduce端的执行过程。

先看map端:

MapReduce的运行原理

  1. map首先进行数据结果数据属于哪个partition的判断,其中一个partition对应一个reduce,一般通过key.hash()%reduce个数来实现。

  2. 把map数据写入到Memory Buffer(内存缓冲区),到达80%阀值,开启溢写进磁盘过程,同时进行key排序,如果有combiner步骤,则会对相同的key做归并处理,最终多个溢写文件合并为一个文件。

reduce端:

MapReduce的运行原理

reduce节点从各个map节点拉取存在磁盘上的数据放到Memory Buffer(内存缓冲区),同理将各个map的数据进行合并并存到磁盘,最终磁盘的数据和缓冲区剩下的20%合并传给reduce阶段。

reduce阶段

reduce对shuffle阶段传来的数据进行最后的整理合并

publicclassWCReducerextendsReducerText,IntWritable,Text,IntWritable{@Override  protectedvoidreduce(TexTKEy,IterableIntWritablevalues,Contextcontext)throwsIOException,InterruptedException{intsum=0;for(IntWritablei:values){  sum+=i.get();  }  context.write(key,newIntWritable(sum));  }  }

MapReduce的优缺点

优点:

  1. 易于编程;

  2. 良好的扩展性;

  3. 高容错性;

适合PB级别以上的大数据分布式离线批处理。

缺点:

  1. 难以实时计算(MapReduce处理的是存储在本地磁盘上的离线数据)

  2. 不能流式计算(MapReduce设计处理的数据源是静态的)

  3. 难以DAG计算MapReduce这些并行计算大都是基于非循环的数据流模型,也就是说,一次计算过程中,不同计算节点之间保持高度并行,这样的数据流模型使得那些需要反复使用一个特定数据集的迭代算法无法高效地运行。

“MapReduce的运行原理”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: MapReduce的运行原理

本文链接: https://www.lsjlt.com/news/230993.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MapReduce的运行原理
    本篇内容介绍了“MapReduce的运行原理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MapReduce是一种编程模型,用于大规模数据集...
    99+
    2023-06-02
  • MapReduce原理深入理解(一)
    1.MapReduce概念 1)MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. 2)MapReduce是分布式运行的,由两个阶段组成:Map和Reduce,Map阶段是一个独立的程...
    99+
    2019-09-24
    MapReduce原理深入理解(一)
  • MapReduce的工作原理是什么
    本篇文章为大家展示了MapReduce的工作原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive...
    99+
    2023-06-03
  • hadoop之MapReduce框架原理是什么
    今天小编给大家分享一下hadoop之MapReduce框架原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。MapRe...
    99+
    2023-07-05
  • java中 Filter的运行原理
    今天就跟大家聊聊有关java中 Filter的运行原理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复...
    99+
    2023-06-14
  • JavaScript引擎的运行原理
    这篇文章主要讲解了“JavaScript引擎的运行原理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript引擎的运行原理”吧!一些名词JS引擎...
    99+
    2022-10-19
  • 前端 JavaScript运行原理
    目录1、什么是JavaScript引擎2、V8引擎3、运行时环境4、运行时的调用栈5、异步任务6、总结1、什么是JavaScript引擎 JavaScript引擎是一个计算机程序,它...
    99+
    2022-11-12
  • Laravel框架运行原理
    下文介绍Laravel框架运行原理,希望对大家有帮助。 使用任何框架,如果理解该框架原理,应用起来会更加得心应手。 一、生命周期 1. 入口文件: Laravel框架所有请求入口统一进入/public/i...
    99+
    2022-10-18
  • 分析mybatis运行原理
    目录一、Mybatis基本认识1.1、动态代理1.2、反射二、Configuration对象作用三、映射器结构四、sqlsession执行流程(源码跟踪)4.1、Executor4....
    99+
    2022-11-12
  • Servlet的运行原理是什么
    这篇文章主要介绍“Servlet的运行原理是什么”,在日常操作中,相信很多人在Servlet的运行原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Servlet的运行原理是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-16
  • laravel运行的原理是什么
    Laravel是一个基于PHP的开源Web应用框架,它的运行原理如下: 路由:Laravel使用路由来确定请求应该由哪个控制器处...
    99+
    2023-10-28
    laravel
  • JavaScript的运行原理是什么
    这篇文章将为大家详细讲解有关JavaScript的运行原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。扫描器源代码首先被分解成 chunk,每个 c...
    99+
    2022-10-19
  • 如何理解SpringBoot核心运行原理和运作原理源码
    如何理解SpringBoot核心运行原理和运作原理源码,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。SpringBoot核心运行原理Spr...
    99+
    2022-10-19
  • SparkSQl简介及运行原理
    目录一:什么是SparkSQL?(一)SparkSQL简介(二)SparkSQL运行原理(三)SparkSQL特点二:DataFrame(一)什么是DataFrame?补充:Spar...
    99+
    2022-11-12
  • wepy运行原理是什么
    这篇文章主要讲解了“wepy运行原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“wepy运行原理是什么”吧!分析源码之前,我们先来回顾一下,wepy 的使用:<!-- ...
    99+
    2023-06-26
  • JavaScript的运行原理怎么掌握
    这篇文章主要讲解了“JavaScript的运行原理怎么掌握”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript的运行原理怎么掌握”吧!了解Ja...
    99+
    2022-10-19
  • Java线程运行的原理详解
    目录栈与栈帧线程的上下文切换总结栈与栈帧 JVM中由堆、栈、方法区所组成,其中栈内存就是分配给线程使用的,每个线程启动后,虚拟机都会为其分配一块栈内存。 每个栈由多个栈帧组成,对应着...
    99+
    2022-11-13
  • JavaScript运行原理的示例分析
    这篇文章主要介绍JavaScript运行原理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JavaScript是一种基于对象的动态、弱类型脚本语言(以下简称JS),是一种解...
    99+
    2022-10-19
  • 带你了解JavaScript的运行原理
    目录浏览器内核JavaScript 引擎V8 引擎了解JavaScript 是如何运行的,以及的它的运行机制,首先,我们要了解浏览器的内核: 浏览器内核 了解过的都知道:不同的浏览器...
    99+
    2022-11-12
  • 详解Gochannel管道的运行原理
    目录前言功能channel结构运行原理源码分析总结前言 Go推荐通过通信来共享内存,而channel就实现了这一理念。那channel是怎么运行的呢? 功能 举个例子看下channe...
    99+
    2023-05-19
    Go channel管道运行原理 Go channel运行原理 Go channel管道 Go channel
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作