Паркет против ORC против ORC с Snappy

87

Я провожу несколько тестов форматов хранения, доступных в Hive, и использую Parquet и ORC в качестве основных опций. Я включил ORC один раз со сжатием по умолчанию и один раз с Snappy.

Я читал много документов, в которых утверждается, что Parquet лучше по сложности во времени и пространстве по сравнению с ORC, но мои тесты противоположны документам, через которые я прошел.

Следуют некоторые подробности моих данных.

Table A- Text File Format- 2.5GB

Table B - ORC - 652MB

Table C - ORC with Snappy - 802MB

Table D - Parquet - 1.9 GB

Для моего стола хуже всего было сжатие паркета.

Мои тесты с приведенными выше таблицами дали следующие результаты.

Операция подсчета строк

Text Format Cumulative CPU - 123.33 sec

Parquet Format Cumulative CPU - 204.92 sec

ORC Format Cumulative CPU - 119.99 sec 

ORC with SNAPPY Cumulative CPU - 107.05 sec

Сумма операции столбца

Text Format Cumulative CPU - 127.85 sec   

Parquet Format Cumulative CPU - 255.2 sec   

ORC Format Cumulative CPU - 120.48 sec   

ORC with SNAPPY Cumulative CPU - 98.27 sec

Среднее значение операции столбца

Text Format Cumulative CPU - 128.79 sec

Parquet Format Cumulative CPU - 211.73 sec    

ORC Format Cumulative CPU - 165.5 sec   

ORC with SNAPPY Cumulative CPU - 135.45 sec 

Выбор 4 столбцов из заданного диапазона с помощью предложения where

Text Format Cumulative CPU -  72.48 sec 

Parquet Format Cumulative CPU - 136.4 sec       

ORC Format Cumulative CPU - 96.63 sec 

ORC with SNAPPY Cumulative CPU - 82.05 sec 

Означает ли это, что ORC быстрее Parquet? Или есть что-то, что я могу сделать, чтобы он лучше работал с временем ответа на запрос и степенью сжатия?

Благодарность!

Рахул
источник
1
Не могли бы вы поделиться общим алгоритмом, использованным для этого эксперимента? Однако необходимо использовать те же данные. Но совместное использование всего остального для достижения тех же результатов с разными наборами данных может быть очень полезным, чтобы дать вам лучший ответ или доказать, что вы правы, и навсегда изменить мир.
Местре Сан
есть ли у вас какие-либо результаты Spark vs Tez с использованием orc vs parquet? из того, что я видел, похоже, что tez быстрее (в 3 раза быстрее) при использовании формата orc.
David H
+1 за хороший обзор сравнительного анализа. Во всяком случае, есть ли шанс, что вы можете предоставить обновленную версию, поскольку некоторые технические аспекты за кулисами изменились (например, как описано в ответе @jonathanChap)?
Маркус

Ответы:

52

Я бы сказал, что у обоих этих форматов есть свои преимущества.

Parquet может быть лучше, если у вас есть сильно вложенные данные, потому что он хранит свои элементы в виде дерева, как это делает Google Dremel ( см. Здесь ).
Apache ORC может быть лучше, если ваша файловая структура плоская.

И насколько мне известно, паркет пока не поддерживает Индексы. ORC поставляется с облегченным индексом, а начиная с Hive 0.14 - с дополнительным фильтром Блума, который может быть полезен для лучшего времени ответа на запрос, особенно когда речь идет о суммировании операций.

Сжатие Parquet по умолчанию - SNAPPY. Таблицы A - B - C и D содержат один и тот же набор данных? Если да, похоже, что в этом есть что-то сомнительное, когда он сжимается только до 1,9 ГБ

Фантомас
источник
2
Таблица A - Формат текстового файла - Без сжатия ......... Таблица B - Формат файла ORC со сжатием ZLIB ......... Таблица C - ORC с Snappy ....... Таблица D - Parquet with Snappy ..... Я работал над другой таблицей с ~ 150 столбцами и размером ~ 160 ГБ, чтобы проверить, как там работают форматы файлов. Parquet потребовалось 35 ГБ для хранения этих 160 ГБ данных, в то время как ORC с snappy занял 39 ГБ ... Сжатие выглядело лучше для Parquet по сравнению с тестом, о котором идет речь, но производительность снова была на том же уровне .. ORC сиял здесь даже лучшая производительность, чем комбинация ORC + SNAPPY.
Рахул
1
Структура данных для моих вариантов использования была более плоской, без вложенности. Я согласен с вашим комментарием по индексации Parquet vs ORC, и это действительно имеет значение. Есть ли у вас какие-либо результаты сравнения производительности обоих? Это может помочь успокоить мою совесть в том, что я правильно реализую форматы. :)
Рахул
Я никогда не тестировал свой набор данных на Parquet, потому что индекс был необходимым требованием, и у нас также есть плоская структура данных без вложенной информации. Я понял, что в зависимости от того, где вы храните файлы, вам нужны разные полосы и размер файла для получения наилучших результатов. Когда вы постоянно храните свои файлы в HDFS, лучше иметь файлы и полосы большего размера. "set mapred.max.split.size = 4096000000" был параметром, который я использовал, чтобы повлиять на размер файла, и оставил размер полосы до значения по умолчанию. С этим параметром он дал мне примерно 94% прироста запросов и сжатия.
PhanThomas 08
Если вы хотите хранить свои файлы на Amazon S3 в качестве холодного хранилища, гораздо меньший размер файла и полосы дал мне гораздо лучшие результаты. Я использовал файлы размером 40-60 МБ, содержащие одну полосу.
PhanThomas 08
44

Вы видите это, потому что:

  • У Hive есть векторизованный считыватель ORC, но нет векторизованного считывателя паркета.

  • В Spark есть векторизованный считыватель паркета и нет векторизованного считывателя ORC.

  • Spark лучше всего работает с паркетом, hive - с ORC.

Я видел похожие различия при запуске ORC и Parquet с Spark.

Векторизация означает, что строки декодируются партиями, что значительно улучшает локальность памяти и использование кеша.

(правильно с Hive 2.0 и Spark 2.1)

jonathanChap
источник
18
По состоянию на 2.3.0, искра действительно имеет Векторизованный ORC читатель: issues.apache.org/jira/browse/SPARK-16060
Steen
6
У Hive 2.3.0 есть векторизация Parquet reader - issues.apache.org/jira/browse/HIVE-14815
ruhong
Начиная с Spark 2.3, Spark поддерживает векторизованный считыватель ORC spark.apache.org/docs/latest/sql-data-sources-orc.html
Анураг Шарма
10

И Parquet, и ORC имеют свои преимущества и недостатки. Но я просто стараюсь следовать простому практическому правилу - «Насколько вложены ваши данные и сколько там столбцов» . Если вы следите за Google Dremel, вы можете узнать, как устроен паркет. Они используют иерархическую древовидную структуру для хранения данных. Больше гнездо, глубже дерево.

Но ORC разработан для плоского хранилища файлов. Поэтому, если ваши данные сглажены с меньшим количеством столбцов, вы можете использовать ORC, иначе паркет вам подойдет. Сжатие уплощенных данных прекрасно работает в ORC.

Мы провели сравнительный анализ большого плоского файла, преобразовали его в Spark Dataframe и сохранили в формате parquet и ORC в S3, а также выполнили запросы с помощью ** Redshift-Spectrum **.

Size of the file in parquet: ~7.5 GB and took 7 minutes to write
Size of the file in ORC: ~7.1. GB and took 6 minutes to write
Query seems faster in ORC files.

Вскоре мы проведем сравнительный анализ вложенных данных и обновим результаты здесь.

james.bondu
источник
6

Мы провели сравнительный тест, сравнивая различные форматы файлов (Avro, JSON, ORC и Parquet) в разных случаях использования.

https://www.slideshare.net/oom65/file-format-benchmarks-avro-json-orc-parquet

Все данные общедоступны, а исходный код эталонного теста открыт по адресу:

https://github.com/apache/orc/tree/branch-1.4/java/bench

Оуэн О'Мэлли
источник
5
Это действительно полезно, но должно быть оговорено, что @Owen работает на Horton Works, которая изначально разработала формат файлов ORC
Дэниел Катс,
1
Благодарность! Но вторая ссылка не работает. Не могли бы вы исправить или удалить его из своего ответа?
Данило Гомес
3

У обоих есть свои преимущества. Мы используем Parquet при работе вместе с Hive и Impala, но просто хотели указать несколько преимуществ ORC перед Parquet: во время длительных запросов, когда Hive запрашивает таблицы ORC, GC вызывается примерно в 10 раз реже . Может быть пустяком для многих проектов, но может иметь решающее значение для других.

ORC также занимает гораздо меньше времени, когда вам нужно выбрать всего несколько столбцов из таблицы. Некоторые другие запросы, особенно с объединениями, также занимают меньше времени из-за выполнения векторизованных запросов, что недоступно для Parquet.

Кроме того, сжатие ORC иногда бывает немного случайным, тогда как сжатие Parquet намного более согласованное. Похоже, когда таблица ORC имеет много столбцов с числами - она ​​тоже не сжимается. Это влияет как на zlib, так и на быстрое сжатие

Хасан Аммори
источник