我想了解MapReduce有什么好处,我刚刚第一次阅读了一些介绍。
他们都使用这个在大量文档中计算单词的典型示例,但我没有看到好处。以下是我目前的理解,如果我错了,请纠正我。
我们指定输入文件(文档)列表。 MapReduce库获取此列表并将其在集群中的处理器之间进行划分。处理器中的每个文档都传递给map函数,在这种情况下返回一对对列表。
这是我不确定究竟发生了什么的地方。 然后,库软件在所有不同的处理器上搜索结果集,并将这些对组合在一起,使用相同的单词(键)。这些组在不同的处理器上收集,并且在该处理器的每个组上调用reduce。
然后在主节点上收集组合结果。
这是正确的解释吗?
我不明白的是,因为有必要将所有结果分组到组密钥,为什么不计算它同时找到的密钥,为什么需要减少呢?当看起来有很多工作可以找到并组合常用密钥时,这个过程如何节省时间?
答案 0 :(得分:4)
这是一个关于MapReduce算法YouTube Video的精彩视频,如果您观看5个视频的完整系列,它将为您提供更多关于MapReduce的清晰度并回答您的大部分查询。
我不明白的是,因为有必要将所有结果分组到组键,为什么不计算它同时找到的键,为什么需要减少呢?当看起来有很多工作需要查找和组合常用密钥时,这个过程如何节省时间?
因为来自单词计数示例的特定单词(例如“sample”)的键/值对可能由不同的地图任务发出并将分布在不同的节点上,所以这些键/值对需要在发送到之前进行合并/排序减少任务。减少特定密钥的任务在单个节点上运行,并且不会分发。
仅供参考,map任务的结果使用与map任务相同的节点上的组合器类(与reducer类相同)组合,以减少映射器和reducer之间的网络抖动。