Авро против Паркет


92

Я планирую использовать один из файловых форматов hadoop для своего проекта, связанного с hadoop. Я понимаю, что паркет эффективен для запросов на основе столбцов и avro для полного сканирования или когда нам нужны все данные столбцов!

Прежде чем я продолжу и выберу один из форматов файла, я хочу понять, каковы недостатки / недостатки одного по сравнению с другим. Может ли кто-нибудь объяснить мне это простым языком?

Ответы:


53

Если вы еще не решили, я напишу схемы Avro для ваших данных. Как только это будет сделано, выбор между файлами-контейнерами Avro и файлами Parquet почти так же прост, как замена, например,

job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());

за

job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());

Формат Parquet действительно кажется немного более вычислительно интенсивным на стороне записи - например, требует RAM для буферизации и CPU для упорядочивания данных и т. Д., Но он должен снизить затраты на ввод-вывод, хранение и передачу, а также сделать для эффективного особенно читается с SQL-подобными (например, Hive или SparkSQL) запросами, которые обращаются только к части столбцов.

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

У меня еще не было много шансов использовать Parquet для получения более нормализованных / разумных данных, но я понимаю, что при правильном использовании он позволяет значительно улучшить производительность.


2
Parquet также поддерживает вложенные наборы данных / коллекции.
Tagar

@Ruslan: Да, технически он поддерживал вложенные структуры. Проблема заключалась в очень большом количестве столбцов из-за обширной денормализации данных. Это сработало, но было очень медленно.
пароход25 08

4
Да, запись данных в паркет дороже. Чтение - это наоборот, особенно если ваши запросы обычно читают подмножество столбцов.
Tagar

4
Я думаю, что Parquet подходит для большинства случаев использования, за исключением того, что данные в одном столбце сильно различаются и всегда анализируются почти во всех столбцах.
Rockie Yang

Apache Arrow также пока не поддерживает смешанное вложение (списки со словарями или словари со списками). Итак, если вы хотите работать со сложным вложением в Parquet, вы застряли на Spark, Hive и т. Д. И таких инструментах, которые не полагаются на Arrow для чтения и записи Parquet.
Иосия

49

Avro - это формат на основе строк. Если вы хотите получить данные в целом, вы можете использовать Avro

Паркет - это формат на основе столбцов. Если ваши данные состоят из большого количества столбцов, но вас интересует подмножество столбцов, вы можете использовать Parquet.

HBase полезен, когда требуется частое обновление данных. Avro быстро находит, Паркет намного быстрее.


7
Пожалуйста, исправьте ваши 2 последних предложения в последнем абзаце. Они совершенно непонятны.
Cbhihe

39

Авро

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

Паркет

  • Столбцовый двоичный формат файла
  • Использует алгоритм измельчения и сборки записей, описанный в документе Dremel.
  • Каждый файл данных содержит значения для набора строк
  • Эффективен с точки зрения дискового ввода-вывода, когда необходимо запрашивать определенные столбцы

От выбора формата хранения данных HDFS - Avro против Parquet и др.


30

И Avro, и Parquet являются форматами хранения с «самоописанием», что означает, что оба встраивают данные, информацию метаданных и схему при хранении данных в файле. Использование любого из форматов хранения зависит от варианта использования. Три аспекта составляют основу, на которой вы можете выбрать, какой формат будет оптимальным в вашем случае:

  1. Операция чтения / записи : Parquet - это формат файла на основе столбцов. Поддерживает индексацию. По этой причине он подходит для однократной записи и интенсивного чтения, сложных или аналитических запросов, запросов данных с малой задержкой. Обычно это используется конечными пользователями / специалистами по данным.
    Между тем, Avro, будучи строковым форматом файлов, лучше всего подходит для операций с интенсивной записью. Обычно это используется инженерами данных. Оба поддерживают форматы сериализации и сжатия, хотя делают это по-разному.

  2. Инструменты : Паркет хорошо подходит для Impala. (Impala - это механизм SQL-запросов RDBM с массивной параллельной обработкой (MPP), который знает, как работать с данными, которые находятся в одном или нескольких внешних механизмах хранения.) И снова Parquet хорошо поддается сложным / интерактивным запросам и быстро (с малой задержкой) ) выводит данные в HDFS. Это поддерживается CDH (Cloudera Distribution Hadoop). Hadoop поддерживает форматы оптимизированных столбцов строк (ORC) Apache (выбор зависит от распределения Hadoop), тогда как Avro лучше всего подходит для обработки Spark.

  3. Эволюция схемы : развитие схемы БД означает изменение структуры БД, следовательно, ее данных и, следовательно, обработки запросов.
    И Parquet, и Avro поддерживают эволюцию схемы, но в разной степени.
    Parquet подходит для операций добавления, например добавления столбцов, но не для переименования столбцов, если только «чтение» не выполняется по индексу.
    Avro лучше подходит для добавления, удаления и общего изменения столбцов, чем Parquet. Исторически Avro предоставляла более богатый набор возможностей развития схемы, чем Parquet, и, хотя их возможности развития схемы имеют тенденцию к размытию, Avro по-прежнему выделяется в этой области по сравнению с Parquet.


5
Часть «Инструменты» немного вводит в заблуждение. Parquet эффективно используется многими другими фреймворками, такими как Spark, Presto, Hive и т. Д. Avro не является специфическим для Spark, он широко используется в качестве формата хранения HDFS и сценариев передачи сообщений, как в Kafka.
ᐅ devrimbaris

2
Аакаш Аггарвал: Можете ли вы объяснить, что вы имеете в виду в параграфе 2, говоря «Avro лучше всего подходит для обработки Spark»? Как упомянул devrimbaris, Parquet также очень хорошо интегрирован в среду обработки Spark. о_О?!?
Cbhihe

11

Ваше понимание правильное. Фактически, мы столкнулись с аналогичной ситуацией во время миграции данных в нашем DWH. Мы выбрали Parquet вместо Avro, поскольку экономия на диске была почти вдвое больше, чем при использовании AVro. Кроме того, время обработки запросов было намного лучше, чем у Avro. Но да, наши запросы основывались на агрегировании, операциях на основе столбцов и т. Д., Поэтому Parquet предсказуемо оказался явным победителем.

Мы используем Hive 0.12 из дистрибутива CDH. Вы упомянули, что у вас проблемы с Hive + Parquet, что это? Мы не встретили ни одного.


3

Silver Blaze красиво добавил описание к примеру использования и рассказал, что Parquet был для него лучшим выбором. Имеет смысл рассмотреть одно над другим в зависимости от ваших требований. Я также помещаю краткое описание различных других форматов файлов, а также сравнение сложности во времени. Надеюсь, это поможет.

Существует множество форматов файлов, которые вы можете использовать в Hive. Особо следует отметить АВРО, Паркет. RCFile и ORC. В Интернете есть несколько хороших документов, к которым вы можете обратиться, если хотите сравнить производительность и использование пространства этими форматами файлов. Переход по некоторым полезным ссылкам, которые помогут вам начать работу.

Это сообщение в блоге

Эта ссылка с MapR [Паркет они не обсуждают]

Эта ссылка из Inquidia

Приведенные выше ссылки помогут вам в этом. Надеюсь, это ответ на ваш вопрос.

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


0

Описание Parquet можно найти здесь: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html

Я собираюсь очень скоро написать об Avro, а также провести сравнение между двумя. Выложу здесь, когда закончишь.


Жду сравнения. В настоящее время я выбрал Avro для своего проекта, так как у паркета есть проблемы с совместимостью с ульем :)
Абхишек

1
@Abshinek, не могли бы вы предоставить некоторую информацию о проблемах совместимости с hive и avro
EB

@EB Никаких проблем быть не должно, если есть, они будут упомянуты на cwiki.apache.org/confluence/display/Hive/AvroSerDe
OneCricketeer
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.