洗牌阶段实际上做了什么?
可能性 - A
由于 shuffle 是将 mapper o/p 带到 reducer o/p 的过程,它只是根据 partitioner 中编写的代码将特定键从 mapper 带到特定的 reducer
eg. the o/p of mapper 1 is {a,1} {b,1}
the o/p of mapper 2 is {a,1} {b,1}
在我的分区器中,我已经写了所有以'a'开头的键都将进入reducer 1,所有以'b'开头的键都将进入reducer 2,因此o/p将是:
reducer 1: {a,1}{a,1}
reducer 2: {b,1}{b,1}
可能性 - B
或者与上述过程一起,它是否还对键进行分组:
因此,o/p 将是:
reducer 1: {a,[1,1]}
reducer 2: {b,[1,1]}
在我看来,我认为它应该是 A,因为键的分组必须在排序之后进行,因为排序只是为了让 reducer 可以轻松地指出一个键结束而另一个键开始的时间。如果是,那么 key 分组实际上何时发生,请详细说明。
最佳答案
Mappers 和 Reducers 不是独立的机器,而只是独立的代码。映射代码和归约代码都运行在集群中的同一台机器上。
所以,在集群中的所有机器都运行了mapper之后,结果是:
将第 2 步视为“全局分组”,因为它是以属于一个键的所有值都转到其分配的唯一节点的方式完成的。
现在,节点在其内存中的 (key, value) 对上运行 Reducer 代码。
关于hadoop - 洗牌阶段实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44351229/