我知道映射器为每个 reducer 生成 1 个分区。 reducer 如何知道要复制哪个分区?假设有 2 个节点为字数统计程序运行 mapper,并且配置了 2 个 reducer。如果每个 map 节点产生 2 个分区,并且两个节点中的分区都可能包含相同的单词作为键,reducer 将如何正常工作?
例如:
如果节点 1 产生分区 1 和分区 2,分区 1 包含一个名为“WHO”的键。
如果节点 2 产生分区 3 和分区 4,分区 3 包含一个名为“WHO”的键。
如果 Partition 1 和 Partition 4 进入 reducer 1(剩余部分进入 reducer 2),reducer 1 如何计算正确的字数?
如果这不可能,分区 1 和分区 3 将转到 reducer 1,Hadoop 如何做到这一点?它是否确保来自不同节点的给定键值对始终进入同一个 reducer?如果是这样,它是如何做到的?
谢谢, 苏雷什。
最佳答案
在您的情况下,由于分区 1 和分区 3 都具有键“WHO”,因此可以保证这两个分区进入同一个 reducer。
更新
在 hadoop 中,在任何时候一个 tasktracker 的 reduce 任务的最大数量由 mapred.tasktracker.reduce.tasks.maximum
属性决定。
一个 MapReduce 作业的 reducer 数量通过 -D mapred.reduce.tasks=n
When there are multiple reducers, the map tasks partition their output, each creating one partition for each reduce task. There can be many keys (and their associated values) in each partition, but the records for any given key are all in a single partition. The partitioning can be controlled by a user-defined partitioning function, but normally the default partitioner—which buckets keys using a hash function—works very well.(Hadoop: The definitive guide)
因此,具有指定键的值将始终转到同一个 reducer。
关于Hadoop - reducer 如何获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10527271/