Hadoop的决定哪些减速将处理其输出密钥通过使用Partitioner 的。如果你只输出几个键,并想跨减速均匀分布,你可能会更好实现自定义分区程序你输出数据。例如
public class MyCustomPartitioner extends Partitioner<KEY, VALUE>
{
public int getPartition(KEY key, VALUE value, int numPartitions) {
// do something based on the key or value to determine which
// partition we want it to go to.
}
}
然后,您可以设置在任务配置这个自定义分区与
Job job = new Job(conf, "My Job Name");
job.setPartitionerClass(MyCustomPartitioner.class);
您也可以实现您的自定义分区程序的配置界面,如果你想根据岗位设置做任何进一步的配置。 另外,检查你有没有设定减少配置的任何地方任务为1(寻找“mapred.reduce.tasks”),或在代码的数量,例如
job.setNumReduceTasks(1);
是映射器产生多个密钥在KV对?如果碰巧是一个单一的键,那么将只有一个减速器。如果不是这种情况,那么可能是一个配置问题。 –