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.
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.
fuente
Avro
Parquet
Desde elegir un formato de almacenamiento de datos HDFS: Avro frente a Parquet y más
fuente
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:
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.
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.
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.
fuente
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.
fuente
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!
fuente
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.
fuente