2010-01-16 2 views
19

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

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

ответ

3

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

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

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

+0

Спасибо, что звук отличный. –

1

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

5

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

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

+3

LZO не расщепляется в одиночку. Вы должны запустить отдельный процесс, чтобы индексировать файлы LZO, чтобы сжатые строки блоков были правильно с входными расщеплениями. Посмотрите крошечного ребенка линии в самом конце страницы: https://github.com/kevinweil/hadoop-lzo – jerluc

+3

@Luis Но имейте в виду, что LZO лицензирован GPL, поэтому применяются обычные условия. Другой альтернативой будет использование сжатия Snappy от Google. [Google Snappy] (http://code.google.com/p/snappy/) Это упаковано по умолчанию с Hadoop (я использую 0,20.x) и другие экосистемные структуры, такие как Apache Flume и т. д., также хорошо понимают это по умолчанию. – arcamax

6

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

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

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

+3

LZ4 НЕ расщепляется в Hadoop. 4mc - это формат файла, который использует LZ4, так же как LZ4 имеет собственный формат кадра, а формат файла 4mc является разделяемым. Важно сделать это различие: фактический файл .lz4 не расщепляется в Hadoop: https://issues.apache.org/jira/browse/HADOOP-12990. –

Смежные вопросы