Я запускаю простую карту и уменьшаю задание Hadoop. Свойство mapred.reduce.tasks установлено администратором Hadoop в файле mapred-site.xml. Допустим, это 25. Теперь моя работа создает только 4 разных ключа, поэтому только 4 из 25 файлов part-r-xxxx непустые, остальные - пустые файлы. Как предотвратить это? Мне нужно столько выходных файлов, сколько произведено ключей (которое я не знаю заранее).
Спасибо.
Ответ 1 · рейтинг 1 · Charles Menguy
Я бы посоветовал использовать LazyOutputFormat:
LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class);
Это гарантирует, что ваши выходные файлы будут созданы только в том случае, если для этого редуктора есть фактические данные.
Ответ 2 · SSaikia_JtheRocker
Или вы также можете переопределить функцию needTaskCommit() класса FileOutputCommitter.
Проверьте этот блог Криса, чтобы добиться этого.