Map-Reduce是一种可扩展的编程模型,可简化数据的分布式处理。 Map-Reduce包括三个主要步骤:Map,shuffle,Reduce。
Map-Reduce工作的一个简单解释是:它将一个大型任务“委派”给一群人,然后将每个人的努力结果相结合,以产生最终结果。
让我们举个例子来说明一下。你刚刚在你的办公室听到这个好消息,并为所有的同事们举行派对!你决定煮面食吃饭。你的四个朋友,喜欢烹饪,也愿意加入你。准备面食的任务涉及剁蔬菜,烹饪和装盘。
我们来剁蔬菜,这里的生蔬菜就像输入数据,你的朋友相当于计算节点(Compute nodes),而最终切好的蔬菜类似于结果。每个朋友都分配了洋葱,西红柿和辣椒,以剁碎和称重。
你也想知道你在厨房里有多少蔬菜类型。您也想在这种计算过程中切断这些蔬菜。最后,同一类的蔬菜应该在一个大碗里,标签上显示其重量等信息。
Map
你的朋友使用他们的“处理能力(compute power)”来切蔬菜并称重。 他们需要确保不混合不同类型的蔬菜。 所以每个朋友都会生成一个<key,value>映射。每一个映射对应一小碗蔬菜。
Friend X:
<tomatoes, 5 lbs>
<onions, 10 lbs>
<garlic, 2 lbs>
Friend Y:
<onions, 22 lbs>
<green peppers, 5 lbs>
…
Shuffle
这个阶段也叫做分组。 在这里,你想按照类型蔬菜给蔬菜分组。 您将厨房的不同部分分配给每种蔬菜类型,您的朋友应该对碗进行分组,以便将产品放在一起:
North End of Kitchen:
<tomatoes, 5 lbs>
<tomatoes, 11 lbs>
West End of Kitchen:
<onions, 10 lbs>
<onions, 22 lbs>
<onions, 1.4 lbs>
East End of Kitchen:
<green peppers, 3 lbs>
<green peppers, 10 lbs>
你被朋友通过Mapping and Grouping完成的工作给震撼了!厨房看起来更加有组织。 这个任务的最后阶段是衡量你实际拥有的每种蔬菜的数量。 这让我们进入了Reduce阶段。
Reduce
在这个阶段,你要求你的朋友收集相同类型的物品,把它们放在一个大碗中,并用大量的碗重量标注这个大碗。 你的朋友立即开始“减少”小碗。 最后,你就有了一堆标注良好的大碗。
<tomatoes, 16 lbs>
<green peppers, 13lbs>
<onions, 33.4 lbs>
总结
您的朋友(“计算节点”)刚刚执行了Map-Reduce任务,以帮助您开始烹饪。 由于您正在协调整个练习,所以您是此Map-Reduce任务的“Master”节点。 你的每个朋友都在不同的时间担任Mappers, Groupers ,Reducers的角色。 此示例演示了MapReduce的强大功能。
由Yanring翻译自http://words.sdsc.edu/words-data-science/mapreduce