Hadoop решает, какой редуктор будет обрабатывать какие выходные ключи, используя Partitioner Если вы выводите только несколько ключей и хотите равномерное распределение между вашими редукторами, вам может быть лучше реализовать пользовательский 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);