AVRO - Ayrıştırıcıları Kullanarak Serileştirme
Bir Avro şeması, bir şemaya karşılık gelen bir sınıf oluşturarak veya ayrıştırıcı kitaplığını kullanarak bir programa okunabilir. Avro'da veriler her zaman karşılık gelen şemasıyla saklanır. Bu nedenle, kod üretmeden her zaman bir şemayı okuyabiliriz.
Bu bölüm şemanın nasıl okunacağını açıklar by using parsers library ve serialize Avro kullanarak veriler.
Ayrıştırıcı Kitaplığını Kullanarak Serileştirme
Verileri serileştirmek için şemayı okumamız, şemaya göre veri oluşturmamız ve Avro API kullanarak şemayı serileştirmemiz gerekiyor. Aşağıdaki prosedür, verileri herhangi bir kod oluşturmadan seri hale getirir -
Aşama 1
Öncelikle şemayı dosyadan okuyun. Bunu yapmak için kullanınSchema.Parsersınıf. Bu sınıf, şemayı farklı formatlarda ayrıştırmak için yöntemler sağlar.
Örnekleyin Schema.Parser Şemanın depolandığı dosya yolunu ileterek sınıf.
Schema schema = new Schema.Parser().parse(new File("/path/to/emp.avsc"));
Adım 2
Nesnesini oluşturun GenericRecord arayüz, somutlaştırarak GenericData.Recordaşağıda gösterildiği gibi sınıf. Yukarıda oluşturulan şema nesnesini yapıcısına iletin.
GenericRecord e1 = new GenericData.Record(schema);
Aşama 3
Değerleri şemaya ekleyin. put() yöntemi GenericData sınıf.
e1.put("name", "ramu");
e1.put("id", 001);
e1.put("salary",30000);
e1.put("age", 25);
e1.put("address", "chennai");
4. adım
Bir nesne oluştur DatumWriter arayüzü kullanarak SpecificDatumWritersınıf. Java nesnelerini bellek içi serileştirilmiş biçime dönüştürür. Aşağıdaki örnek,SpecificDatumWriter sınıf nesnesi emp sınıf -
DatumWriter<emp> empDatumWriter = new SpecificDatumWriter<emp>(emp.class);
Adım 5
Örneklendirmek DataFileWriter için empsınıf. Bu sınıf, şemaya uygun verilerin serileştirilmiş kayıtlarını, şemanın kendisiyle birlikte bir dosyaya yazar. Bu sınıf,DatumWriter yapıcıya bir parametre olarak nesne.
DataFileWriter<emp> dataFileWriter = new DataFileWriter<emp>(empDatumWriter);
6. Adım
Verilen şemayla eşleşen verileri depolamak için yeni bir dosya açın. create()yöntem. Bu yöntem, şema ve parametreler olarak verilerin depolanacağı dosyanın yolunu gerektirir.
Aşağıda verilen örnekte, şema kullanılarak geçilir getSchema() yöntem ve veri dosyası yolda saklanır
/home/Hadoop/Avro/serialized_file/emp.avro.
empFileWriter.create(e1.getSchema(), new
File("/home/Hadoop/Avro/serialized_file/emp.avro"));
7. Adım
Oluşturulan tüm kayıtları dosyaya ekleyin. append( ) yöntemi aşağıda gösterildiği gibi.
empFileWriter.append(e1);
empFileWriter.append(e2);
empFileWriter.append(e3);
Örnek - Ayrıştırıcıları Kullanarak Serileştirme
Aşağıdaki eksiksiz program, ayrıştırıcıları kullanarak verilerin nasıl serileştirileceğini gösterir -
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”);
}
}
Oluşturulan kodun yerleştirildiği dizine göz atın. Bu durumda,home/Hadoop/Avro_work/without_code_gen.
$ cd home/Hadoop/Avro_work/without_code_gen/
Şimdi yukarıdaki programı kopyalayıp adlı dosyaya kaydedin. Serialize.java. Aşağıda gösterildiği gibi derleyin ve çalıştırın -
$ javac Serialize.java
$ java Serialize
Çıktı
data successfully serialized
Programda verilen yolu doğrularsanız, üretilen serileştirilmiş dosyayı aşağıda gösterildiği gibi bulabilirsiniz.