Я выполняю вторичную сортировку в Hadoop 2.6.0, я следую этому руководству: https://vangjee.wordpress.com/2012/03/20/secondary-sorting-aka-sorting-values-in-hadoops-mapreduce-programming-paradigm/
У меня точно такой же код, но сейчас я пытаюсь улучшить производительность, поэтому решил добавить объединитель. Я добавил две модификации:
Основной файл:
job.setCombinerClass(CombinerK.class);
Файл комбайна:
public class CombinerK extends Reducer<KeyWritable, KeyWritable, KeyWritable, KeyWritable> {
public void reduce(KeyWritable key, Iterator<KeyWritable> values, Context context) throws IOException, InterruptedException {
Iterator<KeyWritable> it = values;
System.err.println("combiner " + key);
KeyWritable first_value = it.next();
System.err.println("va: " + first_value);
while (it.hasNext()) {
sum += it.next().getSs();
}
first_value.setS(sum);
context.write(key, first_value);
}
}
Но кажется, что он не запускается, потому что я не могу найти файл журнала, в котором есть слово «комбинатор». Когда я увидел счетчики после запуска, я мог видеть:
Combine input records=4040000
Combine output records=4040000
Комбайнер выглядит так, как будто он выполняется, но кажется, что он получает вызов для каждой клавиши, и по этой причине он имеет тот же номер на входе, что и на выходе.