AVRO - การทำให้เป็นอนุกรมโดยใช้พาร์เซอร์

เราสามารถอ่านสคีมาของ Avro ในโปรแกรมได้โดยการสร้างคลาสที่สอดคล้องกับสคีมาหรือโดยใช้ไลบรารีตัวแยกวิเคราะห์ ใน Avro ข้อมูลจะถูกจัดเก็บด้วยสคีมาที่เกี่ยวข้องเสมอ ดังนั้นเราสามารถอ่านสคีมาได้ตลอดเวลาโดยไม่ต้องสร้างโค้ด

บทนี้อธิบายวิธีการอ่านสคีมา by using parsers library และ serialize ข้อมูลโดยใช้ Avro

การทำให้เป็นอนุกรมโดยใช้ไลบรารีพาร์เซอร์

ในการจัดลำดับข้อมูลเราต้องอ่านสคีมาสร้างข้อมูลตามสคีมาและจัดลำดับสคีมาโดยใช้ Avro API ขั้นตอนต่อไปนี้ทำให้ข้อมูลเป็นอนุกรมโดยไม่ต้องสร้างรหัสใด ๆ -

ขั้นตอนที่ 1

ก่อนอื่นอ่านสคีมาจากไฟล์ โดยใช้Schema.Parserชั้นเรียน คลาสนี้จัดเตรียมเมธอดในการแยกวิเคราะห์สคีมาในรูปแบบต่างๆ

เริ่มต้นไฟล์ Schema.Parser คลาสโดยส่งเส้นทางไฟล์ที่เก็บสคีมา

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

ขั้นตอนที่ 2

สร้างวัตถุของ GenericRecord อินเทอร์เฟซโดยการสร้างอินสแตนซ์ GenericData.Recordคลาสดังที่แสดงด้านล่าง ส่งผ่านวัตถุสคีมาที่สร้างไว้ข้างต้นไปยังตัวสร้าง

GenericRecord e1 = new GenericData.Record(schema);

ขั้นตอนที่ 3

แทรกค่าในสคีมาโดยใช้ put() วิธีการของ GenericData ชั้นเรียน

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

ขั้นตอนที่ 4

สร้างวัตถุของ DatumWriter อินเทอร์เฟซโดยใช้ SpecificDatumWriterชั้นเรียน มันแปลงวัตถุ Java เป็นรูปแบบอนุกรมในหน่วยความจำ ตัวอย่างต่อไปนี้สร้างอินสแตนซ์SpecificDatumWriter คลาสออบเจ็กต์สำหรับ emp ชั้นเรียน -

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

ขั้นตอนที่ 5

ทันที DataFileWriter สำหรับ empชั้นเรียน คลาสนี้เขียนเร็กคอร์ดที่เป็นอนุกรมของข้อมูลที่สอดคล้องกับสคีมาพร้อมกับสคีมาในไฟล์ คลาสนี้ต้องการไฟล์DatumWriter วัตถุเป็นพารามิเตอร์ของตัวสร้าง

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

ขั้นตอนที่ 6

เปิดไฟล์ใหม่เพื่อจัดเก็บข้อมูลที่ตรงกับสคีมาที่กำหนดโดยใช้ create()วิธี. วิธีนี้ต้องใช้สคีมาและเส้นทางของไฟล์ที่จะจัดเก็บข้อมูลเป็นพารามิเตอร์

ในตัวอย่างที่ระบุด้านล่างสคีมาจะถูกส่งผ่านโดยใช้ getSchema() วิธีการและไฟล์ข้อมูลจะถูกเก็บไว้ในเส้นทาง

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

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

ขั้นตอนที่ 7

เพิ่มเรกคอร์ดที่สร้างขึ้นทั้งหมดลงในไฟล์โดยใช้ append( ) วิธีการดังแสดงด้านล่าง

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

ตัวอย่าง - การทำให้เป็นอนุกรมโดยใช้พาร์เซอร์

โปรแกรมที่สมบูรณ์ต่อไปนี้แสดงวิธีการจัดลำดับข้อมูลโดยใช้ตัวแยกวิเคราะห์ -

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

เรียกดูไดเร็กทอรีที่วางโค้ดที่สร้างขึ้น ในกรณีนี้ที่home/Hadoop/Avro_work/without_code_gen.

$ cd home/Hadoop/Avro_work/without_code_gen/

ตอนนี้คัดลอกและบันทึกโปรแกรมข้างต้นในไฟล์ชื่อ Serialize.java. รวบรวมและดำเนินการตามที่แสดงด้านล่าง -

$ javac Serialize.java
$ java Serialize

เอาต์พุต

data successfully serialized

หากคุณตรวจสอบเส้นทางที่ระบุในโปรแกรมคุณจะพบไฟล์ซีเรียลที่สร้างขึ้นดังที่แสดงด้านล่าง