Учебники

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

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

Avro WithCode Сериализация

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
   "namespace": "tutorialspoint.com",
   "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, чтобы разместить сгенерированный код.

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

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

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

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

$ mkdir schema
$ mkdir with_code_gen
$ mkdir jars

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

Авро Работа

  • Теперь /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 — это каталог, в котором вы хотите сохранить сгенерированные файлы классов.

Теперь /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 (поскольку пространство имен — tutorialspoint.com), и внутри нее вы можете наблюдать сгенерированный файл 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

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