AVRO - Descripción general
Para transferir datos a través de una red o para su almacenamiento persistente, debe serializar los datos. Antes de laserialization APIs proporcionada por Java y Hadoop, tenemos una utilidad especial, llamada Avro, una técnica de serialización basada en esquemas.
Este tutorial le enseña cómo serializar y deserializar los datos usando Avro. Avro proporciona bibliotecas para varios lenguajes de programación. En este tutorial, demostramos los ejemplos usando la biblioteca de Java.
¿Qué es Avro?
Apache Avro es un sistema de serialización de datos independiente del lenguaje. Fue desarrollado por Doug Cutting, el padre de Hadoop. Dado que las clases de escritura de Hadoop carecen de portabilidad de idiomas, Avro se vuelve bastante útil, ya que trata con formatos de datos que pueden procesarse en varios idiomas. Avro es una herramienta preferida para serializar datos en Hadoop.
Avro tiene un sistema basado en esquemas. Un esquema independiente del lenguaje está asociado con sus operaciones de lectura y escritura. Avro serializa los datos que tienen un esquema integrado. Avro serializa los datos en un formato binario compacto, que puede ser deserializado por cualquier aplicación.
Avro usa el formato JSON para declarar las estructuras de datos. Actualmente, admite lenguajes como Java, C, C ++, C #, Python y Ruby.
Esquemas de Avro
Avro depende en gran medida de su schema. Permite que todos los datos se escriban sin conocimiento previo del esquema. Se serializa rápidamente y los datos serializados resultantes son de menor tamaño. El esquema se almacena junto con los datos de Avro en un archivo para su posterior procesamiento.
En RPC, el cliente y el servidor intercambian esquemas durante la conexión. Este intercambio ayuda en la comunicación entre campos con el mismo nombre, campos faltantes, campos adicionales, etc.
Los esquemas de Avro se definen con JSON que simplifica su implementación en lenguajes con librerías JSON.
Al igual que Avro, hay otros mecanismos de serialización en Hadoop como Sequence Files, Protocol Buffers, y Thrift.
Comparación con búferes de ahorro y protocolo
Thrift y Protocol Buffersson las bibliotecas más competentes con Avro. Avro se diferencia de estos marcos en las siguientes formas:
Avro admite tipos dinámicos y estáticos según el requisito. Protocol Buffers y Thrift utilizan lenguajes de definición de interfaz (IDL) para especificar esquemas y sus tipos. Estos IDL se utilizan para generar código para la serialización y deserialización.
Avro está construido en el ecosistema Hadoop. Los búferes de protocolo y de ahorro no están integrados en el ecosistema de Hadoop.
A diferencia de Thrift y Protocol Buffer, la definición de esquema de Avro está en JSON y no en ningún IDL propietario.
Propiedad | Avro | Búfer de ahorro y protocolo |
---|---|---|
Esquema dinámico | si | No |
Integrado en Hadoop | si | No |
Esquema en JSON | si | No |
No es necesario compilar | si | No |
No es necesario declarar identificaciones | si | No |
Filo sangriento | si | No |
Características de Avro
A continuación se enumeran algunas de las características destacadas de Avro:
Avro es un language-neutral sistema de serialización de datos.
Puede ser procesado por muchos lenguajes (actualmente C, C ++, C #, Java, Python y Ruby).
Avro crea un formato estructurado binario que es a la vez compressible y splittable. Por lo tanto, se puede usar de manera eficiente como entrada para trabajos de Hadoop MapReduce.
Avro proporciona rich data structures. Por ejemplo, puede crear un registro que contenga una matriz, un tipo enumerado y un subregistro. Estos tipos de datos se pueden crear en cualquier idioma, se pueden procesar en Hadoop y los resultados se pueden enviar a un tercer idioma.
Avro schemas definido en JSON, facilita la implementación en los lenguajes que ya tienen bibliotecas JSON.
Avro crea un archivo de autodescripción llamado Avro Data File, en el que almacena datos junto con su esquema en la sección de metadatos.
Avro también se utiliza en llamadas a procedimiento remoto (RPC). Durante RPC, el cliente y el servidor intercambian esquemas en el protocolo de enlace de la conexión.
Trabajo general de Avro
Para usar Avro, debe seguir el flujo de trabajo dado:
Step 1- Crea esquemas. Aquí debe diseñar el esquema Avro de acuerdo con sus datos.
Step 2- Lea los esquemas en su programa. Se hace de dos formas:
By Generating a Class Corresponding to Schema- Compile el esquema usando Avro. Esto genera un archivo de clase correspondiente al esquema.
By Using Parsers Library - Puede leer directamente el esquema utilizando la biblioteca de analizadores.
Step 3 - Serialice los datos utilizando la API de serialización proporcionada para Avro, que se encuentra en el package org.apache.avro.specific.
Step 4 - Deserializar los datos utilizando la API de deserialización proporcionada para Avro, que se encuentra en la package org.apache.avro.specific.