Я недавно установил сжатие в кластере. Другие посты имеют полезные ссылки, но фактический код, который вы хотите получить для работы LZO-сжатия, находится здесь: https://github.com/kevinweil/hadoop-lzo.
Вы можете прямо из коробки использовать сжатие GZIP, сжатие BZIP2 и сжатие Unix. Просто загрузите файл в одном из этих форматов. При использовании файла в качестве входных данных для задания вам нужно будет указать, что файл сжат, а также соответствующий кодек. Вот пример для сжатия LZO.
-jobconf mapred.output.compress=true
-jobconf mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec
Почему я продолжаю использовать сжатие LZO? Ссылка cloudera на статью от Praveen включает в себя это. Сжатие LZO является разделяемым сжатием (в отличие, например, от GZIP). Это означает, что один файл может быть разбит на куски для передачи картографу. Без разделяемого сжатого файла один маппер получит весь файл. Это может привести к тому, что у вас будет слишком мало картографов и слишком много данных будет передаваться по вашей сети.
BZIP2 также можно разделить. Он также имеет более высокую степень сжатия, чем LZO. Тем не менее, это очень медленно. У LZO степень сжатия хуже, чем у GZIP. Однако он оптимизирован, чтобы быть чрезвычайно быстрым Фактически это может даже повысить производительность вашей работы за счет минимизации дискового ввода-вывода.
Требуется немного усилий для настройки, и это немного трудновато, но оно того стоит (прозрачное шифрование было бы здорово). Еще раз, шаги:
- Установить LZO и LZOP (утилита командной строки)
- Установка hadoop-lzo
- Загрузить файл, сжатый с помощью LZOP.
- Индексируйте файл, как описано вики-хадом-lzo (индекс позволяет его разбивать).
- Запустите свою работу (с правильными параметрами mapred.output.compress и mapred.output.compression.code)