Это 8-й день моего участия в августовском испытании обновлений.Подробности о событии:Испытание августовского обновления
алгоритм сжатия данных
Распространенными форматами сжатия в области больших данных являются gzip, snappy, lzo, lz4, bzip2, zstd.
Почему сжатие данных?
Чтобы оптимизировать хранилище (уменьшить место для хранения) и полностью использовать пропускную способность сети, часто используются методы сжатия. Большие данные должны работать с огромными объемами данных, и в настоящее время очень важно сжатие данных.
Во многих сценариях, существующих на предприятии, источником данных часто являются данные в нескольких текстовых форматах (CSV, TSV, XML, JSON и т. д.). Эти файлы удобочитаемы для человека, но занимают много места для хранения.
Однако при обработке больших данных данные должны быть как можно более машиночитаемыми. Сжатие этих удобочитаемых данных в машиночитаемые данные с использованием методов сериализованного сжатия гарантирует, что для хранения потребуется гораздо меньше места.
Вот некоторые хорошо известные широко используемые форматы сжатия (называемые кодеками, которые позволяют сжимать/сериализовать и декомпрессировать/десериализовать данные).
Gzip (расширение .gz)
А именно GNU Zip (GZip), хорошо известный формат сжатия, широко используемый в мире Интернета. Запросы и ответы могут быть сжаты с использованием этого формата для эффективного использования полосы пропускания веб-сайта/веб-приложения.
преимущество
Сжатие относительно высокое, и сам hadoop поддерживает его.Обработка файлов в формате gzip в приложении аналогична обработке текста напрямую.Присутствует нативная библиотека hadoop.Большинство Linux-систем имеют свои собственные команды gzip, которые просты в использовании.
недостаток
Разделение не поддерживается
что такое родной для хаупа?
Из-за проблем с производительностью и отсутствия некоторых библиотек классов Java Hadoop предоставляет собственную реализацию для некоторых компонентов. Эти компоненты хранятся в отдельной динамически подключаемой библиотеке в Hadoop. Эта библиотека называется libhadoop.so на платформах Unix.
Snappy (расширение .snappy)
Кодек, разработанный Google (ранее называвшийся Zippy), считается лучшим среди средних коэффициентов сжатия. Для этого формата производительность важнее степени сжатия. Snappy — один из наиболее широко используемых форматов, очевидно, из-за его отличной производительности.
преимущество
Быстрое сжатие; поддержка собственной библиотеки Hadoop
недостаток
Split не поддерживается, степень сжатия низкая, сам hadoop не поддерживается и требует установки, под linux-системой нет соответствующей команды
ЛЗО (расширение .lzo)
Под лицензией GNU Public License (GPL), очень похожей на Snappy, он имеет умеренную степень сжатия и высокую производительность сжатия и распаковки. LZO — это алгоритм сжатия данных без потерь, ориентированный на скорость распаковки.
преимущество
Скорость сжатия/распаковки также относительно высока, с разумной степенью сжатия; он поддерживает разделение, которое является наиболее популярным форматом сжатия в Hadoop; он поддерживает нативную библиотеку Hadoop; вам необходимо установить команду lzop в системе Linux, которая прост в использовании
недостаток
Сам Hadoop не поддерживает его, и его необходимо установить; хотя lzo поддерживает разделение, ему необходимо построить индекс для файла lzo, в противном случае hadoop также будет рассматривать файл lzo как обычный файл (для поддержки разделения индексу необходимо должен быть построен, а InputFormat должен быть указан как формат lzo).
LZ4 (расширение .lz4)
преимущество
Хорошая производительность, высокая степень сжатия, хорошая начальная скорость инициализации, хорошая скорость сжатия и стабильность
недостаток
- Распаковка lz4 более проблематична, и необходимо указать размер исходного массива байтов, поэтому рабочая нагрузка разработки больше.
- Разделение не поддерживается
Bzip2 (расширение .bz2)
Более или менее похоже на GZip, степень сжатия выше, чем у GZip. Но, как и ожидалось, Bzip2 распаковывает данные медленнее, чем GZip. Одним из важных аспектов является то, что он поддерживаетсегментация данных, что очень важно при использовании HDFS в качестве хранилища. Это сжатие было бы хорошим выбором, если данные просто сохраняются без запроса.
преимущество:
Поддержка разделения; имеет высокую степень сжатия, выше, чем у gzip; сам Hadoop поддерживает, но не поддерживает родной; поставляется с командой bzip2 в системе Linux, прост в использовании
недостаток:
Медленное сжатие/распаковка; нет встроенной поддержки
zstd (расширение .zstd)
Zstd — это новый алгоритм сжатия без потерь, открытый исходным кодом Facebook в 2016 году. Преимущество заключается в том, что коэффициент сжатия и производительность сжатия/распаковки выдающиеся. В zstd также есть специальная функция, поддерживающая создание файлов словарей в режиме обучения, что может значительно улучшить степень сжатия небольших пакетов данных по сравнению с традиционными методами сжатия.
- Для сценариев сжатия текста с большими объемами данных лучше всего подходит zstd, учитывая коэффициент сжатия и производительность сжатия, за которым следует lz4.
- Для сценариев сжатия с небольшими объемами данных, если можно использовать метод словаря zstd, эффект сжатия будет более заметным.
- Поддержка разделена, но не идеальна, детали видны——Is zstd splitabble in hadoop/spark/etc?
Инструкции по сжатию данных
Оценка сжатого режима
- Методы компрессии можно оценить по следующим трем критериям.
- Степень сжатия: Чем выше степень сжатия, тем меньше сжатый файл, поэтому чем выше степень сжатия, тем лучше.
- Время сжатия: чем быстрее, тем лучше
- Можно ли разделить файл сжатого формата: разделяемый формат позволяет обрабатывать один файл несколькими программами Mapper, которые могут быть лучше распараллелены.
Распространенные форматы сжатия
В сравнении
Метод сжатия | коэффициент сжатия | Скорость сжатия | скорость декомпрессии | Это отделимо |
---|---|---|---|---|
gzip | 13.4% | 21 MB/s | 118 MB/s | нет |
bzip2 | 13.2% | 2.4MB/s | 9.5MB/s | да |
lzo | 20.5% | 135 MB/s | 410 MB/s | да |
snappy | 22.2% | 172 MB/s | 409 MB/s | нет |
Метод кодировщика/декодера Hadoop
Формат сжатия | Соответствующий кодер/декодер |
---|---|
DEFLATE | org.apache.hadoop.io.compress.DefaultCodec |
Gzip | org.apache.hadoop.io.compress.GzipCodec |
BZip2 | org.apache.hadoop.io.compress.BZip2Codec |
LZO | com.hadoop.compress.lzo.LzopCodec |
Snappy | org.apache.hadoop.io.compress.SnappyCodec |
использование сжатия данных
Сжатие промежуточных данных таблицы Hive
#设置为true为激活中间数据压缩功能,默认是false,没有开启
set hive.exec.compress.intermediate=true;
#设置中间数据的压缩算法
set mapred.map.output.compression.codec= org.apache.hadoop.io.compress.SnappyCodec;
Сжатие конечного результата таблицы Hive
set hive.exec.compress.output=true;
set mapred.output.compression.codec=
org.apache.hadoop.io.compress.SnappyCodec;