Hadoop的默认使用默认Hash partitioner - click here,这是一样的东西
public class HashPartitioner<K2, V2> implements Partitioner<K2, V2> {
public void configure(JobConf job) {}
/** Use {@link Object#hashCode()} to partition. */
public int getPartition(K2 key, V2 value,
int numReduceTasks) {
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}
的key.hashCode()& Integer.MAX_VALUE的)%numReduceTasks将介于0返回一个数字numReduceTasks和你的情况的范围内因为,numRuduceTask = 6
捕获是在那一行本身 - 两个这样的语句可能会返回相同的数字。 而且,结果两个不同的键可以进入相同的缩减器。 对于EG-
("go".hashCode() & Integer.MAX_VALUE) % 6
将返回4,
("hello".hashCode() & Integer.MAX_VALUE) % 6
也将返回4.
所以,我建议这里要说的是,如果你想确保你所有的6个键都被6个不同的缩减器处理,你需要创建你自己的分区器来获得你想要的东西。
检出this link用于创建自定义分区程序,如果您有任何困惑,并且使用Job类指定自定义分区程序如下所示。
job.setPartitioner(<YourPartionerHere.class>);
希望这有助于。
嘿,我的答案下面有帮助吗? – 2013-05-26 18:13:51