hadoop avro parquet

hadoop - Avro vs. Parquet



(7)

Estoy planeando usar uno de los formatos de archivo hadoop para mi proyecto relacionado con hadoop. ¡ Entiendo que el parquet es eficiente para consultas basadas en columnas y avro para escaneo 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 lo puede explicar en términos simples?


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 etiquetar
  • Los archivos admiten la compresión de bloques y son divisibles
  • Admite la evolución del esquema

Parquet

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

Desde Elegir un formato de almacenamiento de datos HDFS: Avro vs. Parquet y más


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 consisten en 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 es rápido en recuperación, Parquet es mucho más rápido.


Si aún no lo ha decidido, seguiría escribiendo esquemas Avro para sus datos. Una vez hecho esto, elegir entre los archivos de contenedor de Avro y los archivos de 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 computacionalmente intensivo 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, así como ser eficiente lee especialmente con consultas de tipo SQL (por ejemplo, Hive o SparkSQL) que solo abordan una parte de las columnas.

En un proyecto, terminé volviendo de contenedores 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 amplios y poco profundos, lo que significaba que pasaron una eternidad antes de que pudiéramos procesar una pequeña cantidad de filas en la última columna de cada grupo.

Todavía no he tenido muchas posibilidades de usar Parquet para obtener datos más normalizados / sanos, pero entiendo que si se usa bien, permite mejoras de rendimiento significativas.


Silver Blaze hizo una descripción agradable 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. 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 muchos formatos de archivo que puede usar en Hive. Menciones notables son AVRO, Parquet. RCFile y ORC. Hay algunos buenos documentos disponibles en línea a los que puede consultar si desea comparar el rendimiento y la utilización del espacio de estos formatos de archivo. Sigue algunos enlaces útiles que te ayudarán.

Esta publicación de blog

Este enlace de MapR [Aunque no discuten sobre Parquet]

Este enlace de Inquidia

Los enlaces dados arriba te ayudarán. Espero que esto responda a su consulta.

¡Gracias!



Tanto Avro como Parquet son formatos de almacenamiento "autodescriptivos", lo que significa que ambos incrustan 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 cual puede elegir qué formato será ó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 de escritura única y lectura intensiva, compleja o analítica. Esto generalmente es utilizado por 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 generalmente es utilizado por los ingenieros de datos. Ambos admiten formatos de serialización y compresión, aunque lo hacen de diferentes maneras.

  2. Herramientas : el parquet es una buena opción para Impala. (Impala es un motor de consulta SQL RDBM de procesamiento masivo paralelo (MPP) que sabe cómo operar con datos que residen en uno o algunos motores de almacenamiento externo). Nuevamente, Parquet se presta bien a consultas complejas / interactivas y rápido (baja latencia ) genera datos sobre HDFS. Esto es compatible con CDH (Cloudera Distribution Hadoop). Hadoop admite los formatos de columnas optimizadas de filas (ORC) de Apache (las selecciones dependen de la distribución de Hadoop), mientras que Avro es el más adecuado para el procesamiento de Spark.

  3. Evolución del esquema : la evolución de 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 un grado variable.
    El parquet es bueno para las operaciones de ''agregar'', por ejemplo, agregar columnas, pero no para renombrar columnas a menos que ''leer'' se haga por índice.
    Avro es más adecuado para agregar, eliminar y generalmente 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 desdibujarse, Avro todavía brilla en esa área, en comparación con Parquet.


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 la consulta fue mucho mejor que Avro. Pero sí, nuestras consultas se basaron en la agregación, las operaciones basadas en columnas, etc., por lo tanto, el Parquet era previsiblemente un claro ganador.

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