Hadoop KeyComposite и Combiner

Я выполняю вторичную сортировку в 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

Комбайнер выглядит так, как будто он выполняется, но кажется, что он получает вызов для каждой клавиши, и по этой причине он имеет тот же номер на входе, что и на выходе.


person ie8888    schedule 04.10.2015    source источник
comment
На самом деле вы не могли бы сказать с объединением входных и выходных записей, но это указывает на то, что объединитель запущен. А вот по количеству входных и выходных записей, может быть в одном маппере у вас нет одинаковых ключей. Вы можете прочитать stackoverflow.com/questions/17160852/, чтобы получить больше информации о комбайнере.   -  person Vignesh I    schedule 04.10.2015
comment
@VigneshI Я создал несколько картографов (увеличив размер файла), я отправил идентичные K, V, чтобы проверить. Я продублировал строку context.write с теми же аргументами. По этой причине, поскольку я знаю, что отправил идентичные K,V, я думаю, что мой keycomposite должен реализовать какой-то метод или что-то в этом роде, чтобы проверить равенство или нет.   -  person ie8888    schedule 04.10.2015
comment
Вы не получите никаких подсказок, кроме количества объединенных входных и выходных записей в журнале. Поместите sysout в свой объединитель и запустите задание MR и просто проверьте журналы stdout в URL-адресе jobtracker на стороне сокращения.   -  person Vignesh I    schedule 04.10.2015
comment
@VigneshI Я проверял раньше, и это тоже не сработало. Спасибо за помощь.   -  person ie8888    schedule 04.10.2015