Обработка файлов с помощью Elastic MapReduce - Нет шага восстановления? - PullRequest
1 голос
/ 26 июля 2010

У меня большой набор текстовых файлов в каталоге S3. Для каждого текстового файла я хочу применить функцию (исполняемый файл, загруженный при начальной загрузке), а затем записать результаты в другой текстовый файл с тем же именем в выходной каталог на S3. Так что в моей работе с MapReduce нет очевидного шага сокращения.

Я пытался использовать NONE в качестве редуктора, но выходной каталог заполняется такими файлами, как part-00000, part-00001 и т. Д. И таких файлов больше, чем файлов в моем входном каталоге; каждая часть файла представляет собой только обработанный фрагмент.

Любой совет приветствуется.

Ответы [ 3 ]

4 голосов
/ 26 июля 2010

Hadoop предоставляет редуктор, называемый Identity Reducer.

Identity Reducer буквально выводит все, что потребовалось (это отношение идентичности). Это то, что вы хотите сделать, и если вы не укажете редуктор, система Hadoop автоматически использует этот редуктор для ваших задач. То же самое верно для потоковой передачи Hadoop. Этот редуктор используется именно для того, что вы описали, что вы делаете.

Я никогда не запускал задание, которое не выводило файлы как часть - ####. Я провел некоторое исследование и обнаружил, что вы можете делать то, что вы хотите, создав подкласс класса OutputFormat. Вы можете увидеть, что я нашел здесь: http://wiki.apache.org/hadoop/FAQ#A27. Извините, у меня нет примера.

Для размещения своих источников я узнал большую часть этого из книги Тома Уайта: http://www.hadoopbook.com/.

0 голосов
/ 01 сентября 2011

Вам не нужно иметь редуктор.Вы можете установить число редукторов равным 0 на этапе настройки задания, например,

job.setNumReduceTasks(0);

Кроме того, чтобы гарантировать, что каждый преобразователь обрабатывает один полный входной файл, вы можете указать hadoop, что входные файлы не являются разделяемыми.FileInputFormat имеет метод

protected boolean isSplitable(JobContext context, Path filename)

, который можно использовать для пометки файла как нерасщепляемого, что означает, что он будет обрабатываться одним сопоставителем.См. здесь для документации.Я просто перечитал ваш вопрос и понял, что ваши входные данные - это, вероятно, файл со списком имен файлов, поэтому вы, скорее всего, захотите разделить его, или он будет выполняться только одним картографом.

ЧтоЯ хотел бы сделать в вашей ситуации есть вход, который представляет собой список имен файлов в s3.В этом случае вход mapper - это имя файла, которое загружает и запускает ваш exe-файл.Выходные данные этого exe-запуска затем загружаются на s3, и преобразователь переходит к следующему файлу.Тогда мапперу не нужно ничего выводить.Хотя было бы неплохо вывести обработанное имя файла, чтобы потом можно было проверить его по вводу.Используя только что описанный метод, вам не нужно использовать метод isSplitable.

0 голосов
/ 26 июля 2010

Из того, что я читал о hadoop, я понял, что вам нужен редуктор, даже если он не изменяет выходные данные картографических машин только для объединения выходных данных картографических систем

...