分区!hadoop是如何实现的?使用散列函数?默认功能是什么



分区是确定哪个reducer实例将接收哪些中间键和值的过程。每个映射器必须为其所有输出(键、值)对确定哪个reducer将接收它们。对于任何键,无论是哪个映射器实例生成的,目标分区都必须相同问题:hadoop是如何实现的?使用散列函数?默认功能是什么?

Hadoop中的默认分区器是HashPartitioner,它有一个名为getPartition的方法。它取key.hashCode() & Integer.MAX_VALUE,并使用reduce任务的数量来找到模。

例如,如果有10个reduce任务,则getPartition将为所有键返回值0到9。

这是代码:

public class HashPartitioner<K, V> extends Partitioner<K, V> {
    public int getPartition(K key, V value, int numReduceTasks) {
        return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
    }
}

要创建自定义分区器,需要扩展Partitioner,创建方法getPartition,然后在驱动程序代码(job.setPartitionerClass(CustomPartitioner.class);)中设置分区器。例如,如果执行辅助排序操作,这将特别有用。

相关内容

  • 没有找到相关文章

最新更新