MapReduce中Partitioner阶段和Shuffle&Sort阶段有什么区别?

What is the difference between Partitioner phase and Shuffle&Sort phase in MapReduce?

据我了解,在映射和减少之间有组合(如果适用),然后是分区,然后是改组。

虽然在 map/reduce 中分区和随机排序似乎是不同的阶段,但我无法区分它们的角色。

它们必须一起从许多映射器(或组合器)中获取 key/value 对并将它们发送到缩减器,所有值共享相同的键被发送到同一个缩减器。但是我不知道这两个阶段各自做什么。

Partitioning is the sub-phase executed just before shuffle-sort亚相。但是为什么需要分区呢?

每个 reducer 从几个不同的映射器中获取数据。看这张图(找到了here):

Hadoop 必须知道来自每个映射器的所有 Ayush 记录必须发送到特定的缩减器(否则任务将 return 不正确的结果)。它决定将哪个键发送到哪个分区,将发送到特定减速器的过程是分区过程。分区总数等于减速器总数。

Shuffling是将partitioner提供的中间数据移动到reducer节点的过程。在这个阶段,有排序和合并子阶段:

Merging - combines all key-value pairs which have same keys and returns >.

Sorting - takes output from Merging step and sort all key-value pairs by using Keys. This step also returns (Key, List[Value]) output but with sorted key-value pairs.

shuffle-sort 阶段的输出直接发送到 reducers。