che*_*_zj 6 hash hadoop partitioning
分区是确定哪个reducer实例将接收哪些中间键和值的过程.每个映射器必须确定reducer将接收它们的所有输出(键,值)对.对于任何键,无论哪个映射器实例生成它,目标分区都是相同的问题是必要的问题:hadoop如何制作它?使用哈希函数?什么是默认功能?
tom*_*y_o 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;
}
}
Run Code Online (Sandbox Code Playgroud)
要创建自定义分区,则应扩展Partitioner,创建一个方法getPartition,然后设置分区的驱动程序代码(job.setPartitionerClass(CustomPartitioner.class);).例如,如果进行二级排序操作,这尤其有用.