Генерация соответствующего количества выходов редуктора

Я запускаю простую карту и уменьшаю задание Hadoop. Свойство mapred.reduce.tasks установлено администратором Hadoop в файле mapred-site.xml. Допустим, это 25. Теперь моя работа создает только 4 разных ключа, поэтому только 4 из 25 файлов part-r-xxxx непустые, остальные - пустые файлы. Как предотвратить это? Мне нужно столько выходных файлов, сколько произведено ключей (которое я не знаю заранее).

Спасибо.


person abhinavkulkarni    schedule 31.07.2013    source источник


Ответы (2)


Я бы посоветовал использовать LazyOutputFormat:

LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class);

Это гарантирует, что ваши выходные файлы будут созданы только в том случае, если для этого редуктора есть фактические данные.

person Charles Menguy    schedule 31.07.2013

Или вы также можете переопределить функцию needTaskCommit() класса FileOutputCommitter.

Проверьте этот блог Криса, чтобы добиться этого.

person SSaikia_JtheRocker    schedule 31.07.2013