在Hadoop中使用多个还原器时,键/值对是如何分布的?
假设我有一个工作,其中有许多映射器和多个reduce任务。映射器输出的键类型是可写的。例如,对于单词计数示例,假设我有字符串: foo foo bar foo bletch quux bar在Hadoop中使用多个还原器时,键/值对是如何分布的?,hadoop,mapreduce,reduce,Hadoop,Mapreduce,Reduce,假设我有一个工作,其中有许多映射器和多个reduce任务。映射器输出的键类型是可写的。例如,对于单词计数示例,假设我有字符串: foo foo bar foo bletch quux bar 当使用这些词作为键时,foo是否始终分配给同一个reduce,或者是否可能有多个reducer接收到foo?MapReduce始终将键值对传递给reducer,以便与同一键关联的所有值都传递给同一个reducer。这是在MapReduce期间由分区器阶段完成的 因此,与foo关联的所有值都将转到同一个减速机
当使用这些词作为键时,foo是否始终分配给同一个reduce,或者是否可能有多个reducer接收到foo?MapReduce始终将键值对传递给reducer,以便与同一键关联的所有值都传递给同一个reducer。这是在MapReduce期间由分区器阶段完成的
因此,与foo关联的所有值都将转到同一个减速机 Hadoop执行来自所有映射任务的一种输出,然后使用同一个键将所有映射器输出传输到同一个reducer任务。这叫做洗牌。因此,一个reducer任务可能正在处理所有foo映射器结果,而另一个任务正在处理所有bar映射器结果。如果foo或bar是映射器发出的键,那么多个reducer将永远不会接收foo 如其他答案中所述,MapReduce始终将键值对传递给reducer,以便与同一个键关联的所有值都传递给同一个reducer 实际情况是,在分区阶段,对键应用哈希函数,然后使用哈希将它们发送到还原程序。因此,所有类似的键最终都会连接到同一个减速器