【原创】MapReduce运行原理和过程

一.Map的原理和运行流程

Map的输入数据源是多种多样的,我们使用hdfs作为数据源。文件在hdfs上是以block(块,Hdfs上的存储单元)为单位进行存储的。

1.分片

我们将这一个个block划分成数据分片,即Split(分片,逻辑划分,不包含具体数据,只包含这些数据的位置信息),那么上图中的第一个Split则对应两个个文件块,第二个Split对应一个块。需要注意的是一个Split只会包含一个File的block,不会跨文件。

 2. 数据读取和处理

当我们把数据块分好的时候,MapReduce(以下简称mr)程序将这些分片以key-value的形式读取出来,并且将这些数据交给用户自定义的Map函数处理。

3.

用户处理完这些数据后同样以key-value的形式将这些数据写出来交给mr计算框架。mr框架会对这些数据进行划分,此处用进行表示。不同颜色的partition矩形块表示为不同的partition,同一种颜色的partition最后会分配到同一个reduce节点上进行处理。

Map是如何将这些数据进行划分的?

默认使用Hash算法对key值进行Hash,这样既能保证同一个key值的数据划分到同一个partition中,又能保证不同partition的数据梁是大致相当的。

总结

1.一个map指挥处理一个Split

2.map处理完的数据会分成不同的partition

3.一类partition对应一个reduce

那么一个mr程序中 map的数量是由split的数量决定的,reduce的数量是由partiton的数量决定的。

二.Shuffle

Shuffle,翻译成中文是混洗。mr没有排序是没有灵魂的,shuffle是mr中非常重要的一个过程。他在Map执行完,Reduce执行前发生。

Map阶段的shuffle

数据经过用户自定的map函数处理完成之后,数据会放入内存中的环形缓冲区之内,,他分为两个部分,数据区和索引区。数据区是存放用户真实的数据,索引区存放数据对应的key值,partition和位置信息。当环形缓冲区数据达到一定的比例后,会将数据溢写到一个文件之中,即途中的spill(溢写)过程。

在溢写前,会将数据根据key和partition进行排序,排好序之后会将数据区的数据按照顺序一个个写入文件之中。这样就能保证文件中数据是按照key和parttition进行排序的。最后会将溢写出的一个个小文件合并成一个大的文件,并且保证在每一个partition

中是按照Key值有序的。

总结:

  1.  Collect阶段将数据放进环形缓冲区,缓冲区分为数据区和索引区。
  2. Sort阶段对在同一partition内的索引按照key排序。
  3. Spill阶段跟胡排好序的索引将数据按照顺序写到文件中。
  4. Merge阶段将Spill生成的小文件分批合并排序成一个大文件。

Reduce阶段的shuffle

reduce节点会将数据拷贝到自己的buffer缓存区中,当缓存区中的数据达到一定的比例的时候,同样会发生溢写过程,我们任然要保证每一个溢写的文件是有序的。与此同时,后台会启一个线程,将这些小文件合并成一个大文件,经过一轮又一轮的合并,最后将这些文件合并成一个大的数据集。在这个数据集中,数据是有序的,相同的key值对应的value值是挨在一起的。最后,将这些数据交给reduce程序进行聚合处理。

总结:

  1. 1.      Copy阶段将Map端的数据分批拷贝到Reduce的缓冲区。
  2. 2.      Spill阶段将内存缓存区的数据按顺序写到文件中。
  3. 3.      Merge阶段将溢出的文件合并成一个排序的数据集。

三.Reduce运行过程

在map处理完之后,reduce节点会将各个map节点上属于自己的数据拷贝到内存缓冲区中,最后将数据合并成一个大的数据集,并且按照key值进行聚合,把聚合后的value值作为iterable(迭代器)交给用户使用,这些数据经过用户自定义的reduce函数进行处理之后,同样会以key-value的形式输出出来,默认输出到hdfs上的文件。

四.Combine优化

我们说mr程序最终是要将数据按照key值进行聚合,对value值进行计算,那么我们是不是可以提前对聚合好的value值进行计算?of course,我们将这个过程称为Combine。哪些场景可以进行conbine优化。如下。

Map端:

1. 在数据排序后,溢写到磁盘前,运行combiner。这个时候相同Key值的value值是挨在一起的,可以对这些value值进行一次聚合计算,比如说累加。

2. 溢写出的小文件合并之前,我们也可以执行一次combiner,需要注意的是mr程序默认至少存在三个文件才进行combiner,否则mr会认为这个操作是不值得的。当然这个值可以通过min.num.spills.for.combine设置。

Reduce端:

  1. 和map端一样,在合并溢出文件输出到磁盘之前,运行combiner。

写在最后

送上整个MR过程图。

原文地址:https://www.cnblogs.com/yx-zhang/p/9572221.html

时间: 2024-10-07 16:13:59

【原创】MapReduce运行原理和过程的相关文章

Hadoop伪分布安装详解+MapReduce运行原理+基于MapReduce的KNN算法实现

本篇博客将围绕Hadoop伪分布安装+MapReduce运行原理+基于MapReduce的KNN算法实现这三个方面进行叙述. (一)Hadoop伪分布安装 1.简述Hadoop的安装模式中–伪分布模式与集群模式的区别与联系. Hadoop的安装方式有三种:本地模式,伪分布模式,集群(分布)模式,其中后两种模式为重点,有意义 伪分布:如果Hadoop对应的Java进程都运行在一个物理机器上,称为伪分布 分布:如果Hadoop对应的Java进程运行在多台物理机器上,称为分布.[集群就是有主有从] 伪

MapReduce概述,原理,执行过程

MapReduce概述 MapReduce是一种分布式计算模型,运行时不会在一台机器上运行.hadoop是分布式的,它是运行在很多的TaskTracker之上的. 在我们的TaskTracker上面跑的是Map或者是Reduce Task任务. 通常我们在部署hadoop taskTracker 的时候,我们的TaskTracker同时还是我们的Datanode节点.datanode和tasktracker总是部署在一起的. MapReduce执行流程: 为什么要有多个datanode: 因为我

MapReduce运行原理详解

我们通过提交jar包,进行MapReduce处理,那么整个运行过程分为五个环节: 1.向client端提交MapReduce job. 2.随后yarn的ResourceManager进行资源的分配. 3.由NodeManager进行加载与监控containers. 4.通过applicationMaster与ResourceManager进行资源的申请及状态的交互,由NodeManagers进行MapReduce运行时job的管理. 5.通过hdfs进行job配置文件.jar包的各节点分发.

MapReduce程序的工作过程

还记得2.5年前就搭建好了Hadoop伪分布式集群,安装好Eclipse后运行成功了WordCount.java,然后学习Hadoop的步伐就变得很慢了,相信有很多小伙伴和我一样.自己对MR程序(特指Hadoop 1.x版本)的工作过程一直都不是很清楚,现在重点总结一下,为MR编程打好基础.由于MapReduce是基于HDFS的操作,因此要想深入理解MapReduce(解决的是分布式计算问题),首先得深入理解HDFS(解决的是分布式存储问题). 一. HDFS框架组成 HDFS采用master/

MapReduce:详解Shuffle过程

MapReduce:详解Shuffle过程[转] 博客分类: mapreduce MapreduceITeye数据结构多线程Hadoop Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了解的.我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混.前段时间在做MapReduce job 性能调优的工作,需要深入代码研究MapReduce的运行机制,这才对Shuffle探了个究竟.考虑到之前我在

【转】mapreduce运行机制

转自http://langyu.iteye.com/blog/992916 写的相当好! 谈 mapreduce运行机制,可以从很多不同的角度来描述,比如说从mapreduce运行流程来讲解,也可以从计算模型的逻辑流程来进行讲解,也许有些 深入理解了mapreduce运行机制还会从更好的角度来描述,但是将mapreduce运行机制有些东西是避免不了的,就是一个个参入的实例对象,一个 就是计算模型的逻辑定义阶段,我这里讲解不从什么流程出发,就从这些一个个牵涉的对象,不管是物理实体还是逻辑实体. 首

MapReduce工作原理讲解

有时候我们在用,但是却不知道为什么.就像苹果砸到我们头上,这或许已经是很自然的事情了,但是牛顿却发现了地球的万有引力.ok了,希望通过了解MapReduce,我们能够写出更好的MapReduce例子.第一部分:MapReduce工作原理<ignore_js_op> <ignore_js_op> MapReduce 角色•Client :作业提交发起者.•JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业.•TaskTracker:保持JobTr

【转载】Spark系列之运行原理和架构

参考 http://www.cnblogs.com/shishanyuan/p/4721326.html 1. Spark运行架构 1.1 术语定义 lApplication:Spark Application的概念和Hadoop MapReduce中的类似,指的是用户编写的Spark应用程序,包含了一个Driver 功能的代码和分布在集群中多个节点上运行的Executor代码: lDriver:Spark中的Driver即运行上述Application的main()函数并且创建SparkCon

MapReduce 运行机制

 Hadoop 中的MapReduce是一个使用简单的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错式并行处理TB级别的数据集. 一个MapReduce作业(job)通常会把输入的数据集切分为若干独立的数据块,由Map任务以完成并行的方式处理它们.框架会对map函数的输出先进行排序,然后把结果输入 给Reduce任务.通常作业的输入和输出都会被存储在文件系统中.整个框架负责任务的调度和和监控,以及重新执行已经失败的任务. 通常,MapReduce框架