美文网首页
如何正确并快速理解MapReduce

如何正确并快速理解MapReduce

作者: 值得一看的喵 | 来源:发表于2017-12-27 14:51 被阅读0次

什么是MapReduce?Map本意可以理解为地图,映射(面向对象语言都有Map集合),这里我们可以理解为从现实世界获得或产生映射。Reduce本意是减少的意思,这里我们可以理解为归并前面Map产生的映射。

MapReduce的编程模型

按照google的MapReduce论文所说的,MapReduce的编程模型的原理是:利用一个输入key/value对集合来产生一个输出的key/value对集合。MapReduce库的用户用两个函数表达这个计算:Map和Reduce。用户自定义的Map函数接受一个输入的key/value对值,然后产生一个中间key/value对值的集合。MapReduce库把所有具有相同中间key值的中间value值集合在一起后传递给Reduce函数。用户自定义的Reduce函数接受一个中间key的值和相关的一个value值的集合。Reduce函数合并这些value值,形成一个较小的value值的集合。

MapReduce实现

通过将Map调用的输入数据自动分割为M个数据片段的集合,Map调用被分布到多台机器上执行。输入的数据片段能够在不同的机器上并行处理。使用分区函数将Map调用产生的中间key值分成R个不同分区(例如,hash(key) mod R),Reduce调用也被分布到多台机器上执行。分区数量(R)和分区函数由用户来指定。

MapReduce实现的大概过程如下:

1.用户程序首先调用的MapReduce库将输入文件分成M个数据片度,每个数据片段的大小一般从16MB到64MB(可以通过可选的参数来控制每个数据片段的大小)。然后用户程序在集群中创建大量的程序副本。

2.这些程序副本中的有一个特殊的程序master。副本中其它的程序都是worker程序,由master分配任务。有M个Map任务和R个Reduce任务将被分配,master将一个Map任务或Reduce任务分配给一个空闲的worker。 

3.被分配了map任务的worker程序读取相关的输入数据片段,从输入的数据片段中解析出key/value对,然后把key/value对传递给用户自定义的Map函数,由Map函数生成并输出的中间key/value对,并缓存在内存中。 

4.缓存中的key/value对通过分区函数分成R个区域,之后周期性的写入到本地磁盘上,会产生R个临时文件。缓存的key/value对在本地磁盘上的存储位置将被回传给master,由master负责把这些存储位置再传送给Reduce worker。 

5.当Reduce worker程序接收到master程序发来的数据存储位置信息后,使用RPC从Map worker所在主机的磁盘上读取这些缓存数据。当Reduce worker读取了所有的中间数据(这个时候所有的Map任务都执行完了)后,通过对key进行排序后使得具有相同key值的数据聚合在一起。由于许多不同的key值会映射到相同的Reduce任务上,因此必须进行排序。如果中间数据太大无法在内存中完成排序,那么就要在外部进行排序。 

6.Reduce worker程序遍历排序后的中间数据,对于每一个唯一的中间key值,Reduce worker程序将这个key值和它相关的中间value值的集合(这个集合是由Reduce worker产生的,它存放的是同一个key对应的value值)传递给用户自定义的Reduce函数。Reduce函数的输出被追加到所属分区的输出文件。 

上面过程中的排序很容易理解,关键是分区,这一步最终决定该键值对未来会交给哪个reduce任务,如统计单词出现的次数可以用前面说的hash(key) mod R来分区,如果是对数据进行排序则应该根据key的分布进行分区。

相关文章

  • 如何正确并快速理解MapReduce

    什么是MapReduce?Map本意可以理解为地图,映射(面向对象语言都有Map集合),这里我们可以理解为从现实世...

  • 2019-07-08Linux安装

    如何正确并快速的下载CentOS各个版本镜像Linux的安装

  • Linux的安装

    如何正确并快速的下载CentOS各个版本镜像 Linux的安装

  • 《数据结构与算法之美》笔记 — 链表

    个人博客首发:https://wubobo952.github.io/ 如何快速写出正确的链表代码 技巧一:理解指...

  • Linux安装

    如何正确并快速的下载CentOS各个版本镜像 我们将通过图示一步一步教大家如何安装Linux系统。注意这里我们选择...

  • MapReduce理解

    引子 为什么需要MapReduce? 因为MapReduce可以“分而治之”,将计算大数据的复杂任务分解成若干简单...

  • 东山实习日志0306

    ※今日关键词:陌拜,论如何快速调整正确心态了解并融入新的工作环境。※完成度+收获剖析:①能根据任务快速定下完成目标...

  • 如何理解并正确使用MySql索引(3)

    概述索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,接下来主要介...

  • 如何正确理解并利用VI手册

    如今,不论是企业创建品牌,还是设计公司要获取业务,VI手册都是一个大家喜欢用到的工具。对于企业创建品牌来讲,似乎不...

  • MapReduce:详解Shuffle过程

    Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方。要想理解MapReduce, Shuffle...

网友评论

      本文标题:如何正确并快速理解MapReduce

      本文链接:https://www.haomeiwen.com/subject/oqsugxtx.html