Подтвердить что ты не робот

Очень простой вопрос о Hadoop и сжатых входных файлах

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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