Учебники

AVRO — Обзор

Для передачи данных по сети или для ее постоянного хранения необходимо сериализовать данные. До API-интерфейсов сериализации, предоставляемых Java и Hadoop, у нас есть специальная утилита, называемая Avro , метод сериализации на основе схемы.

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

Что такое Авро?

Apache Avro является независимой от языка системой сериализации данных. Он был разработан Дагом Каттингом, отцом Hadoop. Поскольку доступным для записи классам Hadoop не хватает переносимости языка, Avro становится весьма полезным, поскольку имеет дело с форматами данных, которые могут обрабатываться несколькими языками. Avro — это предпочтительный инструмент для сериализации данных в Hadoop.

Avro имеет систему, основанную на схемах. Независимая от языка схема связана с операциями чтения и записи. Avro сериализует данные, которые имеют встроенную схему. Avro сериализует данные в компактный двоичный формат, который может быть десериализован любым приложением.

Avro использует формат JSON для объявления структур данных. В настоящее время он поддерживает такие языки, как Java, C, C ++, C #, Python и Ruby.

Авро Схемы

Авро сильно зависит от его схемы . Это позволяет записывать все данные без предварительного знания схемы. Он сериализуется быстро, и получающиеся в результате сериализованные данные имеют меньший размер. Схема хранится вместе с данными Avro в файле для дальнейшей обработки.

В RPC клиент и сервер обмениваются схемами во время соединения. Этот обмен помогает в общении между одноименными полями, пропущенными полями, дополнительными полями и т. Д.

Схемы Avro определяются с помощью JSON, что упрощает его реализацию на языках с библиотеками JSON.

Как и в Avro, в Hadoop есть и другие механизмы сериализации, такие как Sequence Files, Protocol Buffers и Thrift .

Сравнение с экономичными и протокольными буферами

Thrift и Protocol Buffers — самые компетентные библиотеки с Avro. Avro отличается от этих рамок следующими способами —

  • Avro поддерживает как динамические, так и статические типы в соответствии с требованиями. Буферы протокола и Thrift используют языки определения интерфейса (IDL) для определения схем и их типов. Эти IDL используются для генерации кода для сериализации и десериализации.

  • Avro встроен в экосистему Hadoop. Экономичные и протокольные буферы не встроены в экосистему Hadoop.

Avro поддерживает как динамические, так и статические типы в соответствии с требованиями. Буферы протокола и Thrift используют языки определения интерфейса (IDL) для определения схем и их типов. Эти IDL используются для генерации кода для сериализации и десериализации.

Avro встроен в экосистему Hadoop. Экономичные и протокольные буферы не встроены в экосистему Hadoop.

В отличие от Thrift и Protocol Buffer, определение схемы Avro дано в формате JSON, а не в любом проприетарном IDL.

Имущество Avro Экономия и протокол буфера
Динамическая схема да нет
Встроенный в Hadoop да нет
Схема в JSON да нет
Нет необходимости компилировать да нет
Не нужно объявлять идентификаторы да нет
Кровоточащий край да нет

Особенности Avro

Ниже перечислены некоторые из выдающихся особенностей Avro —

  • Avro — это независимая от языка система сериализации данных.

  • Он может обрабатываться многими языками (в настоящее время C, C ++, C #, Java, Python и Ruby).

  • Avro создает двоичный структурированный формат, который является сжимаемым и разделяемым . Следовательно, его можно эффективно использовать в качестве входных данных для заданий Hadoop MapReduce.

  • Avro предоставляет богатые структуры данных . Например, вы можете создать запись, которая содержит массив, перечислимый тип и вложенную запись. Эти типы данных могут быть созданы на любом языке, могут быть обработаны в Hadoop, а результаты могут быть переданы на третий язык.

  • Схемы Avro, определенные в JSON , облегчают реализацию на языках, которые уже имеют библиотеки JSON.

  • Avro создает файл с самоописанием Avro Data File, в котором он хранит данные вместе со своей схемой в разделе метаданных.

  • Avro также используется в удаленных вызовах процедур (RPC). Во время RPC клиент и сервер обмениваются схемами при установлении соединения.

Avro — это независимая от языка система сериализации данных.

Он может обрабатываться многими языками (в настоящее время C, C ++, C #, Java, Python и Ruby).

Avro создает двоичный структурированный формат, который является сжимаемым и разделяемым . Следовательно, его можно эффективно использовать в качестве входных данных для заданий Hadoop MapReduce.

Avro предоставляет богатые структуры данных . Например, вы можете создать запись, которая содержит массив, перечислимый тип и вложенную запись. Эти типы данных могут быть созданы на любом языке, могут быть обработаны в Hadoop, а результаты могут быть переданы на третий язык.

Схемы Avro, определенные в JSON , облегчают реализацию на языках, которые уже имеют библиотеки JSON.

Avro создает файл с самоописанием Avro Data File, в котором он хранит данные вместе со своей схемой в разделе метаданных.

Avro также используется в удаленных вызовах процедур (RPC). Во время RPC клиент и сервер обмениваются схемами при установлении соединения.

Генеральный рабочий Авро

Чтобы использовать Avro, вам нужно следовать заданному рабочему процессу —

Шаг 1 — Создание схем. Здесь вам нужно спроектировать схему Avro согласно вашим данным.

Шаг 2 — Прочитайте схемы в вашей программе. Это делается двумя способами —

Создав класс, соответствующий схеме — скомпилируйте схему с помощью Avro. Это создает файл класса, соответствующий схеме

Используя библиотеку парсеров — Вы можете напрямую читать схему, используя библиотеку парсеров.

Шаг 3 — Сериализация данных с использованием API сериализации, предоставленного для Avro, который находится в пакете org.apache.avro.specific .

Шаг 4 — Десериализация данных с использованием API десериализации, предоставленного для Avro, который находится в пакете org.apache.avro.specific.