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 by using parsers library e para serialize os dados usando Avro.
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
Em primeiro lugar, leia o esquema do arquivo. Para fazer isso, useSchema.Parserclasse. Esta classe fornece métodos para analisar o esquema em diferentes formatos.
Instancie o Schema.Parser classe passando o caminho do arquivo onde o esquema está armazenado.
Schema schema = new Schema.Parser().parse(new File("/path/to/emp.avsc"));
Passo 2
Crie o objeto de GenericRecord interface, instanciando GenericData.Recordclasse 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 put() método do GenericData classe.
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 de DatumWriter interface usando o SpecificDatumWriterclasse. Ele converte objetos Java em formato serializado na memória. O exemplo a seguir instanciaSpecificDatumWriter objeto de classe para emp classe -
DatumWriter<emp> empDatumWriter = new SpecificDatumWriter<emp>(emp.class);
Etapa 5
Instanciar DataFileWriter para empclasse. Essa classe grava registros serializados de dados em conformidade com um esquema, junto com o próprio esquema, em um arquivo. Esta aula requer oDatumWriter objeto, 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 fornecido usando create()método. Este método requer o esquema e o caminho do arquivo onde os dados devem ser armazenados como parâmetros.
No exemplo abaixo, o esquema é passado usando getSchema() método 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 append( ) método conforme 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 onde o código gerado é colocado. Neste caso, emhome/Hadoop/Avro_work/without_code_gen.
$ cd home/Hadoop/Avro_work/without_code_gen/
Agora copie e salve o programa acima no arquivo chamado Serialize.java. Compile e execute-o conforme 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 conforme mostrado abaixo.