Apache Avro - Википедия - Apache Avro
Разработчики) | Фонд программного обеспечения Apache |
---|---|
изначальный выпуск | 2 ноября 2009 г.[1] |
Стабильный выпуск | 1.10.1 / 3 декабря 2020 г.[2] |
Репозиторий | Репозиторий Avro |
Написано в | Ява, C, C ++, C #, Perl, Python, PHP, Рубин |
Тип | Удаленный вызов процедур рамки |
Лицензия | Лицензия Apache 2.0 |
Интернет сайт | Авро |
Авро это ориентированный на ряд удаленный вызов процедур и данные сериализация фреймворк, разработанный в рамках проекта Apache Hadoop. Оно использует JSON для определения типов данных и протоколы, и сериализует данные в компактном двоичном формате. Его основное использование в Apache Hadoop, где он может предоставлять как формат сериализации для постоянных данных, так и формат проводной связи для связи между узлами Hadoop и от клиентских программ к Hadoop Сервисы.Avro использует схему для структурирования кодируемых данных. Он имеет два разных типа языков схем; один для редактирования человеком (Avro IDL), а другой, более машиночитаемый на основе JSON.[3]
Это похоже на Бережливость и Буферы протокола, но не требует запуска программы генерации кода, когда схема изменения (если не требуется для статически типизированный языков).
Apache Spark SQL может получить доступ к Avro как к источнику данных.[4]
Файл-контейнер объектов Avro
Файл-контейнер объектов Avro состоит из:[5]
- Заголовок файла, за которым следует
- один или несколько блоков данных файла.
Заголовок файла состоит из:
- Четыре байта, ASCII 'O', 'b', 'j', за которыми следует номер версии Avro, равный 1 (0x01) (двоичные значения 0x4F 0x62 0x6A 0x01).
- Метаданные файла, включая определение схемы.
- 16-байтовый, случайно сгенерированный маркер синхронизации для этого файла.
Для блоков данных Avro указывает две кодировки сериализации:[6] двоичный и JSON. Большинство приложений будут использовать двоичную кодировку, поскольку она меньше и быстрее. Для отладки и веб-приложений иногда может быть подходящей кодировка JSON.
Определение схемы
Схемы Avro определяются с использованием JSON. Схемы состоят из примитивных типов (null, boolean, int, long, float, double, bytes и string) и сложных типов (record, enum, array, map, union и fixed).[7]
Пример простой схемы:
{ "пространство имен": "example.avro", "тип": "записывать", "имя": "Пользователь", "поля": [ {"имя": "имя", "тип": "нить"}, {"имя": "Любимый номер", "тип": ["ноль", "int"]}, {"имя": "любимый цвет", "тип": ["ноль", "нить"]} ] }
Сериализация и десериализация
Данные в Avro могут храниться с соответствующей схемой, что означает, что сериализованный элемент может быть прочитан, не зная заранее схему.
Пример кода сериализации и десериализации в Python
Сериализация:[8]
импорт avro.schemaиз avro.datafile импорт DataFileReader, DataFileWriterиз avro.io импорт DatumReader, DatumWriterсхема = Авро.схема.Разобрать(открыто("user.avsc", "рб").читать()) # нужно знать схему для записи. Согласно 1.8.2 Apache Avroписатель = DataFileWriter(открыто("users.avro", "wb"), DatumWriter(), схема)писатель.добавить({"имя": "Алисса", "Любимый номер": 256})писатель.добавить({"имя": "Бен", "Любимый номер": 7, "любимый цвет": "красный"})писатель.Закрыть()
Файл "users.avro" будет содержать схему в формате JSON и компактное двоичное представление.[9] данных:
$ od -v -t x1z users.avro 0000000 4f 62 6а 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 ба 03 7b 22 74 79 70 65 22 3а 20 22 72 65 63 >a .. {"type": "rec<0000060 6f 72 64 22 2c 20 22 6e 61 6d 65 22 3а 20 22 55 >ord "," имя ":" U<0000100 73 65 72 22 2c 20 22 6e 61 6d 65 73 70 61 63 65 >ser "," пространство имен<0000120 22 3а 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 3а 20 5b 7b 22 >"," поля ": [{"<0000160 74 79 70 65 22 3а 20 22 73 74 72 69 6e 67 22 2c >тип ":" строка ",<0000200 20 22 6e 61 6d 65 22 3а 20 22 6e 61 6d 65 22 7d > "name": "name"}<0000220 2c 20 7b 22 74 79 70 65 22 3а 20 5b 22 69 6e 74 >, {"тип": ["int<0000240 22 2c 20 22 6e 75 6c 6c 22 5d 2c 20 22 6e 61 6d >"," ноль "]," нам "<0000260 65 22 3а 20 22 66 61 76 6f 72 69 74 65 5f 6e 75 >е ":" любимый_ну<0000300 6d 62 65 72 22 7d 2c 20 7b 22 74 79 70 65 22 3а >mber "}, {" type ":<0000320 20 5b 22 73 74 72 69 6e 67 22 2c 20 22 6e 75 6c > ["строка", "нуль<0000340 6c 22 5d 2c 20 22 6e 61 6d 65 22 3а 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 а3 80 98 47 54 62 парень 68 95 а2 ab 42 ef >...... GTb.h ... Б.<0000420 24 04 2c 0c 41 6c 79 73 73 61 00 80 04 02 06 42 >$.,. Алисса ..... B<0000440 65 6e 00 0e 00 06 72 65 64 05 f9 а3 80 98 47 54 >ru .... красный ..... GT<0000460 62 парень 68 95 а2 ab 42 ef 24 >б.х ... Б. $<0000471
Десериализация:
читатель = DataFileReader(открыто("users.avro", "рб"), DatumReader()) # схема встроена в файл данныхза Пользователь в читатель: Распечатать Пользовательчитатель.Закрыть()
Это выводит:
{ты'любимый цвет': Никто, ты'Любимый номер': 256, ты'имя': ты'Алисса'}{ты'любимый цвет': ты'красный', ты'Любимый номер': 7, ты'имя': ты'Бен'}
Языки с API
Хотя теоретически Avro может использоваться на любом языке, для следующих языков написаны API:[10][11]
Avro IDL
Помимо поддержки JSON для определений типов и протоколов, Avro включает экспериментальные[18] поддержка альтернативы язык описания интерфейса (IDL) синтаксис, известный как Avro IDL. Ранее известный как GenAvro, этот формат разработан для облегчения принятия пользователями, знакомыми с более традиционными IDL и языками программирования, с синтаксисом, аналогичным C / C ++, Буферы протокола и другие.
Логотип
Логотип Apache Avro от несуществующего британского производителя самолетов. Авро (первоначально A.V. Roe and Company).[19] Футбольная команда Футбольный клуб "Авро" использует тот же логотип.[20]
Смотрите также
- Сравнение форматов сериализации данных
- Apache Thrift
- Буферы протокола
- Etch (протокол)
- Internet Communications Engine
- Пакет сообщений
- CBOR
Рекомендации
- ^ «Apache Avro: новый формат обмена данными». blog.cloudera.com. Получено 10 марта, 2019.
- ^ «Релизы Apache Avro ™». avro.apache.org. Получено 3 декабря, 2020.
- ^ Клеппманн, Мартин (2017). Разработка приложений, интенсивно использующих данные (Первое изд.). О'Рейли. п. 122.
- ^ «3 причины, по которым аналитика In-Hadoop имеет большое значение - датакономия». dataconomy.com. 21 апреля 2016 г.
- ^ «Спецификация Apache Avro ™: файлы-контейнеры объектов». avro.apache.org. Получено 10 марта, 2019.
- ^ «Спецификация Apache Avro ™: кодировки». avro.apache.org. Получено Одиннадцатое марта, 2019.
- ^ «Начало работы с Apache Avro ™ (Python)». avro.apache.org. Получено Одиннадцатое марта, 2019.
- ^ «Начало работы с Apache Avro ™ (Python)». avro.apache.org. Получено Одиннадцатое марта, 2019.
- ^ «Спецификация Apache Avro ™: сериализация данных». avro.apache.org. Получено Одиннадцатое марта, 2019.
- ^ phunt. "GitHub - phunt / avro-rpc-quickstart: Apache Avro RPC Quick Start. Avro является подпроектом Apache Hadoop". GitHub. Получено 13 апреля, 2016.
- ^ «Поддерживаемые языки - Apache Avro - Apache Software Foundation». Получено 21 апреля, 2016.
- ^ «Авро: 1.5.1 - ASF JIRA». Получено 13 апреля, 2016.
- ^ "[AVRO-533] .NET реализация Avro - ASF JIRA". Получено 13 апреля, 2016.
- ^ «Поддерживаемые языки». Получено 13 апреля, 2016.
- ^ "Нативная реализация Avro на Haskell". Томас М. ДюБюиссон, Galois, Inc. Получено 8 августа, 2016.
- ^ «Реализация спецификации Avro на чистом JavaScript». Получено 4 мая, 2020.
- ^ «Реализация клиентской библиотеки Avro на Rust». Получено 17 декабря, 2018.
- ^ "Apache Avro 1.8.2 IDL". Получено Одиннадцатое марта, 2019.
- ^ «Логотип Авро». avroheritagemuseum.co.uk. Получено 31 декабря, 2018.
- ^ "АВРО ФК" avrojfc.org. Получено 31 декабря, 2018.
дальнейшее чтение
- Белый, Том (ноябрь 2010 г.). Hadoop: полное руководство. ISBN 978-1-4493-8973-4.