Это 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==