Я начал изучать Hadoop. Если бы мое понимание является правильным, что я мог бы обработать очень большой файл, и оно разделить по различным узлам, однако если файл сжат затем, файл не мог бы быть разделен, и пустошь должна быть обработана единственным узлом (эффективно уничтожающий преимущество выполнения mapreduce ver кластер параллельных машин).
Мой вопрос, предполагая, что вышеупомянутое корректно, действительно ли это возможно разделить большой файл вручную в блоках фиксированного размера или ежедневно разделяет на блоки, сожмите их и затем передайте список сжатых входных файлов для выполнения mapreduce?
Да, у вас может быть один большой сжатый файл или несколько сжатых файлов (несколько файлов, указанных с -files или API).
TextInputFormat и потомки должны автоматически обрабатывать сжатые файлы .gz. Вы также можете реализовать свой собственный Intformat (который разделяет входной файл в куски для обработки) и rendReader (который извлекает одну запись одновременно из чанка)
Для общего Copmression может быть использование сжатой файловой системы (например, Ext3 с патч сжатия, ZFS, Compfused или FuseCompress ...)
Вы можете использовать BZ2 в качестве Compress Codec, и этот формат также может быть разделен.
Рассмотрим использование сжатия LZO. Это splittable. Это означает, что большой файл .lzo может быть обработан многими Mappers. BZIP2 может сделать это, но это медленно.
Клузда имел введение . Для Maprecuce LZO звучит хороший баланс между соотношением сжатия и скоростью сжимания / распаковки.