Если вы еще не решили, я напишу схемы 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 для получения более нормализованных / разумных данных, но я понимаю, что при правильном использовании он позволяет значительно улучшить производительность.
Avro - это формат на основе строк. Если вы хотите получить данные в целом, вы можете использовать Avro
Паркет - это формат на основе столбцов. Если ваши данные состоят из большого количества столбцов, но вас интересует подмножество столбцов, вы можете использовать Parquet.
HBase полезен, когда требуется частое обновление данных. Avro быстро находит, Паркет намного быстрее.
источник
Авро
Паркет
От выбора формата хранения данных HDFS - Avro против Parquet и др.
источник
И Avro, и Parquet являются форматами хранения с «самоописанием», что означает, что оба встраивают данные, информацию метаданных и схему при хранении данных в файле. Использование любого из форматов хранения зависит от варианта использования. Три аспекта составляют основу, на которой вы можете выбрать, какой формат будет оптимальным в вашем случае:
Операция чтения / записи : Parquet - это формат файла на основе столбцов. Поддерживает индексацию. По этой причине он подходит для однократной записи и интенсивного чтения, сложных или аналитических запросов, запросов данных с малой задержкой. Обычно это используется конечными пользователями / специалистами по данным.
Между тем, Avro, будучи строковым форматом файлов, лучше всего подходит для операций с интенсивной записью. Обычно это используется инженерами данных. Оба поддерживают форматы сериализации и сжатия, хотя делают это по-разному.
Инструменты : Паркет хорошо подходит для Impala. (Impala - это механизм SQL-запросов RDBM с массивной параллельной обработкой (MPP), который знает, как работать с данными, которые находятся в одном или нескольких внешних механизмах хранения.) И снова Parquet хорошо поддается сложным / интерактивным запросам и быстро (с малой задержкой) ) выводит данные в HDFS. Это поддерживается CDH (Cloudera Distribution Hadoop). Hadoop поддерживает форматы оптимизированных столбцов строк (ORC) Apache (выбор зависит от распределения Hadoop), тогда как Avro лучше всего подходит для обработки Spark.
Эволюция схемы : развитие схемы БД означает изменение структуры БД, следовательно, ее данных и, следовательно, обработки запросов.
И Parquet, и Avro поддерживают эволюцию схемы, но в разной степени.
Parquet подходит для операций добавления, например добавления столбцов, но не для переименования столбцов, если только «чтение» не выполняется по индексу.
Avro лучше подходит для добавления, удаления и общего изменения столбцов, чем Parquet. Исторически Avro предоставляла более богатый набор возможностей развития схемы, чем Parquet, и, хотя их возможности развития схемы имеют тенденцию к размытию, Avro по-прежнему выделяется в этой области по сравнению с Parquet.
источник
Ваше понимание правильное. Фактически, мы столкнулись с аналогичной ситуацией во время миграции данных в нашем DWH. Мы выбрали Parquet вместо Avro, поскольку экономия на диске была почти вдвое больше, чем при использовании AVro. Кроме того, время обработки запросов было намного лучше, чем у Avro. Но да, наши запросы основывались на агрегировании, операциях на основе столбцов и т. Д., Поэтому Parquet предсказуемо оказался явным победителем.
Мы используем Hive 0.12 из дистрибутива CDH. Вы упомянули, что у вас проблемы с Hive + Parquet, что это? Мы не встретили ни одного.
источник
Silver Blaze красиво добавил описание к примеру использования и рассказал, что Parquet был для него лучшим выбором. Имеет смысл рассмотреть одно над другим в зависимости от ваших требований. Я также помещаю краткое описание различных других форматов файлов, а также сравнение сложности во времени. Надеюсь, это поможет.
Существует множество форматов файлов, которые вы можете использовать в Hive. Особо следует отметить АВРО, Паркет. RCFile и ORC. В Интернете есть несколько хороших документов, к которым вы можете обратиться, если хотите сравнить производительность и использование пространства этими форматами файлов. Переход по некоторым полезным ссылкам, которые помогут вам начать работу.
Это сообщение в блоге
Эта ссылка с MapR [Паркет они не обсуждают]
Эта ссылка из Inquidia
Приведенные выше ссылки помогут вам в этом. Надеюсь, это ответ на ваш вопрос.
Благодарность!
источник
Описание Parquet можно найти здесь: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html
Я собираюсь очень скоро написать об Avro, а также провести сравнение между двумя. Выложу здесь, когда закончишь.
источник