在 mapreduce 中,reducer 如何找到要拉取 map 输出的哪个分区

In mapreduce how reducer finds which partition of map output to pull

在 map-reduce 中,map 处理后生成分区输出。之后,reducer 从不同的映射器中提取特定的分区数据。在这里,reducer 如何知道它必须从 mapper 的输出中提取数据的哪个分区?

由分区机制决定。默认的分区机制是 Hash Partitioning。但是你可以为此定义一个自定义的分区器。

自定义分区程序的示例:-

public class Custom_Partitioner extends Partitioner<Text, IntWritable> {
    @Override
    public int getPartition(Text key, IntWritable value, int numPartitions) {
        String myKey = key.toString().toLowerCase();
        if (myKey.startsWith("a")) {
            return 0;
        } else if (myKey.startsWith("e")) {
            return 1;
        } else {
            return 2;
        }
    }
}

并且在驱动程序代码中:-

job.setPartitionerClass(Custom_Partitioner.class);
job.setNumReduceTasks(3);

所以在这里,我们将reducer任务的数量设置为3,并根据不言自明的方式对partitioner进行编码。 谢谢!