Hadoop MapReduce MultipleOutputs — один в Mapper, один в Reducer

#java #hadoop #mapreduce #elastic-map-reduce

#java #hadoop #mapreduce #эластичная карта-уменьшить

Вопрос:

Я хочу использовать несколько выходов в задании Hadoop в эластичном MapReduce. Итак, я настроил MultipleOutputs main() метод следующим образом:

 MultipleOutputs.addNamedOutput(hadoopJob, "One",
    TextOutputFormat.class, NullWritable.class, Text.class);

MultipleOutputs.addNamedOutput(hadoopJob, "Two",
    TextOutputFormat.class, NullWritable.class, Text.class);
  

Я хочу, чтобы «один» содержал вывод из Mapper, а «два» содержал вывод из Reducer.

В setup методе как для mapper, так и для reducer я вызываю:

 outputWriters = new MultipleOutputs(context);
  

В mapper я вызываю:

 outputWriters.write("One", nothing, sampleOutput, "One");
  

В редукторе я вызываю:

 outputWriters.write("Two", nothing, new Text(thing.getStuff()), "Two");
  

Наконец, в cleanup методе как для mapper, так и для reducer я вызываю:

 outputWriters.close();
  

Когда я делаю это, я получаю исключение «файл уже существует» из Reducer — он пытается воссоздать выходные файлы, которые уже были созданы mapper.

Я могу решить это, удалив outputWriters.close() из метода mapper cleanup , но это создает другую проблему: я не получаю никаких выходных данных mapper.

Как правильно использовать MultipleOutputs один в mapper и один в reducer? JavaDocs не упоминают об этой ситуации, и я не нашел ничего полезного в StackOverflow.

Обновление: похоже, это работает нормально локально. Однако, если я попытаюсь запустить его в Elastic MapReduce с выводом S3, я столкнусь с ошибкой «файл уже существует». Есть идеи по обходным путям?

Комментарии:

1. Код должен работать, не могли бы вы поделиться кодом mapper и reducer?

2. Пожалуйста, посмотрите Мое обновление: по-видимому, это работает нормально локально, но не в эластичном MapReduce. Кроме того, я хотел бы поделиться кодом mapper и reducer, но они очень проприетарные.

3. Когда вы запускаете его локально, попадают ли несколько выходных данных из mapper и reducer в один и тот же каталог?

4. Да, они делают … чего я и ожидал, поскольку я в основном просто указываю «один» и «два» в качестве имен файлов.