Hadoop内置Partitioner
MapReduce的使用者通常会指定Reduce任务和Reduce任务输出文件的数量(R)。
用户在中间key上使用分区函数来对数据进行分区,之后在输入到后续任务执行进程。
一个默认的分区函数式使用hash方法(比如常见的:hash(key) mod R)进行分区。
hash方法能够产生非常平衡的分区。
Hadoop中自带了一个默认的分区类HashPartitioner,
它继承了Partitioner类,提供了一个getPartition的方法
/** Partition keys by their {@link Object#hashCode()}. */
public classHashPartitioner<K, V> extendsPartitioner<K, V> {/** Use {@link Object#hashCode()} to partition. */
public int getPartition(K key, V value,int numReduceTasks) {
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}