Я могу получить invidually отсортированные выводы Картопостроителя от Hadoop при использовании нулевых Редукторов?

У меня есть задание в Hadoop 0.20, который должен воздействовать на большие файлы по одному. (Это - шаг предварительной обработки для получения файловых данных в инструмент для очистки, основанный на строке формат, более подходящий для MapReduce.)

Я не возражаю, сколько выходных файлов я имею, но вывод каждой Карты может быть в самое большее одном выходном файле, и каждый выходной файл должен быть отсортирован.

  • Если я работаю с numReducers=0, он работает быстро, и каждый Картопостроитель выписывает свой собственный выходной файл, который прекрасен - но файлы не отсортированы.
  • Если я добавляю один редуктор (плоскость Reducer.class), это добавляет, что ненужный глобальный вид ступает в единственный файл, который занимает много часов (намного дольше, чем задачи Карты берут).
  • Если я добавляю несколько редукторов, результаты отдельных заданий карты смешаны так, вывод одной Карты заканчивается в нескольких файлах.

Там какой-либо путь состоит в том, чтобы убедить Hadoop выполнить вид стороны карты на выводе каждого задания, не используя Редукторы или какой-либо другой способ пропустить медленное глобальное слияние?

5
задан Ben Moran 25 June 2010 в 12:38
поделиться

2 ответа

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

Обычно вы не хотите сортировать вывод каждого сопоставителя отдельно, но если вы это сделаете, почему бы не добавить идентификатор файла сопоставителя как часть вывода и не использовать настраиваемую функцию разделения, чтобы вывод каждого сопоставителя был разделен отдельно, и следовательно, отсортированы отдельно, поэтому выходные данные любого маппера всегда находятся в одном файле? Вы также, вероятно, захотите сгруппировать по идентификатору файла, чтобы получить отсортированный вывод каждого входного файла отдельно.

Мне любопытно, почему вы все равно хотите сортировать вывод картографа отдельно?

Еще одна мысль: Hadoop на самом деле будет выполнять сортировку на стороне картографа («перемешивание»), если вы сортируете свой результат, так что вы, вероятно, мог бы он не удалять эти временные файлы, если бы вы работали со многими редукторами.

2
ответ дан 14 December 2019 в 18:58
поделиться

См. Комментарий Бена ниже - это не работает. Я оставлю здесь этот неправильный ответ, чтобы мы хотя бы знали, что не работает.

Я считаю, что именно это сделал бы для вас Combiner . Я никогда не использовал их сам, но http://hadoop.apache.org/common/docs/r0.20.1/mapred_tutorial.html утверждает (раздел Payload / Mapper):

Пользователи могут дополнительно указать а комбайнер, через JobConf.setCombinerClass (Класс), чтобы выполнить локальную агрегацию промежуточные выходы, что помогает сократить объем данных перенесен из Картографа в Редуктор.

Я так понимаю, что если вы указали редуктор идентичности в качестве объединителя, то выходные данные каждого преобразователя должны быть отсортированы.

0
ответ дан 14 December 2019 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: