Вам не нужно иметь редуктор.Вы можете установить число редукторов равным 0 на этапе настройки задания, например,
job.setNumReduceTasks(0);
Кроме того, чтобы гарантировать, что каждый преобразователь обрабатывает один полный входной файл, вы можете указать hadoop, что входные файлы не являются разделяемыми.FileInputFormat имеет метод
protected boolean isSplitable(JobContext context, Path filename)
, который можно использовать для пометки файла как нерасщепляемого, что означает, что он будет обрабатываться одним сопоставителем.См. здесь для документации.Я просто перечитал ваш вопрос и понял, что ваши входные данные - это, вероятно, файл со списком имен файлов, поэтому вы, скорее всего, захотите разделить его, или он будет выполняться только одним картографом.
ЧтоЯ хотел бы сделать в вашей ситуации есть вход, который представляет собой список имен файлов в s3.В этом случае вход mapper - это имя файла, которое загружает и запускает ваш exe-файл.Выходные данные этого exe-запуска затем загружаются на s3, и преобразователь переходит к следующему файлу.Тогда мапперу не нужно ничего выводить.Хотя было бы неплохо вывести обработанное имя файла, чтобы потом можно было проверить его по вводу.Используя только что описанный метод, вам не нужно использовать метод isSplitable.