Предоставление нескольких нетекстовых файлов для одной карты в Hadoop MapReduce - PullRequest
2 голосов
/ 27 февраля 2011

В настоящее время я пишу распределенное приложение, которое анализирует PDF-файлы с помощью Hadoop MapReduce.Входные данные для задания MapReduce - это тысячи файлов PDF (которые в основном варьируются от 100 КБ до ~ 2 МБ), а выходные данные - это набор проанализированных текстовых файлов.

Для целей тестирования первоначально я использовал WholeFileInputFormat, предоставленный Томом Уайтом Hadoop.Подробное руководство книга, которая предоставляет один файл на одну карту.Это работало хорошо с небольшим количеством входных файлов, однако, это не работает должным образом с тысячами файлов по очевидным причинам.Единая карта для задачи, выполнение которой занимает около секунды, неэффективна.

Итак, я хочу отправить несколько файлов PDF в одну карту (например, объединить несколько файлов в один фрагмент, размер блока HDFS которого составляет ~ 64 МБ).Я узнал, что CombineFileInputFormat полезно для моего случая.Однако я не могу придумать, как расширить этот абстрактный класс, чтобы я мог обрабатывать каждый файл и его имя файла как одну запись значения ключа.

Любая помощь приветствуется.Спасибо!

Ответы [ 2 ]

1 голос
/ 27 февраля 2011

Я думаю, что SequenceFile подойдет вам здесь: http://wiki.apache.org/hadoop/SequenceFile

По сути, вы помещаете все свои PDF-файлы в файл последовательности, и преобразователи получают столько PDF-файлов, сколько умещается в один блок HDFS файла последовательности. При создании файла последовательности вы зададите ключом имя файла PDF, а значением будет двоичное представление PDF.

0 голосов
/ 28 февраля 2011

Вы можете создавать текстовые файлы с HDFS-патчами к вашим файлам и использовать их в качестве входных данных.Это даст Вашему картографу возможность многократного использования для многих файлов, но будет стоить локальность данных.Если ваши данные относительно малы, высокий коэффициент репликации (близкий к числу узлов данных) решит проблему.

...