Apache Avro

редактировать

Apache Avro
Apache Avro Logo.svg
Разработчик (и) Apache Software Foundation
Первоначальный выпуск2 Ноябрь 2009 г.; 10 лет назад (02.11.2009)
Стабильный выпуск 1.10.0 / 29 июня 2020 г.; 3 месяца назад (29.06.2020)
Репозиторий Репозиторий Avro
Написано наJava, C, C ++, C#, Perl, Python, PHP, Ruby
Тип Удаленный вызов процедуры framework
Лицензия Лицензия Apache 2.0
Веб-сайтavro.apache.org

Avro - это ориентированная на строки структура удаленного вызова процедур и сериализации данных, разработанная в рамках проекта Apache Hadoop. Он использует JSON для определения типов данных и протоколов и сериализует данные в компактном двоичном формате. Его основное использование - в Apache Hadoop, где он может обеспечивать как формат сериализации для постоянных данных, так и формат проводной связи для связи между узлами Hadoop и от клиентских программ к службам Hadoop . Avro использует схему для структурирования кодируемых данных. Он имеет два разных типа языков схем; один для редактирования человеком (Avro IDL), а другой, более машиночитаемый на основе JSON.

Он похож на Thrift и Protocol Buffers, но не требуют запуска программы генерации кода при изменении схемы (если это не требуется для статически типизированных языков).

Apache Spark SQL может обращаться к Avro как к источнику данных.

Содержание
  • 1 Файл контейнера объектов Avro
  • 2 Определение схемы
  • 3 Сериализация и десериализация
    • 3.1 Пример сериализации и десериализации код на Python
  • 4 Языки с API
  • 5 Avro IDL
  • 6 Логотип
  • 7 См. также
  • 8 Ссылки
  • 9 Дополнительная литература
Файл контейнера объектов Avro

Файл-контейнер объектов Avro состоит из:

  • заголовка файла, за которым следует
  • один или несколько блоков данных файла.

Заголовок файла состоит из:

  • четырех байтов, ASCII 'O', 'b', 'j', за которым следует номер версии Avro, равный 1 (0x01) (двоичные значения 0x4F 0x62 0x6A 0x01).
  • Метаданные файла, включая определение схемы.
  • 16-байтовый, случайно сгенерированный маркер синхронизации для этого файла.

Для блоков данных Avro указывает две кодировки сериализации: двоичную и JSON. Большинство приложений будут использовать двоичную кодировку, поскольку она меньше и быстрее. Для отладки и веб-приложений иногда может быть подходящей кодировка JSON.

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

Схемы Avro определяются с использованием JSON. Схемы состоят из примитивных типов (null, boolean, int, long, float, double, bytes и string) и сложных типов (record, enum, array, map, union и fixed).

Простая схема пример:

{"пространство имен": "example.avro", "тип": "запись", "имя": "Пользователь", "поля": [{"имя": "имя", "тип": "строка"}, {"имя": "избранное_число", "тип": ["ноль", "целое число"]}, {"имя": "любимый_цвет", "тип": ["ноль", "строка" ]}]}
Сериализация и десериализация

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

Пример кода сериализации и десериализации в Python

Сериализация:

импортировать avro.schema из avro.datafile, импортировать DataFileReader, DataFileWriter из avro.io, импортировать DatumReader, DatumWriter schema = avro.schema. Parse (open ("user.avsc", "rb"). Read ()) # нужно знать схему для записи. Согласно 1.8.2 Apache Avro writer = DataFileWriter (open ("users.avro", "wb"), DatumWriter (), schema) writer.append ({"name": "Alyssa", "favour_number": 256}) writer.append ({"имя": "Бен", "избранное_число": 7, "любимый_цвет": "красный"}) writer.close ()

Файл "users.avro" будет содержать схему в формате JSON и компактное двоичное представление данных:

$ od -v -t x1z users.avro 0000000 4f 62 6a 01 04 14 61 76 72 6f 2e 63 6f 64 65 63>Obj... avro.codec < 0000020 08 6e 75 6c 6c 16 61 76 72 6f 2e 73 63 68 65 6d>. null.avro.schem < 0000040 61 ba 03 7b 22 74 79 70 65 22 3a 20 22 72 65 63>a.. {"type": "rec < 0000060 6f 72 64 22 2c 20 22 6e 61 6d 65 22 3a 20 22 55>ord", "name": "U < 0000100 73 65 72 22 2c 20 22 6e 61 6d 65 73 70 61 63 65>ser", "namespace < 0000120 22 3a 20 22 65 78 61 6d 70 6c 65 2e 61 76 72 6f>": "example.avro < 0000140 22 2c 20 22 66 69 65 6c 64 73 22 3a 20 5b 7b 22>"," поля ": [{" < 0000160 74 79 70 65 22 3a 20 22 73 74 72 69 6e 67 22 2c>тип ":" строка ", < 0000200 20 22 6e 61 6d 65 22 3a 20 22 6e 61 6d 65 22 7d>" имя ":" имя "} < 0000220 2c 20 7b 22 74 79 70 65 22 3a 20 5b 22 69 6e 74>, {" тип ": [" int < 0000240 22 2c 20 22 6e 75 6c 6c 22 5d 2c 20 22 6e 61 6d>"," ноль " ], "nam < 0000260 65 22 3a 20 22 66 61 76 6f 72 69 74 65 5f 6e 75>e": "favourite_nu < 0000300 6d 62 65 72 22 7d 2c 20 7b 22 74 79 70 65 22 3a>mber"}, {"type": < 0000320 20 5b 22 73 74 72 69 6e 67 22 2c 20 22 6e 75 6c>["string", "nul < 0000340 6c 22 5d 2c 20 22 6e 61 6d 65 22 3a 20 22 66 61>l"], "name": "fa < 0000360 76 6f 72 69 74 65 5f 63 6f 6c 6f 72 22 7d 5d 7d>vorite_color "}]} < 0000400 00 05 f9 a3 80 98 47 54 62 bf 68 95 a2 ab 42 ef>...... GTb.h... B. < 0000420 24 04 2c 0c 41 6c 79 73 73 61 00 80 04 02 06 42>$.,. Alyssa..... B < 0000440 65 6e 00 0e 00 06 72 65 64 05 f9 a3 80 98 47 54>en.... красный..... GT < 0000460 62 bf 68 95 a2 ab 42 ef 24>bh..B. $ < 0000471

Десериализация:

reader = DataFileReader (open ("users.avro", "rb"), DatumReader ()) # схема встроена в файл данных для пользователя в читателе: pri nt user reader.close ()

Это выводит:

{u'favorite_color ': None, u'favorite_number': 256, u'name ': u'Alyssa'} {u'favorite_color ': u'red ', u'favorite_number': 7, u'name ': u'Ben'}
Языки с API

Хотя теоретически Avro может использовать любой язык, для следующих языков написаны API:

Avro IDL

In Помимо поддержки JSON для определений типов и протоколов, Avro включает экспериментальную поддержку синтаксиса альтернативного языка описания интерфейса (IDL), известного как Avro IDL. Ранее известный как GenAvro, этот формат разработан для облегчения внедрения пользователями, знакомыми с более традиционными IDL и языками программирования, с синтаксисом, аналогичным C / C ++, Protocol Buffers и другим.

Логотип

Логотип Apache Avro от несуществующего британского производителя самолетов Avro (первоначально A.V. Roe and Company). Футбольная команда Avro FC использует тот же логотип.

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Дополнительная литература
Последняя правка сделана 2021-06-11 20:10:08
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте