Hadoop - reducer如何获取数据?

时间:2012-05-10 03:50:04

标签: hadoop

据我所知,映射器为每个reducer生成1个分区。 reducer如何知道要复制哪个分区?假设有两个节点运行映射器用于字数统计程序,并且配置了2个减速器。如果每个映射节点生成2个分区,并且两个节点中包含相同单词的分区的可能性,那么reducer将如何正常工作?

例如:

如果节点1生成分区1和分区2,则分区1包含名为“WHO”的密钥。

如果节点2生成分区3和分区4,则分区3包含名为“WHO”的密钥。

如果分区1和分区4进入减速器1(并且还原到减速器2),减速器1如何计算正确的字数?

如果不可能,并且分区1和3将转到reducer 1,Hadoop如何做到这一点?它是否确保来自不同节点的给定键值对总是转到同一个reducer?如果是这样,它是如何做到的?

谢谢, 苏雷什。

1 个答案:

答案 0 :(得分:4)

在您的情况下,由于分区1和分区3都带有密钥“WHO”,因此可以保证两个分区都转到同一个reducer。

更新

在hadoop中,任何时候任务跟踪器的最大减少任务数由mapred.tasktracker.reduce.tasks.maximum属性决定。
并且MapReduce作业的reducer数量是通过-D mapred.reduce.tasks=n

设置的
  

当存在多个reducer时,map任务会对其输出进行分区,每个reduce对每个reduce任务创建一个分区。每个分区中可以有许多密钥(及其关联值),但任何给定密钥的记录都在一个分区中。分区可以通过用户定义的分区函数来控制,但通常默认的分区器 - 使用散列函数来存储密钥 - 效果非常好。(Hadoop:权威指南)

因此,具有指定键的值将始终转到相同的reducer。