Очень простой вопрос о Hadoop и сжатых входных файлах - PullRequest
19 голосов
/ 16 января 2010

Я начал изучать Hadoop. Если мое понимание правильное, я могу обработать очень большой файл, и он будет разделен на разные узлы, однако, если файл сжат, то файл не может быть разделен, и обработка одного узла должна быть выполнена (эффективно уничтожая преимущество запуск mapreduce ver кластера параллельных машин).

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

Ответы [ 4 ]

6 голосов
/ 18 сентября 2014

BZIP2 разделяется в Hadoop - он обеспечивает очень хорошую степень сжатия, но из-за времени и производительности ЦП не дает оптимальных результатов, так как сжатие очень загружает ЦП.

LZO разделяется в hadoop - используя hadoop-lzo у вас есть разделяемые сжатые файлы LZO. Вам нужно иметь внешние файлы .lzo.index для параллельной обработки. Библиотека предоставляет все средства для генерации этих индексов локальным или распределенным способом.

LZ4 разделяется в hadoop - используя hadoop-4mc у вас есть разделяемые сжатые файлы 4mc. Вам не нужна никакая внешняя индексация, и вы можете генерировать архивы с помощью предоставленного инструмента командной строки или с помощью кода Java / C, внутри / снаружи hadoop. 4mc делает доступным на hadoop LZ4 на любом уровне скорость / степень сжатия: от быстрого режима до скорости сжатия 500 МБ / с до высоких / ультра режимов, обеспечивающих повышенную степень сжатия, почти сопоставимую с GZIP.

5 голосов
/ 30 января 2010

Рассмотрите возможность использования сжатия LZO. Это разделимо. Это означает, что большой файл .lzo может обрабатываться многими картографами. Bzip2 может это сделать, но он медленный.

У Клоудеры было представление об этом. Для MapReduce LZO обеспечивает хороший баланс между степенью сжатия и скоростью сжатия / распаковки.

3 голосов
/ 16 января 2010

да, у вас может быть один большой сжатый файл или несколько сжатых файлов (несколько файлов, указанных с помощью -files или api).

TextInputFormat и его потомки должны автоматически обрабатывать сжатые файлы .gz. Вы также можете реализовать свой собственный InputFormat (который будет разбивать входной файл на куски для обработки) и RecordReader (который извлекает одну запись за раз из блока)

другой альтернативой для общего копирования может быть использование сжатой файловой системы (например, ext3 с патчем сжатия, zfs, compFUSEd или FuseCompress ...)

1 голос
/ 22 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...