AVRO - Serializacja przy użyciu parserów
Schemat Avro można wczytać do programu, generując klasę odpowiadającą schematowi lub korzystając z biblioteki parserów. W Avro dane są zawsze przechowywane wraz z odpowiednim schematem. Dlatego zawsze możemy odczytać schemat bez generowania kodu.
W tym rozdziale opisano, jak czytać schemat by using parsers library i do serialize dane za pomocą Avro.
Serializacja przy użyciu biblioteki parserów
Aby serializować dane, musimy odczytać schemat, utworzyć dane zgodnie ze schematem i serializować schemat za pomocą Avro API. Poniższa procedura serializuje dane bez generowania żadnego kodu -
Krok 1
Przede wszystkim przeczytaj schemat z pliku. Aby to zrobić, użyjSchema.Parserklasa. Ta klasa udostępnia metody do analizowania schematu w różnych formatach.
Utwórz wystąpienie Schema.Parser class, przekazując ścieżkę do pliku, w którym przechowywany jest schemat.
Schema schema = new Schema.Parser().parse(new File("/path/to/emp.avsc"));
Krok 2
Utwórz obiekt GenericRecord interfejs, tworząc wystąpienie GenericData.Recordklasa, jak pokazano poniżej. Przekaż utworzony powyżej obiekt schematu do jego konstruktora.
GenericRecord e1 = new GenericData.Record(schema);
Krok 3
Wstaw wartości w schemacie przy użyciu rozszerzenia put() metoda GenericData klasa.
e1.put("name", "ramu");
e1.put("id", 001);
e1.put("salary",30000);
e1.put("age", 25);
e1.put("address", "chennai");
Krok 4
Utwórz obiekt DatumWriter interfejs przy użyciu SpecificDatumWriterklasa. Konwertuje obiekty Java na format serializowany w pamięci. Następujący przykład tworzy wystąpienieSpecificDatumWriter obiekt klasy dla emp klasa -
DatumWriter<emp> empDatumWriter = new SpecificDatumWriter<emp>(emp.class);
Krok 5
Utwórz instancję DataFileWriter dla empklasa. Ta klasa zapisuje zserializowane rekordy danych zgodnych ze schematem, wraz z samym schematem, w pliku. Ta klasa wymagaDatumWriter obiekt, jako parametr konstruktora.
DataFileWriter<emp> dataFileWriter = new DataFileWriter<emp>(empDatumWriter);
Krok 6
Otwórz nowy plik, aby zapisać dane pasujące do danego schematu za pomocą create()metoda. Ta metoda wymaga schematu i ścieżki do pliku, w którym mają być przechowywane dane, jako parametrów.
W poniższym przykładzie schemat jest przekazywany za pomocą getSchema() metoda, a plik danych jest przechowywany w ścieżce
/home/Hadoop/Avro/serialized_file/emp.avro.
empFileWriter.create(e1.getSchema(), new
File("/home/Hadoop/Avro/serialized_file/emp.avro"));
Krok 7
Dodaj wszystkie utworzone rekordy do pliku za pomocą append( ) metoda, jak pokazano poniżej.
empFileWriter.append(e1);
empFileWriter.append(e2);
empFileWriter.append(e3);
Przykład - serializacja przy użyciu parserów
Poniższy kompletny program pokazuje, jak serializować dane za pomocą parserów -
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”);
}
}
Przejdź do katalogu, w którym znajduje się wygenerowany kod. W tym przypadku o godzhome/Hadoop/Avro_work/without_code_gen.
$ cd home/Hadoop/Avro_work/without_code_gen/
Teraz skopiuj i zapisz powyższy program w pliku o nazwie Serialize.java. Skompiluj i wykonaj, jak pokazano poniżej -
$ javac Serialize.java
$ java Serialize
Wynik
data successfully serialized
Jeśli zweryfikujesz ścieżkę podaną w programie, możesz znaleźć wygenerowany plik serializowany, jak pokazano poniżej.