提问者:小点点

洗牌阶段实际上是做什么的?


洗牌阶段实际上是做什么的?

由于混洗是将映射器o/p带到还原器o/p的过程,它只是根据分区器中编写的代码将特定键从映射器带到特定的还原器

例如。映射器1的o/p是{a,1}{b,1}

映射器2的o/p是{a,1}{b,1}

在我的分区器中,我写了所有以“a”开头的键都将转到还原器1,所有以“b”开头的键都将转到还原器2,因此o/p将是:

减速机1:{a,1}{a,1}

减速器2:{b,1}{b,1}

或者与上面的过程一起,它是否也对键进行分组:

因此,o/p将是:

减速机1:{a,[1,1]}

减速器2:{b,[1,1]}

在我看来,我认为应该是A,因为键的分组必须在排序后进行,因为排序只是为了让减速机可以很容易地指出一个键何时结束,另一个键何时开始。如果是,键分组实际上是什么时候发生的,请详细说明。


共1个答案

匿名用户

映射器和归约器不是单独的机器,而只是单独的代码。映射代码和归约代码都运行在集群中存在的相同集合机器上。

因此,集群中的所有机器都运行mapper后,结果是:

  1. 在节点上本地绑定(将其视为“本地分组”);并且,
  2. 在集群上的所有节点上进行混洗/重新分配。

将第2步视为“全局分组”,因为它的方式是属于一个键的所有值都转到它们分配的唯一节点。

现在,节点在驻留在其内存中的(key, value)对上运行Reducer代码。