Как контролировать количество файлов вывода потоковой передачи Hadoop

Вот деталь:

Входные файлы находятся в пути hdfs /user/rd/input, а путь вывода hdfs - /user/rd/output. Во входном пути есть 20 000 файлов от part-00000 до part-19999, каждый файл имеет размер около 64 МБ. Я хочу написать задание потоковой передачи hadoop, чтобы объединить эти 20 000 файлов в 10 000 файлов.

Есть ли способ объединить эти 20000 файлов с 10000 файлов с помощью задания потоковой передачи hadoop? Или, другими словами, есть ли способ контролировать количество выходных файлов потоковой передачи hadoop?

Заранее спасибо!


person Charlie Lin    schedule 11.10.2013    source источник


Ответы (1)


Похоже, что прямо сейчас у вас есть задание по потоковой передаче только карты. Поведение с заданием только для карты - иметь один выходной файл для каждой задачи карты. Вы мало что можете сделать, чтобы изменить такое поведение.

Вы можете использовать способ работы MapReduce, добавив этап сокращения, чтобы он имел 10 000 редукторов. Затем каждый редуктор выведет один файл, так что у вас останется 10 000 файлов. Обратите внимание, что ваши записи данных будут «разбросаны» по 10 000 ... это не будут просто два соединенных файла. Для этого используйте флаг -D mapred.reduce.tasks=10000 в аргументах командной строки.

Вероятно, это поведение по умолчанию, но вы также можете указать редуктор идентичности в качестве редуктора. Это не делает ничего, кроме передачи записи, что, я думаю, вам здесь нужно. Используйте этот флаг для этого: -reducer org.apache.hadoop.mapred.lib.IdentityReducer

person Donald Miner    schedule 11.10.2013