分区! hadoop怎么做的?使用哈希函数?什么是默认功能?

时间:2013-08-27 16:23:25

标签: hadoop hash partitioning

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

1 个答案:

答案 0 :(得分:16)

Hadoop中的默认分区程序是HashPartitioner,它有一个名为getPartition的方法。它需要key.hashCode() & Integer.MAX_VALUE并使用减少任务的数量来查找模数。

例如,如果有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);)中设置分区程序。例如,如果进行二级排序操作,这尤其有用。