一.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/zmanzi/p/10836462.html

MapReduce运行原理和过程相关推荐

  1. MR详细运行原理及过程

    文章目录 MR的原理和运行流程Map的运行过程Reduce处理过程Shuffle过程MR运行过程Yarn && Job MR的原理和运行流程 Map的运行过程 以HDFS上的文件作为默 ...

  2. MapReduce 运行原理(万字长篇 原理 + 案例)

    所有实例都是在本地环境下测试的,无需启动集群! 版本说明: idea:2021.2.2 jdk:1.8 maven:3.8.2(用idea自带的也行) 1. MapReduce 框架原理 运行大致步骤 ...

  3. 计算机原理电梯,上海三菱SP-VF、MP-WF电梯自动运行原理及过程电路综合分析

    电梯各种装置均处于正常,各种发光指示都正确时,电梯处于基站,关门特定运行状态.基站外乘客按下呼梯按钮,该呼梯信号经串行传输线输入到Pl电子板,经CC--CPU微机判断为基站信号,再将该信号传输到微机接 ...

  4. 浅析tornado协程运行原理

    转载:http://xidui.github.io/2016/01/26/%E6%B5%85%E6%9E%90tornado%E5%8D%8F%E7%A8%8B%E8%BF%90%E8%A1%8C%E ...

  5. MySQL唯一索引和普通索引运行原理和使用选择

    普通索引 这是最基本的索引类型,而且它没有唯一性之类的限制. 唯一性索引 这种索引和前面的"普通索引"基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一. 这两种索引 ...

  6. Linux X Window System运行原理和启动过程

    本文主要说明X Window System的基本运行原理,其启动过程,及常见的跨网络运行X Window System. 一) 基本运行原理 X Window System采用C/S结构,但和我们常见 ...

  7. JSP起源、JSP的运行原理、JSP的执行过程

    JSP起源 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变. 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序 ...

  8. 汇编中浮点栈寄存器st0~st7浮点计算fld压栈再计算的过程运行原理

    目录 为什么浮点数不能用普通的数学指令计算 结论 用普通的数学计算add无法实现浮点数加法.必须使用浮点数计算指令fadd来进行浮点数加法计算. fpu的概念 浮点数计算需要先用fld指令压栈用fld ...

  9. JSP运行原理及运行过程

    学习J2EE时,初步了解了JSP,写过一篇小的总结:J2EE-JSP,当时还不是很了解它的运行机制. 学习DRP时,再次接触了JSP,在原来基础上有了更深的了解,了解了它的执行原理 1,JSP的运行原 ...

最新文章

  1. linux环境insight安装与使用
  2. 颤抖吧,打工人!深信服推出员工离职倾向、工作摸鱼监测系统!
  3. 什么是XLNet中的双流自注意力
  4. eclipse 出现 jar包找不到 问题记录
  5. GreenPlum数据库故障恢复测试
  6. 查看计算机或网络资源列表的命令,dos命令net view图文教程,显示网络计算机列表查看共享资源...
  7. And Design:拓荒笔记——Form表单
  8. 调试时碰到的错误syntax error, expect {, actual int, pos 1, json : 3
  9. Turbo C 编译错误信息
  10. _stdcall相关
  11. CSS揭破实用窍门总结
  12. 百度信息流投放效果不稳定,意图词要怎么筛选,先测试词包还是先测试创意好?
  13. 夜间灯光数据dn值_DMSP/OLS和VIIRS/DNB夜间灯光影像的校正及拟合
  14. 港科报道 | 汪扬教授:数字经济是不可逆转,不受地缘政治影响的全球化经济
  15. 新手必看,13个信号可判断庄家进驻!
  16. TNF抑制剂相关的肿瘤风险:阿达木单抗、依那西普和英夫利昔单抗随机对照试验的荟萃分析...
  17. 华远地产:在稳健中穿越周期 | 一点财经
  18. android 更改字体_如何在Android中更改字体
  19. kodi资源_Kodi下载-Kodi官方版下载-PC下载网
  20. 表面散射 | Vol.5 基于图像的偏振反射率的采集与建模

热门文章

  1. memcached完全剖析–1. memcached的基础
  2. HDOJ 2009 求数列的和
  3. 诡异的bug: tcsh陷入死循环
  4. [轉]SQL Server 2005备份维护计划
  5. OpenCV2:开头篇 介绍
  6. 3.2-3.3 Hive中常见的数据压缩
  7. Python接口自动化实战 ( 第一阶段) - 封装接口请求类和异常处理
  8. 第12课第3节 字符设备驱动程序之查询方式的按键驱动程序
  9. CentOS 7 上安装 redis3.2.3安装与配置
  10. 算法训练 最大的算式