Formatos de Fichero

Publicado por

Apache Avro es un sistema de compresión diseñado por Apache para el proyecto Hadoop para la serialización de datos. Parquet Es un formato de almacenamiento columnar para ecosistemas Hadoop. Los archivos de secuencia almacenan registros con pares de claves-valor codificados en binario.

Índice

  1. Apache Avro
  2. Parquet
  3. SequenceFile
  4. Optimized Row Columnar (ORC)
  5. Benchmark

1. Apache Avro

Apache Avro es un sistema de compresión diseñado por Apache para el proyecto Hadoop para la serialización de datos que proporciona:

  • Estructuras de datos complejas
  • Un formato binario, compacto y rápido
  • Un fichero contenedor, para guardar datos persistentes
  • Llamada a procedimientos remotos (RPC: Remote Procedure Call1)

Los primeros usos de Avro en Hadoop son para tener un formato de serialización persistente en HDFS e intercambiar información entre los nodos del clúster a través de la red.

Avro se basa en esquemas. Cuando los datos .avro son leídos siempre esta presente el esquema con el que han sido escritos. Esto permite aumentar el rendimiento al escribir los datos, haciendo la serialización rápida y viable en espacio. También facilita el uso de lenguajes dinámicos de scripting porque los datos se encuentran con su esquema, lo que les hace auto-descriptivos.

Cuando los datos Avro están guardados en un fichero, su esquema también lo está, así estos fichero podrán ser procesados por algún programa después. Si el programa que está leyendo los datos espera un esquema diferente, el problema podrá resolverse fácilmente ya que tendrá los dos presentes.

Los esquemas de Avro se definen mediante JSON para facilitar la implementación en otros lenguajes que ya disponen de librerías JSON.

Definición de un esquema:

{
 "namespace": "example.avro",
 "type": "record",
 "name": "User",
 "fields": [
 {"name": "name", "type": "string"},
 {"name": "favorite_number", "type": ["int", "null"]},
 {"name": "favorite_color", "type": ["string", "null"]}
 ]
 }

Apache Spark SQL puede acceder a los ficheros con formato Avro.

2. Apache Parquet

Es un formato de almacenamiento columnar disponible para cualquier proyecto en el ecosistema de Hadoop, independiente del framework utilizado para procesar los datos o el lenguaje de programación.

Parquet fue creado para que las ventajas de la compresión y la eficiencia de la representación columnar estuviera disponible para cualquier proyecto del ecosistema Hadoop.

Parquet está diseñado para soportar eficientemente esquemas de compresión y codificación. Parquet permite que los esquemas de compresión se especifiquen en un nivel por columna. Parquet tiene tres opciones para la compresión de sus archivos: snappy, gzip o ninguno.

El formato de Parquet esta compuesto por tres piezas:

  • Row group: conjunto de filas en formato columnar. 50Mb < row group < 1Gb
  • Column chunk: son los datos de una columna en un grupo. Pueden ser leídas independientemente para mejorar las lecturas.
  • Page: unida de acceso en un chunk. Debe ser lo suficiente grande para que la compresión sea eficiente. 8Kb

filelayout

Img: parquet.apache.org

3. Archivos de secuencia (SequenceFile)

Son archivos propios del sistema de ficheros de Hadoop, almacenan registros con pares de claves-valor codificados en binario.Estos ficheros se utilizan en MapReduce cuando la salida de un Map es la entrada de otro. Son buenos ficheros para estos trabajos porque son fácilmente divisibles.

El SequenceFile proporciona un Writer, Reader Sorter para escribir, leer y ordenar. Podemos encontrar tres tipos en función de su compresión:

  1. No estar comprimido
  2. A nivel de registro (Clave-Valor) en este caso solo comprime el valor
  3. A nivel de bloque que comprime el valor y la clave en bloques diferentes.

El archivo tiene una parte reservada al Header que es información asociada como la versión, compresión, tipo de comprensión, tipo de la clave, tipo del valor, metadatos, etc.

A nivel de registro la información que encontramos asociada es la longitud del registro, la longitud de la clave, la clave , si el valor esta comprimido, etc.

Una característica interesante que implementan los SequenceFiles es la de crear puntos de sincronización. Estos se utilizan cuando un Reader se pierde o cuando se necesita dividir un archivo. Estos puntos se crean automáticamente cada cierto número de registros.

4. ORC (Optimized Row Columnar)

En Enero de 2013 Apache creó los archivos ORC como parte de una iniciativa para incrementar la velocidad de Hive y mejorar el almacenamiento de los datos en HDFS. EL objetivo era alta velocidad de procesamiento en un reducido tamaño de archivo.

ORC es un formato columnar autodescriptivo y “sin tipo”, diseñado para carga de trabajos en Hadoop. Tiene la ventaja de los formatos columnares que permiten al Reader leer, descomprimir y procesar solo los valores que necesite para la consulta actual. Que es un formato “sin tipo” significa que el Writer será el encargado de escoger la codificación más adecuada y generar un índice interno a medida que se escribe el archivo.

Un archivo ORC contiene grupos de filas llamados Stripes, junto con la información auxiliar al final del archivo (Stripe Footer). El final del archivo es un Postscript que contiene los parámetros de compresión y el tamaño del Stripe Footer.

El tamaño por defecto de un Stripe es de 250Mb, cuanto más grande sea el fichero, mejor serán las lecturas de HDFS.

El File Footer contiene la lista de stripes que forman el fichero, el número de filas por stripe y el tipo de cada columna. También contiene los agregados por columna: count, min, max y sum.

orcfilelayout

Img: Apache Hive ORC

5. Benchmark

Dataset 1: Cada registro indica un viaje en taxi en Nueva York desde el 2009. Esta compuesto de 19 columnas sin valores nulos y con tipos Doublesintegers, decimals y strings. Dos meses en los datos son 22.7 millones de filas.

Dataset2: datos generados aleatroriamente basados en las estadísticas de los datos de una tabla de Hive desplegado en producción. Son 55 columnas con numerosos valores nulos. Los campos tienen algo más de estructura, existen timestamps, strings, longs, booleans, list y struct. El conjunto de datos esta compuesto por 25 millones de filas.

Comparamos el almacenamiento total de los dos conjuntos de datos en diferentes formatos.

Dataset1

saleshist

Dataset2

taxihist

Si hacemos un full scan tenemos que:

Dataset1

fullScanHist.jpg

Gracias a Owen O’Malley  por estas diapositivas (el informe completo es el último enlace de las fuentes).

 


1: RPC: Remote Procedure Call: En computación distribuida, la llamada a un procedimiento remoto es para ejecutar código desde una máquina en otra remota sin tener que preocuparse por las comunicaciones entre ambas.

Fuente:

Apache Avro project
Apache Parquet
Hadoop Sequence File
Apache Hive ORC
SlideShare File Format Benchmark

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s