洗牌阶段实际上做了什么?
可能性-A
由于 shuffle 是将映射器 o/p 带到减速器 o/p 的过程,因此它只是根据分区器中编写的代码将特定键从映射器带到特定的减速器
例如。映射器 1 的 o/p 是 {a,1} {b,1}
映射器 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]}
在我看来,我认为它应该是 A,因为键的分组必须在排序后进行,因为排序只是为了让减速器可以轻松指出一个键何时结束而另一个键何时开始。如果是,什么时候真正发生密钥分组,请详细说明。
Mappers 和Reducers 不是独立的机器,而只是独立的代码。映射代码和缩减代码都在集群中的同一台机器上运行。
所以,当集群中的所有机器都运行完mapper后,结果是:
- 在节点上本地分箱(将其视为“本地分组”);和,
- 在集群上的所有节点上进行洗牌/重新分布。
将步骤 2 视为“全局分组”,因为它是以属于一个键的所有值都转到其分配的唯一节点的方式完成的。
现在,节点对驻留在其内存中的(键,值)对运行Reducer 代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)