【发布时间】:2019-04-16 01:09:11
【问题描述】:
据我了解,在映射和归约之间存在组合(如果适用),然后是分区,然后是洗牌。
虽然在 map/reduce 中分区和随机排序是不同的阶段似乎很明显,但我无法区分它们的角色。
他们必须一起从许多映射器(或组合器)获取键/值对并将它们发送到减速器,所有共享相同键的值被发送到同一个减速器。但我不知道这两个阶段各自的作用。
【问题讨论】:
标签: mapreduce
据我了解,在映射和归约之间存在组合(如果适用),然后是分区,然后是洗牌。
虽然在 map/reduce 中分区和随机排序是不同的阶段似乎很明显,但我无法区分它们的角色。
他们必须一起从许多映射器(或组合器)获取键/值对并将它们发送到减速器,所有共享相同键的值被发送到同一个减速器。但我不知道这两个阶段各自的作用。
【问题讨论】:
标签: mapreduce
Partitioning 是在shuffle-sort 子阶段之前执行的子阶段。但是为什么需要分区呢?
每个reducer 从几个不同的mapper 中获取数据。看这张图(找到here):
Hadoop 必须知道来自每个映射器的所有 Ayush 记录都必须发送到特定的 reducer(否则任务将返回不正确的结果)。当它决定将哪个 key 发送到哪个分区,哪个将发送到特定的 reducer 的过程是分区过程。 partition 的总数等于 reducer 的总数。
Shuffle 是将 partitioner 提供的中间数据移动到 reducer 节点的过程。在这个阶段,有排序和合并子阶段:
合并 - 合并所有具有 相同的键和返回>.
排序 - 从合并步骤中获取输出并对所有内容进行排序 使用 Keys 的键值对。这一步也返回
(Key, List[Value])输出,但带有排序的键值对。
shuffle-sort阶段的输出直接发送到reducers。
【讨论】: