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