Как выбрать формат хранения файлов Hive?

Apache Hive

Это 8-й день моего участия в августовском испытании обновлений.Подробности о событии:Испытание августовского обновления

текст

инструкция

  • Общие форматы хранения данных, поддерживаемые Hive: TEXTFILE, SEQUENCEFILE, ORC, PARQUET.
  • Поскольку TextFile является форматом по умолчанию, невозможно скопировать файл данных непосредственно в HDFS при импорте данных.
  • Таблицы в формате SEQUENCEFILE, ORC, PARQUET не могут напрямую импортировать данные из локальных файлов, а затем использовать вставку для импорта из таблицы TEXTFILE в таблицу SEQUENCEFILE, ORC, PARQUET.
  • Формат хранения TEXTFILE и SEQUENCEFILE основан на хранении строк;
  • ORC и PARQUET основаны на колоночном хранении.

Для получения дополнительной информации о SEQUENCEFILE, пожалуйста, обратитесь к моему блогу -Что такое SequenceFile? как пользоваться?

Подробнее об ORC читайте в моем блоге -Что такое ORCFile?

Чтобы узнать больше о ПАРКЕТЕ, пожалуйста, обратитесь к моему блогу -Что такое паркет

Для получения дополнительной информации об AVRO, пожалуйста, обратитесь к моему блогу -Что такое Апач Авро?

Все форматы хранения файлов, поддерживаемые Hive

формат хранения описывать
STORED AS TEXTFILE Хранится как обычный текстовый файл. TEXTFILE — это формат файла по умолчанию, если параметр конфигурации hive.default.fileformat не установлен иначе. Используйте предложение DELIMITED для чтения файлов с разделителями. Используйте предложение "ESCAPED BY" (например, ESCAPED BY ''), чтобы включить экранирование для разделителей, если вы хотите обрабатывать данные, содержащие эти разделители, вам нужно экранирование. Пользовательский формат NULL также можно указать с помощью предложения «NULL DEFINED AS» (по умолчанию «\N»). (Hive4.0) Предполагается, что все двоичные столбцы в таблицах закодированы в base64. Чтобы прочитать данные в виде необработанных байтов: TBLPROPERTIES("hive.serialization.decode.binary.as.base64"="false")
STORED AS SEQUENCEFILE Хранится как сжатый файл последовательности.
STORED AS ORC Хранится в формате файла ORC. Поддерживаются ACID-транзакции и оптимизатор затрат (CBO). Хранит метаданные на уровне столбцов.
STORED AS PARQUET Хранится в формате Parquet для столбцового формата хранения Parquet в Hive 0.13.0 и более поздних версиях; в Hive 0.10, 0.11 или 0.12 используется синтаксис Use ROW FORMAT SERDE ... STORED AS INPUTFORMAT ... OUTPUTFORMAT
STORED AS AVRO Хранить в формате Avro в Hive 0.14.0 и более поздних версиях
STORED AS RCFILE Хранится в формате файла столбца записи.
STORED AS JSONFILE Хранится в формате файла Json в Hive 4.0.0 и более поздних версиях.
STORED BY Хранить в неродном формате таблицы. Создайте или свяжите неродные таблицы, например, поддерживаемые HBase, Druid или Accumulo.
INPUTFORMAT and OUTPUTFORMAT В file_format укажите имена соответствующих классов InputFormat и OutputFormat в виде строковых литералов. Например, «org.apache.hadoop.hive.contrib.fileformat.base64. Base64TextInputFormat». Для сжатия LZO следует использовать значение 'INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat", выходной формат "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"

Сравнение форматов хранения файлов

1. Проверка степени сжатия сохраненных файлов

1.1 Данные испытаний

Тестовые данные

Размер log.txt составляет 18,1 МБ.

1.2 TEXTFILE

  • Создайте таблицу и сохраните данные в формате TEXTFILE
create table log_text (
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as  TEXTFILE ;
  • Загрузить данные в таблицу
load data local inpath '/home/hadoop/log.txt' into table log_text ;
  • Просмотр размера данных таблицы
dfs -du -h /user/hive/warehouse/log_text;

+------------------------------------------------+--+
|                   DFS Output                   |
+------------------------------------------------+--+
| 18.1 M  /user/hive/warehouse/log_text/log.txt  |
+------------------------------------------------+--+

1.3 PARQUET

  • Создайте таблицу и сохраните данные в формате PARQUET
create table log_parquet  (
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as PARQUET;
  • Загрузить данные в таблицу
insert into table log_parquet select * from log_text;
  • Просмотр размера данных таблицы
dfs -du -h /user/hive/warehouse/log_parquet;

+----------------------------------------------------+--+
|                     DFS Output                     |
+----------------------------------------------------+--+
| 13.1 M  /user/hive/warehouse/log_parquet/000000_0  |
+----------------------------------------------------+--+

1.4 ORC

  • Создайте таблицу и сохраните данные в формате ORC
create table log_orc  (
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as ORC  ;
  • Загрузить данные в таблицу
insert into table log_orc select * from log_text ;
  • Просмотр размера данных таблицы
dfs -du -h /user/hive/warehouse/log_orc;
+-----------------------------------------------+--+
|                  DFS Output                   |
+-----------------------------------------------+--+
| 2.8 M  /user/hive/warehouse/log_orc/000000_0  |
+-----------------------------------------------+--+

1.5 Сводная информация о степени сжатия сохраненных файлов

ORC >  PARQUET >   TEXTFILE

2. Тест скорости запроса сохраненных файлов

2.1 TEXTFILE

select count(*) from log_text;
+---------+--+
|   _c0   |
+---------+--+
| 100000  |
+---------+--+
1 row selected (16.99 seconds)

2.2 PARQUET

select count(*) from log_parquet;
+---------+--+
|   _c0   |
+---------+--+
| 100000  |
+---------+--+
1 row selected (17.994 seconds)

2.3 ORC

select count(*) from log_orc;
+---------+--+
|   _c0   |
+---------+--+
| 100000  |
+---------+--+
1 row selected (15.943 seconds)

2.4 Сводная информация о скорости запроса сохраненных файлов

ORC >  TEXTFILE > PARQUET

3, сочетание хранения и сжатия

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

  • ORC поддерживает три вида сжатия: ZLIB, SNAPPY, NONE. Последнее не имеет сжатия, == ORC использует сжатие ZLIB == по умолчанию.

3.1 Создайте несжатую таблицу хранения ORC

  • 1. Создайте несжатую таблицу ORC
create table log_orc_none (
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as ORC tblproperties("ORC.compress"="NONE") ;
  • 2. Загрузите данные
insert into table log_orc_none select * from log_text ;
  • 3. Просмотр размера данных таблицы
dfs -du -h /user/hive/warehouse/log_orc_none;
+----------------------------------------------------+--+
|                     DFS Output                     |
+----------------------------------------------------+--+
| 7.7 M  /user/hive/warehouse/log_orc_none/000000_0  |
+----------------------------------------------------+--+

3.2 Создайте мгновенную сжатую таблицу хранения ORC

  • 1. Создайте быструю сжатую таблицу ORC
create table log_orc_snappy (
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as ORC tblproperties("ORC.compress"="SNAPPY") ;
  • 2. Загрузите данные
insert into table log_orc_snappy select * from log_text ;
  • 3. Просмотр размера данных таблицы
dfs -du -h /user/hive/warehouse/log_orc_snappy;
+------------------------------------------------------+--+
|                      DFS Output                      |
+------------------------------------------------------+--+
| 3.8 M  /user/hive/warehouse/log_orc_snappy/000000_0  |
+------------------------------------------------------+--+

3.3 Создайте сжатую таблицу хранения ORC ZLIB

  • Если формат сжатия не указан, по умолчанию используется сжатие ZLIB.
  • Вы можете обратиться к таблице log_orc, созданной выше.
  • Просмотр размера данных таблицы
dfs -du -h /user/hive/warehouse/log_orc;
+-----------------------------------------------+--+
|                  DFS Output                   |
+-----------------------------------------------+--+
| 2.8 M  /user/hive/warehouse/log_orc/000000_0  |
+-----------------------------------------------+--+

Сводка по хранению и сжатию

  • Метод сжатия ORC по умолчанию ZLIB меньше, чем метод сжатия Snappy.
  • При разработке реального проекта обычно выбирается формат хранения данных таблицы куста: ==ORC или PARQUET==.
  • Поскольку эффективность сжатия и распаковки snappy относительно высока, == метод сжатия обычно выбирает snappy==