AVRO - Serialización generando clase

Uno puede leer un esquema de Avro en el programa generando una clase correspondiente a un esquema o usando la biblioteca de analizadores. Este capítulo describe cómo leer el esquemaby generating a class y Serializing los datos usando Avr.

Serialización generando una clase

Para serializar los datos con Avro, siga los pasos que se indican a continuación:

  • Escribe un esquema de Avro.

  • Compile el esquema con la utilidad Avro. Obtienes el código Java correspondiente a ese esquema.

  • Complete el esquema con los datos.

  • Serialícelo usando la biblioteca Avro.

Definición de un esquema

Suponga que desea un esquema con los siguientes detalles:

Field Nombre carné de identidad años salario habla a
type Cuerda En t En t En t cuerda

Cree un esquema de Avro como se muestra a continuación.

Guardarlo como emp.avsc.

{
   "namespace": "tutorialspoint.com",
   "type": "record",
   "name": "emp",
   "fields": [
      {"name": "name", "type": "string"},
      {"name": "id", "type": "int"},
      {"name": "salary", "type": "int"},
      {"name": "age", "type": "int"},
      {"name": "address", "type": "string"}
   ]
}

Compilando el esquema

Después de crear un esquema de Avro, debe compilar el esquema creado con las herramientas de Avro. avro-tools-1.7.7.jar es el frasco que contiene las herramientas.

Sintaxis para compilar un esquema Avro

java -jar <path/to/avro-tools-1.7.7.jar> compile schema <path/to/schema-file> <destination-folder>

Abra el terminal en la carpeta de inicio.

Cree un nuevo directorio para trabajar con Avro como se muestra a continuación:

$ mkdir Avro_Work

En el directorio recién creado, cree tres subdirectorios:

  • Primer nombre schema, para colocar el esquema.

  • Segundo nombrado with_code_gen, para colocar el código generado.

  • Tercer nombrado jars, para colocar los archivos jar.

$ mkdir schema
$ mkdir with_code_gen
$ mkdir jars

La siguiente captura de pantalla muestra cómo Avro_work La carpeta debería verse como después de crear todos los directorios.

  • Ahora /home/Hadoop/Avro_work/jars/avro-tools-1.7.7.jar es la ruta del directorio donde descargó el archivo avro-tools-1.7.7.jar.

  • /home/Hadoop/Avro_work/schema/ es la ruta del directorio donde se almacena el archivo de esquema emp.avsc.

  • /home/Hadoop/Avro_work/with_code_gen es el directorio donde desea que se almacenen los archivos de clase generados.

Ahora compile el esquema como se muestra a continuación:

$ java -jar /home/Hadoop/Avro_work/jars/avro-tools-1.7.7.jar compile schema /home/Hadoop/Avro_work/schema/emp.avsc /home/Hadoop/Avro/with_code_gen

Después de la compilación, se crea un paquete de acuerdo con el espacio de nombres del esquema en el directorio de destino. Dentro de este paquete, se crea el código fuente de Java con el nombre del esquema. Este código fuente generado es el código Java del esquema dado que se puede utilizar directamente en las aplicaciones.

Por ejemplo, en este caso un paquete / carpeta, llamado tutorialspoint se crea la cual contiene otra carpeta llamada com (ya que el espacio de nombre es tutorialspoint.com) y dentro de ella, se puede observar el archivo generado emp.java. La siguiente instantánea muestraemp.java -

Esta clase es útil para crear datos según el esquema.

La clase generada contiene:

  • Constructor predeterminado y constructor parametrizado que acepta todas las variables del esquema.
  • Los métodos setter y getter para todas las variables del esquema.
  • Método Get () que devuelve el esquema.
  • Métodos constructores.

Crear y serializar los datos

En primer lugar, copie el archivo java generado utilizado en este proyecto en el directorio actual o impórtelo desde donde se encuentra.

Ahora podemos escribir un nuevo archivo Java y crear una instancia de la clase en el archivo generado (emp) para agregar datos de empleados al esquema.

Veamos el procedimiento para crear datos según el esquema usando Apache Avro.

Paso 1

Instancia del generado emp clase.

emp e1=new emp( );

Paso 2

Utilizando métodos de establecimiento, inserte los datos del primer empleado. Por ejemplo, hemos creado los detalles del empleado llamado Omar.

e1.setName("omar");
e1.setAge(21);
e1.setSalary(30000);
e1.setAddress("Hyderabad");
e1.setId(001);

De manera similar, complete todos los detalles de los empleados utilizando métodos de establecimiento.

Paso 3

Crea un objeto de DatumWriter interfaz usando el SpecificDatumWriterclase. Esto convierte los objetos Java en un formato serializado en memoria. El siguiente ejemplo crea una instanciaSpecificDatumWriter objeto de clase para emp clase.

DatumWriter<emp> empDatumWriter = new SpecificDatumWriter<emp>(emp.class);

Paso 4

Instanciar DataFileWriter para empclase. Esta clase escribe una secuencia de registros serializados de datos que se ajustan a un esquema, junto con el esquema en sí, en un archivo. Esta clase requiereDatumWriter objeto, como un parámetro para el constructor.

DataFileWriter<emp> empFileWriter = new DataFileWriter<emp>(empDatumWriter);

Paso 5

Abra un nuevo archivo para almacenar los datos que coinciden con el esquema dado usando create()método. Este método requiere el esquema y la ruta del archivo donde se almacenarán los datos como parámetros.

En el siguiente ejemplo, el esquema se pasa usando getSchema() método, y el archivo de datos se almacena en la ruta - /home/Hadoop/Avro/serialized_file/emp.avro.

empFileWriter.create(e1.getSchema(),new File("/home/Hadoop/Avro/serialized_file/emp.avro"));

Paso 6

Agregue todos los registros creados al archivo usando append() método como se muestra a continuación -

empFileWriter.append(e1);
empFileWriter.append(e2);
empFileWriter.append(e3);

Ejemplo: serialización generando una clase

El siguiente programa completo muestra cómo serializar datos en un archivo usando Apache Avro -

import java.io.File;
import java.io.IOException;

import org.apache.avro.file.DataFileWriter;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.specific.SpecificDatumWriter;

public class Serialize {
   public static void main(String args[]) throws IOException{
	
      //Instantiating generated emp class
      emp e1=new emp();
	
      //Creating values according the schema
      e1.setName("omar");
      e1.setAge(21);
      e1.setSalary(30000);
      e1.setAddress("Hyderabad");
      e1.setId(001);
	
      emp e2=new emp();
	
      e2.setName("ram");
      e2.setAge(30);
      e2.setSalary(40000);
      e2.setAddress("Hyderabad");
      e2.setId(002);
	
      emp e3=new emp();
	
      e3.setName("robbin");
      e3.setAge(25);
      e3.setSalary(35000);
      e3.setAddress("Hyderabad");
      e3.setId(003);
	
      //Instantiate DatumWriter class
      DatumWriter<emp> empDatumWriter = new SpecificDatumWriter<emp>(emp.class);
      DataFileWriter<emp> empFileWriter = new DataFileWriter<emp>(empDatumWriter);
	
      empFileWriter.create(e1.getSchema(), new File("/home/Hadoop/Avro_Work/with_code_gen/emp.avro"));
	
      empFileWriter.append(e1);
      empFileWriter.append(e2);
      empFileWriter.append(e3);
	
      empFileWriter.close();
	
      System.out.println("data successfully serialized");
   }
}

Navegue por el directorio donde se coloca el código generado. En este caso, enhome/Hadoop/Avro_work/with_code_gen.

In Terminal −

$ cd home/Hadoop/Avro_work/with_code_gen/

In GUI −

Ahora copie y guarde el programa anterior en el archivo llamado Serialize.java

Compílelo y ejecútelo como se muestra a continuación:

$ javac Serialize.java
$ java Serialize

Salida

data successfully serialized

Si verifica la ruta proporcionada en el programa, puede encontrar el archivo serializado generado como se muestra a continuación.