AVRO - Serialisasi Menggunakan Parser

Seseorang dapat membaca skema Avro ke dalam program baik dengan membuat kelas yang sesuai dengan skema atau dengan menggunakan pustaka parsers. Di Avro, data selalu disimpan dengan skema yang sesuai. Oleh karena itu, kami selalu dapat membaca skema tanpa pembuatan kode.

Bab ini menjelaskan cara membaca skema by using parsers library dan untuk serialize data menggunakan Avro.

Serialisasi Menggunakan Library Parsers

Untuk membuat serial data, kita perlu membaca skema, membuat data sesuai dengan skema, dan membuat serial skema menggunakan Avro API. Prosedur berikut membuat serial data tanpa membuat kode apa pun -

Langkah 1

Pertama-tama, baca skema dari file. Untuk melakukannya, gunakanSchema.Parserkelas. Kelas ini menyediakan metode untuk mengurai skema dalam format yang berbeda.

Instantiate Schema.Parser kelas dengan melewatkan jalur file tempat skema disimpan.

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

Langkah 2

Buat objek GenericRecord antarmuka, dengan membuat instance GenericData.Recordkelas seperti yang ditunjukkan di bawah ini. Meneruskan objek skema yang dibuat di atas ke konstruktornya.

GenericRecord e1 = new GenericData.Record(schema);

LANGKAH 3

Masukkan nilai dalam skema menggunakan put() metode dari GenericData kelas.

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

LANGKAH 4

Buat objek dari DatumWriter antarmuka menggunakan SpecificDatumWriterkelas. Ini mengubah objek Java menjadi format serial dalam memori. Contoh berikut ini membuat contohSpecificDatumWriter objek kelas untuk emp kelas -

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

LANGKAH 5

Memberi contoh DataFileWriter untuk empkelas. Kelas ini menulis catatan data berseri yang sesuai dengan skema, bersama dengan skema itu sendiri, dalam sebuah file. Kelas ini membutuhkanDatumWriter objek, sebagai parameter untuk konstruktor.

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

LANGKAH 6

Buka file baru untuk menyimpan data yang cocok dengan skema yang diberikan menggunakan create()metode. Metode ini membutuhkan skema, dan jalur file tempat data akan disimpan, sebagai parameter.

Dalam contoh yang diberikan di bawah ini, skema diteruskan menggunakan getSchema() metode dan file data disimpan di jalur

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

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

LANGKAH 7

Tambahkan semua catatan yang dibuat ke file menggunakan append( ) metode seperti yang ditunjukkan di bawah ini.

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

Contoh - Serialisasi Menggunakan Parser

Program lengkap berikut menunjukkan cara membuat serial data menggunakan parser -

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”);
   }
}

Jelajahi direktori tempat kode yang dihasilkan ditempatkan. Dalam kasus ini, dihome/Hadoop/Avro_work/without_code_gen.

$ cd home/Hadoop/Avro_work/without_code_gen/

Sekarang salin dan simpan program di atas dalam file bernama Serialize.java. Kompilasi dan jalankan seperti yang ditunjukkan di bawah ini -

$ javac Serialize.java
$ java Serialize

Keluaran

data successfully serialized

Jika Anda memverifikasi jalur yang diberikan dalam program, Anda dapat menemukan file serial yang dihasilkan seperti yang ditunjukkan di bawah ini.