我正在尝试理解MapReduce的好处是什么,我刚刚第一次读了一些关于它的介绍。
他们都使用这个在大量文档中计算单词的典型例子,但我没有看到好处。以下是我目前的理解,如有错误请指正。
指定一个输入文件(文档)列表。MapReduce库获取此列表并在集群中的处理器之间进行划分。处理器上的每个文档都被传递给map函数,在本例中,map函数返回一个对列表。
这里我有点不确定到底发生了什么。然后,库软件搜索所有不同处理器上的结果集,并将具有相同单词(键)的这些对组合在一起。这些组在不同的处理器上收集,并且在该处理器上的每个组上调用reduce。
然后在主节点上收集组合结果。
这个解释正确吗?
我不明白的是,因为有必要对所有结果进行排序以分组键,为什么不同时计算它找到的键,为什么需要减少?在查找和组合通用键需要大量工作的情况下,这个过程如何节省时间?
这是一个关于MapReduce算法的YouTube视频,如果你看了完整的5个视频系列,它会让你更清楚地了解MapReduce,并回答你的大多数问题。
我不明白的是,因为有必要对所有结果进行排序以分组键,为什么不同时计算它找到的键,为什么需要减少呢?在查找和组合通用键需要大量工作的情况下,这个过程如何节省时间?
由于来自单词计数示例的特定单词(如"sample")的键/值对可能由不同的map任务发出,并且将分布在不同的节点上,因此这些键/值对需要在发送给reduce任务之前进行合并/排序。一个特定键的Reduce任务在单个节点上运行,并且不是分布式的。
供参考,来自map任务的结果在与map任务相同的节点上使用combiner类(与reducer类相同)进行组合,以减少映射器和reducer之间的网络喋喋不休。