一、Mapreduce概述

  • Hadoop MapReduce 是一个分布式计算框架,用于编写批处理应用程序。编写好的程序可以提交到Hadoop集群上用于并行处理大规模的数据集。
  • MapReduce 作业通过将输入的数据集拆分为独立的块,这些块由Map以并行的方式处理。每个作业都包含map和reduce两个阶段。

二、工作流程概述

大数据处理包括:分布式存储和分布式计算。

MapReduce的核心思想可以用**"分而治之"**来描述,即把一个大的数据集拆分成多个小数据块在多台机器上并行处理,也就是说,一个大的MapReduce作业的处理流程如下:

  • 首先,会被分成许多个Map任务在多台机器上并行执行。每个Map任务通常运行在数据存储的节点上,这样,计算和数据就可以放在一起运行,不需要额外的数据传输开销。当Map任务结束后,会生成以<key,value>形式表示的许多中间的结果。
  • 然后,这些中间结果会被分发到多个Reduce任务在多台机器上并行执行具有相同key<key,value>会被发送到同一个reduce任务那里,reduce任务会对中间结果进行汇总计算得到最后结果,并输出到分布式文件系统中。

MapReduce算法的执行过程:

  • MapReduce框架使用InputFormat模块做Map前的预处理。作用:验证输入的格式是否符合输入定义,如果符合,将输入文件切分为逻辑上的多个InputSplit,InputSplit是MapReduce对文件进行处理和运算的输入单位,只是一个逻辑概念,每个InputSplit并没有对文件进行实际切割,知识记录了要处理的数据的位置和长度。

  • 因为InputSplit是逻辑切分,所以,还需要通过RecordReader(RR)并根据InputSplit中的信息来处理InputSplit中的具体记录,加载数据并转换为适合Map任务读取的键值对,输入给Map任务。

  • Map任务会根据用户自定义的映射规则,输出一系列的<key,value>作为中间结果。

  • 为了让Reduce可以并行处理Map的结果,需要对Map的输出进行一定的分区,排序(Sort)、合并(Combine)和归并等操作,得到<key,value-list>形式的中间结果,再交给对应的Reduce程序进行处理,这个过程称为shuffle

  • Reduce以一系列<key,value-list>中间结果作为输入,执行用户定义的逻辑,输出结果给OutputFormat模块。

  • OutputFormat模块会验证输出目录是否已经存在,以及输出结果类型是否符合配置文件中的配置类型,如果都满足,就输出Reduce的结果到分布式文件系统。

提示1:不同的Map任务之间不会进行通信,不同的reduce任务之间也不会发生任何信息交换;用户不能显示地从一台机器向另一台机器发送消息,所有的数据交换都是通过mapreduce框架自身去实现的。 在MapReduce的整个执行过程中,Map任务的输入文件,reduce任务的处理结果都是保存在分布式文件系统中的,而Map任务处理得到的中间结果则保存在本地存储(如磁盘)中。

提示2:在reduce端的shuffle过程。Reduce任务从Map端的不同Map机器领回属于自己需要处理的那部分数据,然后,对数据进行归并(Merge)后交给Reduce处理。

Map端的shuffle过程:

shuffle过程是MapReduce整个工作流程的核心环节,理解shuffle过程的基本原理,对于理解MapReduce流程至关重要。

所谓shuffle,是针对Map输出结果进行分区、排序和合并等处理,并交给reduce的过程。因此,shuffle过程分为Map端的操作和Reduce端的操作。

  1. Map端的shuffle过程。Map的输出结果首先被写入缓存,当缓存满时,就启动溢写操作(分区、排序、合并),把缓存中的数据写入磁盘文件,并清空缓存,当启动溢写操作时,首先需要把缓存中的数据进行分区,然后对每个分区的数据进行排序(sort)和合并(Combine),之后写入磁盘文件。 每次溢写操作会生成要给新的磁盘文件,随着Map任务的执行,磁盘中就会生成多个溢写文件。在Map任务全部结束之<前[todo],这些溢写文件会被归并(merge)成一个大的磁盘文件,然后,通知相应的reduce任务来领取属于自己需要处理的数据。
  2. reduce端的shuffle过程。Reduce任务从Map端的不同Map机器领回属于自己需要处理的那部分数据,然后,对数据进行归并(Merge)后交给Reduce处理。

map端的shuffle步骤:

  1. 输入数据和执行Map任务 k1,v1 -> list(k2,v2)
  2. Map任务的输入数据一般保存在分布式文件系统(如GFS或HDFS)的文件块中,这些文件块的格式时任意的,可以是文档,也可以是二进制格式的。Map任务接受<key,value>作为输入后,按一定的映射规则转换成一批<key,value>进行输出。

  3. 写入缓存:每个Map任务都会被分配一个缓存,Map的输出结果不是立即写入磁盘,而是首先写入缓存。在缓存中积累一定数量的map输出结果以后,在一次性批量写入磁盘,这样可以大大减少对磁盘I/O的影响。
  4. 因为,磁盘包含机械部件,它事实通过磁头移动和盘片的转动来寻址定位数据的,每次寻址的开销很大,如果每个Map输出结果都直接写入磁盘,回引入很多寻址开销,而一次性批量写入,就只需要一次寻址,连续写入,大大降低了开销。需要注意的是,在写入缓存之前,keyvalue值都会被序列化成字节数组。

  5. 溢写(分区、排序和合并):提供给MapReduce的缓存的容量是有限的,默认大小是100MB. 随着Map任务的执行,缓存中Map结果的数量不断增加,很快就会占满整个缓存,这时,就必须启动溢写(spill)操作,把缓存中的内容一次性写入磁盘,并清空缓存。

Mapreduce编程模型基础相关推荐

  1. mapreduce 编程模型

    MapReduce是在总结大量应用的共同特点的基础上抽象出来的分布式计算框架,它适用的应用场景往往具有一个共同的特点:任务可被分解成相互独立的子问题.基于该特点,MapReduce编程模型给出了其分布 ...

  2. [转]Hadoop集群_WordCount运行详解--MapReduce编程模型

    Hadoop集群_WordCount运行详解--MapReduce编程模型 下面这篇文章写得非常好,有利于初学mapreduce的入门 http://www.nosqldb.cn/1369099810 ...

  3. Hadoop MapReduce编程模型

    MapReduce编程模型 目录 MapReduce编程模型 1.MapReduce编程模型简介 2.什么是MapReduce 3.MapReduce的优缺点 4.MapReduce程序设计方法 5. ...

  4. MapReduce编程模型

    1.MapReduce简介 MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上. 一个完整的 ...

  5. 大数据快速入门(05):MapReduce 编程模型赏析

    一.Hadoop 诞生的传奇故事 (上图是 Doug Cutting,hadoop 之父) 1985年,Cutting 毕业于美国斯坦福大学. Cutting 的第一份工作是在 Xerox 做实习生, ...

  6. 一个wordcount程序轻松玩转MapReduce编程模型

    可以毫不夸张的说,几乎开发中绝大部分的MR程序都是基于wordcount编程模型而来,或者说用wordcount变化而来(改变的主要是业务方面的逻辑).所以,熟练掌握wordcount编程模型,是掌握 ...

  7. Mapreduce编程模型(一)

    1.1Mapreduce模型简介 Mapreduce是一种可用于数据处理的编程模型,Hadoop上可以运行各种语言版本的Mapreduce程序.Mapreduce程序是并行运行的,采用了分治的思想.编 ...

  8. Hadoop那些事儿(四)---MapReduce编程实例(基础)

    前言 上一篇文章,以WordCount为例讲了一下MapReduce的代码结构及运行机制,这篇文章将通过几个简单的例子进一步认识MapReduce. 1.数据检索 问题描述 假设有很多条数据,我们从中 ...

  9. MapReduce编程模型详解

    1.1 MapReduce是什么 Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的 ...

最新文章

  1. 通过 DLPack 构建跨框架深度学习编译器
  2. 福利一波,赠票:2018杭州云栖大会 - 单日票(9月22日)
  3. C语言实验大纲2010答案,C语言试验大纲(2010年修订).doc
  4. commons-lang3:ArrayUtils
  5. 开发人员也要懂点的测试知识
  6. 在腾讯做嵌入式是怎么样的
  7. Java 8 Stream Api 中的 peek、map、foreach区别
  8. 【算法】算法 动态规划 背包问题
  9. [2017-10-26]Abp系列——DTO入参验证使用方法及经验分享
  10. 解决Nginx出现403 forbidden
  11. BestCoder #88(1001 1002)
  12. HTML-特效代码大全
  13. PS2022安装教程(附个人详细安装教程)
  14. 我用AI大模型帮我写公众号赚钱!
  15. 影创科技助力云南首例MR混合现实肝脏手术成功实施
  16. 奥村マヨ - 見えない翼
  17. 自学就能轻松学会搭建网站的步骤教程
  18. 基于Arduino IDE开发的LD3320语音识别模块
  19. oracle 提示ORA-00942: 表或视图不存在,但是plsql查询有数据,解决办法
  20. SAXReader解析乱码问题

热门文章

  1. Some code changes cannot be hot swapped into a running virtual machine,
  2. 教你怎么用SOLIDWORKS选出好西瓜!
  3. 2019年写一个Cloud Studio插件吧
  4. C# ex.StackTrace 异常定位行号不显示的问题
  5. python操作hbase如何快速录入多条数据_python 数据库插入多行
  6. [论文理解](未完成)形变卷积网络Warped Convolutions: Efficient Invariance to Spatial Transformations
  7. python入门——猜数字游戏
  8. CMS模块内容推送到公众号
  9. Compose 动画艺术探索之可见性动画
  10. 预科知识整理【计算机、硬件、软件、快捷键、Dos命令】