Я использую песочницу maprR для тестирования различных настроек в кустах и MaprF.Я получил в основном два этапа на MaprFs.Первый этап состоит из папки, в которой хранится одна таблица в формате AvroContainer-Format.Заголовок avro содержит только ссылку на внешний сохраненный файл .avsc (схема avro).Эти avro файлы были созданы flume.Оттуда я создал внешнюю таблицу в улье на основе этих файлов avro.
Затем я создал паркет и таблицу орков в качестве второго этапа с той же схемой следующим образом:
CREATE EXTERNAL TABLE prc_cpn_orc
LIKE stg_cpn
STORED AS ORC
LOCATION 'hdfs:////environments/icm/data/prc/public/cpn/orc'
TBLPROPERTIES ( "orc.compress"="snappy" );
CREATE EXTERNAL TABLE prc_cpn_prq
LIKE stg_cpn
STORED AS PARQUET
LOCATION 'hdfs:////environments/icm/data/prc/public/cpn/prq'
TBLPROPERTIES ( "parquet.compress"="snappy" );
После того, как таблицы были созданы, я вставил данные из таблицы avro:
INSERT INTO TABLE prc_cpn_orc
SELECT * FROM stg_cpn;
INSERT INTO TABLE prc_cpn_prq
SELECT * FROM stg_cpn;
Теперь начинается запутанная часть, таблица avro намного меньше, чем две другие таблицы.После всего, что я прочитал, у avro должно быть худшее сжатие.Все три формата файлов здесь используют кодек сжатия snappy.
Вот так выглядит итоговая схема таблиц для всех трех:
1 cpn_id int
2 cmpgn_id int
3 cstmr_id int
4 cpn_barcode int
5 cpn_text string
6 cpn_address string
7 cpn_phone string
8 cpn_timezone string
9 cpn_partner string
10 cpn_created_at string
Каждая таблица содержит 16 миллионов строк.
Результаты:
- Размер входной папки JSON: 3,42 ГБ (вход для Flume)
- Таблица Avro: 791,75 МБ (700 файлов, созданных Flume SerDe)
- Таблица ORC: 1,17 ГБ (6 файлов, сгенерированных Hive SerDe)
- Стол для паркета: 1,84 ГБ (6 файлов, сгенерированных Hive SerDe)
Теоретически ORC должен занимать в 2 раза меньше места, чем avro, так как же может быть наоборот в моем случае?Я что-то пропустил?