MapReduce是什么?
MapReduce是一种编程范式,可以利用集群环境的成千上万台服务器实现强大的可伸缩性。
MapReduce一次最早源于函数式编程,由Google在一篇名为“MapReduce:Simplified Data Processing on Large Clusters”的文章中率先提出。
使用MapReduce范式时,重点是编写两个函数:
map()
过滤和聚集数据。
reduce()
根据map()生成的键完成归约、分组和总结。
这两个函数定义如下
map: (k1; v1) →[(k2; v2)]
输入:键值对(k1; v1)表示的数据
处理:文档数据记录(如文本文件中的行,或数据表格中的行)将以“键值对”形式传入map函数;map函数将处理这些键值对,并以另一种键值对形式输出一组键值对作为中间结果:[(k2; v2)]
输出:键值对[(k2; v2)]
表示的一组中间数据
主节点根据唯一的键将中间结果进行洗牌和聚集,然后再一次重新分布到工作节点。
reduce: (k2; [v2])→[(k3; v3)]
输入: 洗牌后的一个键和值列表(k2; [v2])
处理:对传入的中间结果列表数据进行某种整理或进一步的处理,并产生最终的某种形式的结果输出[(k3; v3)]
输出:最终输出结果[(k3; v3)]
各个map函数对所划分的数据并行处理,从不同的输入数据产生不同的中间结果输出
各个reduce也各自并行计算,各自负责处理不同的中间结果数据集合。进行reduce处理之前,必须等到所有的map函数做完,因此,在进入reduce前需要有一个同步障(barrier);这个阶段也负责对map的中间结果数据进行收集整理(aggregation & shuffle)处理,以便reduce更有效地计算最终结果—最终汇总所有reduce的输出结果即可获得最终结果.
MapReduce的简单解释
回家后,我的妻子(Supriya)问道:“你的会开得怎么样?”我说还不错。 接着她又问我会议是的内容是什么(她不是从事软件或编程领域的工作的)。我告诉她说MapReduce。“Mapduce,那是什么玩意儿?”她问道: “跟地形图有关