Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Hadoop中使用多个还原器时,键/值对是如何分布的?_Hadoop_Mapreduce_Reduce - Fatal编程技术网

在Hadoop中使用多个还原器时,键/值对是如何分布的?

在Hadoop中使用多个还原器时,键/值对是如何分布的?,hadoop,mapreduce,reduce,Hadoop,Mapreduce,Reduce,假设我有一个工作,其中有许多映射器和多个reduce任务。映射器输出的键类型是可写的。例如,对于单词计数示例,假设我有字符串: foo foo bar foo bletch quux bar 当使用这些词作为键时,foo是否始终分配给同一个reduce,或者是否可能有多个reducer接收到foo?MapReduce始终将键值对传递给reducer,以便与同一键关联的所有值都传递给同一个reducer。这是在MapReduce期间由分区器阶段完成的 因此,与foo关联的所有值都将转到同一个减速机

假设我有一个工作,其中有许多映射器和多个reduce任务。映射器输出的键类型是可写的。例如,对于单词计数示例,假设我有字符串:

foo foo bar foo bletch quux bar


当使用这些词作为键时,foo是否始终分配给同一个reduce,或者是否可能有多个reducer接收到foo?

MapReduce始终将键值对传递给reducer,以便与同一键关联的所有值都传递给同一个reducer。这是在MapReduce期间由分区器阶段完成的


因此,与foo关联的所有值都将转到同一个减速机

Hadoop执行来自所有映射任务的一种输出,然后使用同一个键将所有映射器输出传输到同一个reducer任务。这叫做洗牌。因此,一个reducer任务可能正在处理所有foo映射器结果,而另一个任务正在处理所有bar映射器结果。如果foo或bar是映射器发出的键,那么多个reducer将永远不会接收foo

如其他答案中所述,MapReduce始终将键值对传递给reducer,以便与同一个键关联的所有值都传递给同一个reducer

实际情况是,在分区阶段,对键应用哈希函数,然后使用哈希将它们发送到还原程序。因此,所有类似的键最终都会连接到同一个减速器