2015-03-10 5 views
42

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

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

ответ

0

Только для описания на паркет, вы можете обратиться сюда: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html

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

+0

Ожидание сравнения. В настоящее время я выбрал Avro для моего проекта, поскольку у паркета есть проблемы с уловкой :) – Abhishek

+0

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

+0

@EB Не должно быть никаких проблем, если они есть, они будут упомянутый в https://cwiki.apache.org/confluence/display/Hive/AvroSerDe –

32

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

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

для

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

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

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

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

+1

Паркет поддерживает вложенные наборы данных и коллекции. – Tagar

+0

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

+1

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

5

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

2

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

Есть куча форматов файлов, которые вы можете использовать в Hive. Примечательными упоминаниями являются AVRO, Parquet. RCFile & ORC. В Интернете есть несколько хороших документов, на которые вы можете ссылаться, если вы хотите сравнить производительность и использование пространства этих форматов файлов. Следуйте за некоторыми полезными ссылками, которые помогут вам в этом.

This Blog Post

This link from MapR [They don't discuss Parquet though]

This link from Inquidia

Вышеприведенные ссылки поможет вам идти. Надеюсь, это ответит на ваш запрос.

Спасибо!

25

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

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

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

6

Avro

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

паркет

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

от Choosing an HDFS data storage format- Avro vs. Parquet and more

1

Использование обоих форматов зависит от варианта использования. На основе 3-х факторов, мы можем выбрать, какой формат будет выбрать в нашем случае:

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

  2. Инструменты: Паркет лучше всего подходит для Impala (имеет двигатель MPP), поскольку он отвечает за сложные/интерактивные запросы и малые задержки. Это поддерживается CDH. Подобно этому HDP поддерживает форматы ORC (выбор также зависит от распределения hadoop). В то время как Avro лучше всего подходит для обработки искры.

  3. Schema Evolution: означает изменение схемы данных по преобразованию и обработке. Как Parquet, так и Avro поддерживают эволюцию схемы, но в определенной степени. Сравнительно, Avro обеспечивает намного более богатую эволюцию Схемы. Паркет хорош, когда у нас есть некоторые операции добавления, такие как добавление столбцов, но Avro подходит как для операций добавления, так и для модификации. Здесь Авро сияет лучше, чем Паркет.

Смежные вопросы