假设我有一个具有多个映射器和多个reduce任务的作业。映射器输出的密钥类型是WritableComparable。即,对于单词计数示例,让我们说我有字符串:
" foo foo bar foo bletch quux bar"
当使用单词作为键时,是" foo"总是分配给相同的减少或者多个减速器可能会收到一个" foo"?
答案 0 :(得分:0)
MapReduce始终将键值对传递给reducer,以便与同一键关联的所有值都转到同一个reducer。这是在MapReduce期间由partitioner
阶段完成的。
因此,与foo
关联的所有值都将转到同一个reducer。
答案 1 :(得分:0)
Hadoop执行所有地图任务的输出,然后使用相同的键将所有映射器输出传输到同一个reducer任务。这被称为" shuffle"。因此,一个减速器任务可能正在处理所有" foo"映射器结果而另一个正在处理所有" bar"映射器结果。如果" foo"或" bar"是映射器发出的键,然后多个reducer永远不会收到" foo"。
答案 2 :(得分:0)
如其他答案中所述,MapReduce始终将键值对传递给reducer,以便与同一键关联的所有值都转到同一个reducer。
实际发生的情况是,在分区阶段,哈希函数应用于密钥,因此使用哈希将它们发送到reducer。因此,所有类似的键最终会转到同一个reducer。