Hadoop — установить номер редуктора на 0, но записать в тот же файл?

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

Явно установив количество редукторов равным 0, могу ли я узнать, как я могу управлять в картографе, чтобы все выходные данные записывались в один и тот же 1 выходной файл? Спасибо.


person Kevin    schedule 31.10.2013    source источник


Ответы (2)


Вы не можете сделать это в Hadoop. Каждый из ваших картографов должен записывать в независимые файлы. Это делает их эффективными (отсутствие конкуренции или сетевой передачи). Если вы хотите объединить все эти файлы, вам нужен один редьюсер. Кроме того, вы можете разрешить им быть отдельными файлами и объединять файлы при их загрузке (например, с помощью параметров командной строки HDFS cat или getmerge).

РЕДАКТИРОВАТЬ: Из вашего комментария я вижу, что вы хотите избавиться от хлопот, связанных с написанием редуктора. Это определенно возможно. Для этого вы можете использовать файл IdentityReducer. Вы можете проверить его API здесь. и объяснение 0 редукторов по сравнению с использованием IdentityReducer доступно здесь.

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

person cabad    schedule 31.10.2013
comment
это мое понимание... просто интересно, есть ли какой-нибудь скрытый индикатор/параметр для этого. Так что лучший способ - оставить редуктор там. :/ - person Kevin; 31.10.2013
comment
@кевин. Нет, и не может быть, так как это убьет вашу производительность. - person cabad; 31.10.2013
comment
когда я говорю скрытый параметр, мне не нужно создавать класс редуктора, но Hadoop достаточно умен, чтобы свести весь вывод в файл. Очевидно, я слишком много думал. ржу не могу - person Kevin; 31.10.2013
comment
@kevin Вы можете использовать один из уже существующих редюсеров. Я обновлю свой ответ этим и другим предложением - person cabad; 31.10.2013
comment
К вашему сведению, я добавил ответ, который делает одно дополнительное предложение. - person John B; 31.10.2013

cabad по большей части правильно. Однако, если вы хотите обработать файл с одним Mapper в один выходной файл, вы можете использовать FileInputFormat, который помечает файл как неразделяемый. Сделайте это, а также установите количество редукторов равным 0. Это снижает производительность при использовании нескольких узлов данных, но пропускает перемешивание и сортировку.

person John B    schedule 31.10.2013
comment
Да, одиночный маппер тоже работает. Я не предлагал этого, поскольку он сказал, что его задачи интенсивно используют ЦП, поэтому я предполагаю, что один картограф убьет его производительность. Однако я должен был включить эту альтернативу для полноты картины (будущая ссылка). Спасибо, что указали на это. - person cabad; 31.10.2013