分布式计算系统—MapReduce介绍

MapReduce最早是由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法。MapReduce的灵感来源于函数式语言(比如Lisp)中的内置函数map和reduce。简单来说,在函数式语言里,map表示对一个列表(List)中的每个元素做计算,reduce表示对一个列表中的每个元素做迭代计算。MapReduce极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。

​在MapReduce里,Map处理的是原始数据,可以是杂乱无章的,每条数据之间互相没有关系;到了Reduce阶段,数据是以key/value键值对来组织的,这些value有相关性,至少它们都在一个key下面,于是就符合函数式语言里map和reduce的基本思想了。


实现原理:

分布式计算系统—MapReduce介绍


实现过程:
1.数据文件在加载时拆分成块(默认128MB)并进行分布,而且每个块被复制到多个数据节点中(默认3份)。
2.然后Master将任务(任务也被分成M个Map任务和R个Reduce任务)分配给空闲的worker
3.worker读取相关的输入数据片段,数据片段会被解析成键值对。然后做Map函数(用户自定义的)处理。
4.通过图中的local write过程键值对被写入到本地磁盘上。(其实键值对是通过分区函数分成R个区域,再周期性的写入到本地磁盘的。)
5.Master将数据存储位置(这个本地磁盘上的存储位置是由上一步返回的)发送给worker,worker读取数据。(这个过程还涉及到排序,因为很多不同的key值会映射到相同的Reduce任务)
6.对上一步的数据做Reduce函数(用户自定义的)处理。