我正在查看 map reduce 的图表,其中有一个 map 步骤,一个 shuffle 步骤,然后是 reduce 步骤。为什么要洗牌?
为什么 map reduce 有一个 shuffle 步骤?
数据挖掘
地图减少
2021-09-17 01:06:46
3个回答
洗牌步骤的发生是为了保证来自具有相同键的映射器的结果(当然,它们可能来自也可能不是来自同一个映射器)将被发送到同一个reducer。因此,reducer 可以进一步减少结果集。
例如,您的 WordCount 映射器发出
(hot, 1)
(cold, 1)
(hot, 1)
(rain, 1)
(cold, 1)
洗牌步骤将确保
(hot, 1), (hot, 1)
到达同一个减速器。
所以,你得到你的最终答案
(hot, 2)
同样适用于 (cold,1) 和 (rain,1)
洗牌步骤实际上是最重要的步骤。这就是 MapReduce 系统接管的地方,如果实施得当,您将获得所有性能。
Mappers 和 reducer 并行运行,并且彼此独立。他们通常会做非常愚蠢的操作,例如在字数统计示例中。洗牌阶段是所有繁重的工作发生的地方。所有数据都重新排列以供下一步再次并行运行。
MapReduce 的主要贡献在于,令人惊讶的是,许多程序可以分解为映射器、预定义的 shuffle 和 reducer。只要您优化 shuffle,它们就会运行得很快。
这就是为什么您可以使用自定义 map 和 reduce 函数进行扩展,但不能使用自定义 shuffle - 这部分需要由专家编写,您只能修改它使用的键。您可以使用“还可以”的地图,可以使用“还可以”的减少,但不能使用“还可以”的随机播放,它必须是一流的。
这也是人们无法编写好的 mapreduce 的地方。例如,在洗牌之前产生过多的副本,或者将所有内容放入同一个键中(洗牌不再有意义)。
shuffle 步骤涉及将数据从映射器传输到减速器 - 这只是必要的,以便您有输入到减速器。您可以在 Stack Overflow question中找到更详细的答案。
其它你可能感兴趣的问题