据我所知,在映射和归约之间存在组合(如果适用),然后是分区,然后是改组。
虽然看起来分区和随机排序是map / reduce中不同的阶段,但我无法区分它们的作用。
它们必须一起从许多映射器(或组合器)中获取键/值对,并将它们发送给化简器,所有共享相同键的值都被发送到同一化简器。但是我不知道两个阶段的每个阶段。
答案 0 :(得分:1)
Partitioning是恰好在shuffle-sort子阶段之前执行的子阶段。但是为什么需要分区?
每个reducer从几个不同的映射器获取数据。看看这张照片(找到here):
Hadoop必须知道每个映射器的所有 Ayush 记录必须发送到特定的reducer(否则该任务将返回错误的结果)。决定将哪个键发送到哪个分区,将哪个键发送到特定的reducer的过程就是分区过程。分区总数等于减速器总数。
混洗是将分区程序提供的中间数据移至reducer节点的过程。在此阶段中,存在分类和合并子阶段:
合并-合并所有具有 相同的键并返回>。
排序-从“合并”步骤获取输出并对所有内容进行排序 使用键的键值对。此步骤也返回
(Key, List[Value])
输出,但具有排序的键/值对。
随机排序阶段的输出直接发送到减速器。