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

프로그램에 주어진 경로를 확인하면 아래와 같이 생성 된 직렬화 파일을 찾을 수 있습니다.