AVRO - Сериализация созданием класса

Можно прочитать схему Avro в программу, либо сгенерировав класс, соответствующий схеме, либо с помощью библиотеки анализаторов. В этой главе описывается, как прочитать схему путем создания класса и сериализации данных с использованием Avr.

<span class = Avro WithCode Serializing "/>

Сериализация путем генерации класса

Чтобы сериализовать данные с помощью Avro , выполните следующие действия:

  • Напишите схему Avro .

  • Скомпилируйте схему с помощью утилиты Avro . Вы получаете код Java, соответствующий этой схеме.

  • Заполните схему данными.

  • Сериализуйте его, используя библиотеку Avro .

Определение схемы

Предположим, вам нужна схема со следующими деталями:

поле имя Я бы возраст оплата труда адрес
тип строка ИНТ ИНТ ИНТ строка

Создайте схему Avro как показано ниже.

Сохраните его как emp.avsc .

{
   "namespace": "it-brain.online",
   "type": "record",
   "name": "emp",
   "fields": [
      {"name": "name", "type": "string"},
      {"name": "id", "type": "int"},
      {"name": "salary", "type": "int"},
      {"name": "age", "type": "int"},
      {"name": "address", "type": "string"}
   ]
}

Компиляция схемы

После создания схемы Avro вам необходимо скомпилировать созданную схему с помощью инструментов Avro . avro-tools-1.7.7.jar - это банка, содержащая инструменты.

Синтаксис для компиляции схемы Avro

java -jar <path/to/avro-tools-1.7.7.jar> compile schema <path/to/schema-file> <destination-folder>

Откройте терминал в домашней папке.

Создайте новый каталог для работы с Avro как показано ниже -

$ mkdir Avro _Work

Во вновь созданном каталоге создайте три подкаталога -

  • Имя схемы с именем , чтобы разместить схему.

  • Второй с именем with_code_gen, чтобы разместить сгенерированный код.

  • Третий по имени банок, чтобы разместить файлы банок .

$ mkdir schema
$ mkdir with_code_gen
$ mkdir jars

На следующем снимке экрана показано, как должна выглядеть папка Avro _work после создания всех каталогов.

<span class = Авро Работа "/>
  • Теперь / home / Hadoop / Avro _work / jars / avro-tools-1.7.7.jar - это путь к каталогу, в который вы скачали файл avro-tools-1.7.7.jar.

  • / home / Hadoop / Avro _work / schema / - это путь к каталогу, в котором хранится ваш файл схемы emp.avsc.

  • / home / Hadoop / Avro _work / with_code_gen - это каталог, в котором вы хотите сохранить сгенерированные файлы классов.

Теперь скомпилируйте схему как показано ниже -

$ java -jar /home/Hadoop/ Avro _work/jars/avro-tools-1.7.7.jar compile schema /home/Hadoop/ Avro _work/schema/emp.avsc /home/Hadoop/ Avro /with_code_gen

После компиляции пакет в соответствии с пространством имен схемы создается в целевом каталоге. В этом пакете создается исходный код Java с именем схемы. Этот сгенерированный исходный код является Java-кодом данной схемы, который может использоваться непосредственно в приложениях.

Например, в этом случае создается пакет / папка с именем tutorialspoint, которая содержит другую папку с именем com (поскольку пространство имен - it-brain.online), и внутри нее вы можете наблюдать сгенерированный файл emp.java . Следующий снимок показывает emp.java -

Снимок примера программы

Этот класс полезен для создания данных в соответствии со схемой.

Сгенерированный класс содержит -

  • Конструктор по умолчанию и параметризованный конструктор, который принимает все переменные схемы.
  • Методы установки и получения для всех переменных в схеме.
  • Метод Get (), который возвращает схему.
  • Методы построения.

Создание и сериализация данных

Прежде всего, скопируйте сгенерированный файл Java, используемый в этом проекте, в текущий каталог или импортируйте его из того места, где он находится.

Теперь мы можем написать новый файл Java и создать экземпляр класса в сгенерированном файле ( emp ), чтобы добавить данные сотрудника в схему.

Давайте посмотрим процедуру создания данных по схеме с использованием Apache Avro .

Шаг 1

Создайте сгенерированный класс emp .

emp e1=new emp( );

Шаг 2

Используя методы установки, вставьте данные первого сотрудника. Например, мы создали детали сотрудника по имени Омар.

e1.setName("omar");
e1.setAge(21);
e1.setSalary(30000);
e1.setAddress("Hyderabad");
e1.setId(001);

Точно так же заполните все данные о сотруднике, используя методы установки.

Шаг 3

Создайте объект интерфейса DatumWriter, используя класс SpecificDatumWriter . Это преобразует объекты Java в сериализованный формат в памяти. В следующем примере создается экземпляр объекта класса SpecificDatumWriter для класса emp .

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

Шаг 4

Создание экземпляра DataFileWriter для класса emp . Этот класс записывает в файл последовательную сериализованную запись данных, соответствующую схеме, вместе с самой схемой. Этот класс требует объекта DatumWriter в качестве параметра для конструктора.

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

Шаг 5

Откройте новый файл, чтобы сохранить данные, соответствующие данной схеме, используя метод create () . Этот метод требует схему и путь к файлу, в котором должны храниться данные, в качестве параметров.

В следующем примере схема передается с использованием метода getSchema () , а файл данных сохраняется по пути - / home / Hadoop / Avro /serialized_file/emp.avro.

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

Шаг 6

Добавьте все созданные записи в файл, используя метод append (), как показано ниже -

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

Пример - Сериализация путем генерации класса

Следующая полная программа показывает, как сериализовать данные в файл с помощью Apache Avro

import java.io.File;
import java.io.IOException;

import org.apache.avro.file.DataFileWriter;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.specific.SpecificDatumWriter;

public class Serialize {
   public static void main(String args[]) throws IOException{
	
      //Instantiating generated emp class
      emp e1=new emp();
	
      //Creating values according the schema
      e1.setName("omar");
      e1.setAge(21);
      e1.setSalary(30000);
      e1.setAddress("Hyderabad");
      e1.setId(001);
	
      emp e2=new emp();
	
      e2.setName("ram");
      e2.setAge(30);
      e2.setSalary(40000);
      e2.setAddress("Hyderabad");
      e2.setId(002);
	
      emp e3=new emp();
	
      e3.setName("robbin");
      e3.setAge(25);
      e3.setSalary(35000);
      e3.setAddress("Hyderabad");
      e3.setId(003);
	
      //Instantiate DatumWriter class
      DatumWriter<emp> empDatumWriter = new SpecificDatumWriter<emp>(emp.class);
      DataFileWriter<emp> empFileWriter = new DataFileWriter<emp>(empDatumWriter);
	
      empFileWriter.create(e1.getSchema(), new File("/home/Hadoop/ Avro _Work/with_code_gen/emp.avro"));
	
      empFileWriter.append(e1);
      empFileWriter.append(e2);
      empFileWriter.append(e3);
	
      empFileWriter.close();
	
      System.out.println("data successfully serialized");
   }
}

Просмотрите каталог, в котором находится сгенерированный код. В этом случае дома / Hadoop / Avro _work / with_code_gen .

В терминале -

$ cd home/Hadoop/ Avro _work/with_code_gen/

В графическом интерфейсе

Сгенерированный код

Теперь скопируйте и сохраните вышеуказанную программу в файл с именем Serialize.java

Скомпилируйте и выполните его, как показано ниже -

$ javac Serialize.java
$ java Serialize

Выход

data successfully serialized

Если вы проверите путь, указанный в программе, вы можете найти сгенерированный сериализованный файл, как показано ниже.

Сгенерированный Сериализованный Файл