AVRO - Serialização usando analisadores

Pode-se ler um esquema Avro em um programa, gerando uma classe correspondente a um esquema ou usando a biblioteca de analisadores. No Avro , os dados são sempre armazenados com seu esquema correspondente. Portanto, sempre podemos ler um esquema sem geração de código.

Este capítulo descreve como ler o esquema usando a biblioteca de analisadores e serializar os dados usando o Avro .

<span class = Avro sem serialização de código "/>

Serialização usando a biblioteca de analisadores

Para serializar os dados, precisamos ler o esquema, criar dados de acordo com o esquema e serializar o esquema usando a API Avro . O procedimento a seguir serializa os dados sem gerar nenhum código -

Passo 1

Antes de tudo, leia o esquema do arquivo. Para fazer isso, use a classe Schema.Parser . Esta classe fornece métodos para analisar o esquema em diferentes formatos.

Instancie a classe Schema.Parser passando o caminho do arquivo em que o esquema está armazenado.

Schema schema = new Schema.Parser().parse(new File("/path/to/emp.avsc"));

Passo 2

Crie o objeto da interface GenericRecord , instanciando a classe GenericData.Record, como mostrado abaixo. Passe o objeto de esquema criado acima para seu construtor.

GenericRecord e1 = new GenericData.Record(schema);

etapa 3

Insira os valores no esquema usando o método put () da classe GenericData .

e1.put("name", "ramu");
e1.put("id", 001);
e1.put("salary",30000);
e1.put("age", 25);
e1.put("address", "chennai");

Passo 4

Crie um objeto da interface DatumWriter usando a classe SpecificDatumWriter . Ele converte objetos Java em formato serializado na memória. O exemplo a seguir instancia o objeto de classe SpecificDatumWriter para a classe emp -

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

Etapa 5

Instanciar DataFileWriter para a classe emp . Essa classe grava registros serializados de dados em conformidade com um esquema, juntamente com o próprio esquema, em um arquivo. Esta classe requer o objeto DatumWriter , como um parâmetro para o construtor.

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

Etapa 6

Abra um novo arquivo para armazenar os dados correspondentes ao esquema especificado usando o método create () . Este método requer o esquema e o caminho do arquivo em que os dados devem ser armazenados, como parâmetros.

No exemplo abaixo, o esquema é passado usando o método getSchema () e o arquivo de dados é armazenado no caminho

/ home / Hadoop / Avro /serialized_file/emp.avro.

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

Etapa 7

Adicione todos os registros criados ao arquivo usando o método append () como mostrado abaixo.

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

Exemplo - serialização usando analisadores

O programa completo a seguir mostra como serializar os dados usando analisadores -

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

import org.apache.avro.Schema;
import org.apache.avro.file.DataFileWriter;

import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericDatumWriter;
import org.apache.avro.generic.GenericRecord;

import org.apache.avro.io.DatumWriter;

public class Seriali {
   public static void main(String args[]) throws IOException{
	
      //Instantiating the Schema.Parser class.
      Schema schema = new Schema.Parser().parse(new File("/home/Hadoop/ Avro /schema/emp.avsc"));
		
      //Instantiating the GenericRecord class.
      GenericRecord e1 = new GenericData.Record(schema);
		
      //Insert data according to schema
      e1.put("name", "ramu");
      e1.put("id", 001);
      e1.put("salary",30000);
      e1.put("age", 25);
      e1.put("address", "chenni");
		
      GenericRecord e2 = new GenericData.Record(schema);
		
      e2.put("name", "rahman");
      e2.put("id", 002);
      e2.put("salary", 35000);
      e2.put("age", 30);
      e2.put("address", "Delhi");
		
      DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<GenericRecord>(schema);
		
      DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(datumWriter);
      dataFileWriter.create(schema, new File("/home/Hadoop/ Avro _work/without_code_gen/mydata.txt"));
		
      dataFileWriter.append(e1);
      dataFileWriter.append(e2);
      dataFileWriter.close();
		
      System.out.println(“data successfully serialized”);
   }
}

Navegue até o diretório em que o código gerado é colocado. Nesse caso, em casa / Hadoop / Avro _work / without_code_gen .

$ cd home/Hadoop/ Avro _work/without_code_gen/
Sem código Gen

Agora copie e salve o programa acima no arquivo chamado Serialize.java . Compile e execute-o como mostrado abaixo -

$ javac Serialize.java
$ java Serialize

Resultado

data successfully serialized

Se você verificar o caminho fornecido no programa, poderá encontrar o arquivo serializado gerado, como mostrado abaixo.

Sem código Gen1