洗牌阶段实际上是做什么的?
可能性-a
由于洗牌是将Map器o/p带到reducer o/p的过程,它只是根据partitioner中编写的代码将Map器中的特定键带到特定的reducer
Map器1的o/p是{a,1}{b,1}
Map器2的o/p是{a,1}{b,1}
在我的分区中,我写了所有以'a'开头的键都将转到reducer 1,所有以'b'开头的键都将转到reducer 2,所以o/p将是:
减速器1:{a,1}{a,1}
减速机2:{b,1}{b,1}
可能性-b
或者在上述过程中,它是否也对密钥进行分组:
所以,o/p应该是:
减速机1:{a,[1,1]}
减速器2:{b,[1,1]}
在我看来,我认为这应该是一个问题,因为键的分组必须在排序之后进行,因为排序只是为了方便地指出一个键何时结束,另一个键何时开始。如果是的话,什么时候会发生钥匙分组,请详细说明。
1条答案
按热度按时间xriantvc1#
Map器和还原器不是独立的机器,只是独立的代码。Map代码和缩减代码都在集群中的同一组机器上运行。
因此,在群集中的所有计算机都运行了mapper之后,结果是:
在节点上本地装箱(将其视为“本地分组”);而且,
在集群上的所有节点上无序/重新分布。
将步骤2视为“全局分组”,因为这样做的方式是,属于一个键的所有值都转到它们指定的唯一节点。
现在,节点在内存中的(键,值)对上运行reducer代码。