Avro contra Parquet

92

Estoy planeando usar uno de los formatos de archivo hadoop para mi proyecto relacionado con hadoop. Yo entiendo de parquet es eficaz para la consulta y Avro basada en la columna para barrido completo o cuando necesitamos todos los datos de las columnas!

Antes de continuar y elegir uno de los formatos de archivo, quiero comprender cuáles son las desventajas / inconvenientes de uno sobre el otro. ¿Alguien me puede explicar en términos simples?

Abhishek
fuente

Respuestas:

53

Si aún no lo ha decidido, seguiré adelante y escribiré esquemas Avro para sus datos. Una vez hecho esto, elegir entre archivos contenedor Avro y archivos Parquet es tan simple como cambiar, por ejemplo,

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

para

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

El formato Parquet parece ser un poco más intensivo computacionalmente en el lado de la escritura, por ejemplo, requiere RAM para el almacenamiento en búfer y CPU para ordenar los datos, etc., pero debería reducir los costos de E / S, almacenamiento y transferencia, además de ser eficiente. lee especialmente con consultas similares a SQL (por ejemplo, Hive o SparkSQL) que solo abordan una parte de las columnas.

En un proyecto, terminé volviendo de los contenedores de Parquet a Avro porque el esquema era demasiado extenso y anidado (derivado de algunas clases orientadas a objetos bastante jerárquicas) y resultó en miles de columnas de Parquet. A su vez, nuestros grupos de filas eran realmente anchos y poco profundos, lo que significaba que nos tomó una eternidad antes de que pudiéramos procesar una pequeña cantidad de filas en la última columna de cada grupo.

No he tenido muchas oportunidades de usar Parquet para datos más normalizados / cuerdos todavía, pero entiendo que si se usa bien, permite mejoras significativas en el rendimiento.

vaporera25
fuente
2
Parquet también admite conjuntos de datos / colecciones anidados.
Tagar
@Ruslan: Sí, técnicamente apoyó las estructuras anidadas. El problema era la gran cantidad de columnas debido a la gran desnormalización de los datos. Funcionó pero fue muy lento.
steamer25
4
Sí, escribir datos en parquet es más caro. Las lecturas son al revés, especialmente si sus consultas normalmente leen un subconjunto de columnas.
Tagar
4
Creo que Parquet es adecuado para la mayoría de los casos de uso, excepto que los datos en la misma columna varían mucho y siempre se analizan en casi todas las columnas.
Rockie Yang
Apache Arrow tampoco admite aún el anidamiento mixto (listas con diccionarios o diccionarios con listas). Entonces, si desea trabajar con anidamientos complejos en Parquet, está atascado con Spark, Hive, etc. y herramientas que no dependen de Arrow para leer y escribir Parquet.
Josías
49

Avro es un formato basado en filas. Si desea recuperar los datos en su conjunto, puede usar Avro

Parquet es un formato basado en columnas. Si sus datos constan de muchas columnas pero está interesado en un subconjunto de columnas, puede usar Parquet

HBase es útil cuando se trata de actualizaciones frecuentes de datos. Avro se recupera rápidamente, Parquet es mucho más rápido.

Aravind Krishnakumar
fuente
7
Por favor, corrija sus 2 últimas oraciones en el último párrafo. Son absolutamente incomprensibles.
Cbhihe
39

Avro

  • Ampliamente utilizado como plataforma de serialización
  • Basado en filas, ofrece un formato binario compacto y rápido
  • El esquema está codificado en el archivo para que los datos se puedan desmarcar
  • Los archivos admiten la compresión de bloques y se pueden dividir
  • Admite la evolución del esquema

Parquet

  • Formato de archivo binario orientado a columnas
  • Utiliza el algoritmo de trituración y ensamblaje de registros descrito en el documento Dremel
  • Cada archivo de datos contiene los valores de un conjunto de filas
  • Eficiente en términos de E / S de disco cuando es necesario consultar columnas específicas

Desde elegir un formato de almacenamiento de datos HDFS: Avro frente a Parquet y más

secfree
fuente
30

Tanto Avro como Parquet son formatos de almacenamiento "autodescriptivos", lo que significa que ambos incorporan datos, información de metadatos y esquemas al almacenar datos en un archivo. El uso de cualquiera de los formatos de almacenamiento depende del caso de uso. Tres aspectos constituyen la base sobre la que puede elegir qué formato será el óptimo en su caso:

  1. Operación de lectura / escritura : Parquet es un formato de archivo basado en columnas. Es compatible con la indexación. Por eso, es adecuado para consultas de datos de baja latencia, consultas complejas o analíticas de una sola escritura y lectura intensiva. Generalmente lo utilizan los usuarios finales / científicos de datos.
    Mientras tanto, Avro, al ser un formato de archivo basado en filas, se utiliza mejor para operaciones de escritura intensiva. Esto lo utilizan generalmente los ingenieros de datos. Ambos admiten formatos de serialización y compresión, aunque lo hacen de diferentes formas.

  2. Herramientas : El parquet se adapta bien a Impala. (Impala es un motor de consultas SQL RDBM de procesamiento paralelo masivo (MPP) que sabe cómo operar con datos que residen en uno o varios motores de almacenamiento externo). Nuevamente, Parquet se presta bien para consultas complejas / interactivas y rápidas (baja latencia ) emite datos en HDFS. Esto es compatible con CDH (Cloudera Distribution Hadoop). Hadoop admite los formatos Optimized Row Columnar (ORC) de Apache (las selecciones dependen de la distribución de Hadoop), mientras que Avro se adapta mejor al procesamiento Spark.

  3. Evolución del esquema : Desarrollar un esquema de base de datos significa cambiar la estructura de la base de datos, por lo tanto, sus datos y, por lo tanto, su procesamiento de consultas.
    Tanto Parquet como Avro admiten la evolución del esquema, pero en diferente grado.
    Parquet es bueno para operaciones de 'agregar', por ejemplo, agregar columnas, pero no para cambiar el nombre de las columnas a menos que la 'lectura' se realice por índice.
    Avro es más adecuado para agregar, eliminar y, en general, mutar columnas que Parquet. Históricamente, Avro ha proporcionado un conjunto más rico de posibilidades de evolución de esquemas que Parquet, y aunque sus capacidades de evolución de esquemas tienden a difuminarse, Avro aún brilla en esa área, en comparación con Parquet.

Aakash Aggarwal
fuente
5
La parte "Herramientas" es un poco engañosa. Parquet se usa de manera eficiente en muchos otros marcos como Spark, Presto, Hive, etc. Avro no es específico de Spark, se usa ampliamente como formato de almacenamiento HDFS y escenarios de transmisión de mensajes como en Kafka.
ᐅ devrimbaris
2
Aakash Aggarwal: ¿Puede explicar lo que quiere decir en el párrafo 2 con "Avro es el más adecuado para el procesamiento Spark"? Como lo menciona devrimbaris, Parquet también está muy bien integrado en el entorno de procesamiento Spark. o_O?!?
Cbhihe
11

Tu comprensión es correcta. De hecho, nos encontramos con una situación similar durante la migración de datos en nuestro DWH. Elegimos Parquet sobre Avro ya que el ahorro de disco que obtuvimos fue casi el doble de lo que obtuvimos con AVro. Además, el tiempo de procesamiento de consultas fue mucho mejor que el de Avro. Pero sí, nuestras consultas se basaron en agregación, operaciones basadas en columnas, etc., por lo que, como era de esperar, Parquet fue un claro ganador.

Estamos usando Hive 0.12 de la distribución CDH. Mencionaste que tienes problemas con Hive + Parquet, ¿cuáles son? No encontramos ninguno.

Silver Blaze
fuente
3

Silver Blaze describió muy bien con un caso de uso de ejemplo y describió cómo Parquet era la mejor opción para él. Tiene sentido considerar uno sobre el otro dependiendo de sus requisitos. También estoy presentando una breve descripción de otros formatos de archivo diferentes junto con la comparación de la complejidad del espacio de tiempo. Espero que ayude.

Hay varios formatos de archivo que puede usar en Hive. Las menciones destacadas son AVRO, Parquet. RCFile y ORC. Hay algunos buenos documentos disponibles en línea que puede consultar si desea comparar el rendimiento y la utilización del espacio de estos formatos de archivo. Sigue algunos enlaces útiles que lo ayudarán a continuar.

Esta publicación de blog

Este enlace de MapR [aunque no hablan de Parquet]

Este enlace de Inquidia

Los enlaces anteriores le ayudarán a seguir adelante. Espero que esto responda a tu consulta.

¡Gracias!

Rahul
fuente
0

Solo para obtener una descripción sobre Parquet, puede consultar aquí: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html

Tengo la intención de escribir muy pronto sobre Avro y también una comparación entre los 2. Lo publicaré aquí una vez hecho.

Abhishek Jain
fuente
Esperando la comparación. Actualmente elegí Avro para mi proyecto ya que el parquet tiene problemas de compatibilidad con la colmena :)
Abhishek
1
@Abshinek, ¿puede proporcionar información sobre los problemas de compatibilidad con hive y avro?
EB
@EB No debería haber ningún problema, si lo hubiera, se mencionarían en cwiki.apache.org/confluence/display/Hive/AvroSerDe
OneCricketeer