У меня есть задание в Hadoop 0.20, который должен воздействовать на большие файлы по одному. (Это - шаг предварительной обработки для получения файловых данных в инструмент для очистки, основанный на строке формат, более подходящий для MapReduce.)
Я не возражаю, сколько выходных файлов я имею, но вывод каждой Карты может быть в самое большее одном выходном файле, и каждый выходной файл должен быть отсортирован.
Там какой-либо путь состоит в том, чтобы убедить Hadoop выполнить вид стороны карты на выводе каждого задания, не используя Редукторы или какой-либо другой способ пропустить медленное глобальное слияние?
Комбайнеры не собираются глобально сортировать ваши данные - они, по сути, являются кешем для частичного агрегирования данных редуктора.
Обычно вы не хотите сортировать вывод каждого сопоставителя отдельно, но если вы это сделаете, почему бы не добавить идентификатор файла сопоставителя как часть вывода и не использовать настраиваемую функцию разделения, чтобы вывод каждого сопоставителя был разделен отдельно, и следовательно, отсортированы отдельно, поэтому выходные данные любого маппера всегда находятся в одном файле? Вы также, вероятно, захотите сгруппировать по идентификатору файла, чтобы получить отсортированный вывод каждого входного файла отдельно.
Мне любопытно, почему вы все равно хотите сортировать вывод картографа отдельно?
Еще одна мысль: Hadoop на самом деле будет выполнять сортировку на стороне картографа («перемешивание»), если вы сортируете свой результат, так что вы, вероятно, мог бы он не удалять эти временные файлы, если бы вы работали со многими редукторами.
См. Комментарий Бена ниже - это не работает. Я оставлю здесь этот неправильный ответ, чтобы мы хотя бы знали, что не работает.
Я считаю, что именно это сделал бы для вас Combiner
. Я никогда не использовал их сам, но http://hadoop.apache.org/common/docs/r0.20.1/mapred_tutorial.html утверждает (раздел Payload / Mapper):
Пользователи могут дополнительно указать а комбайнер, через JobConf.setCombinerClass (Класс), чтобы выполнить локальную агрегацию промежуточные выходы, что помогает сократить объем данных перенесен из Картографа в Редуктор.
Я так понимаю, что если вы указали редуктор идентичности в качестве объединителя, то выходные данные каждого преобразователя должны быть отсортированы.