Jump to content

Апач Авро

Апач Авро
Разработчик(и) Фонд программного обеспечения Apache
Первоначальный выпуск 2 ноября 2009 г .; 14 лет назад ( 2009-11-02 ) [1]
Стабильная версия
1.11.3 / 23 сентября 2023 г .; 10 месяцев назад ( 23.09.2023 ) [2]
Репозиторий Репозиторий Авро
Написано в Java , C , C++ , C# , Perl , Python , PHP , Ruby
Тип удаленного вызова процедур Платформа
Лицензия Лицензия Апач 2.0
Веб-сайт евро .apache .org

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

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

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) и сложных типов (запись, перечисление, массив, карта, объединение и фиксированный). [7]

Пример простой схемы:

 {
   "namespace": "example.avro",
   "type": "record",
   "name": "User",
   "fields": [
      {"name": "name", "type": "string"},
      {"name": "favorite_number",  "type": ["null", "int"]},
      {"name": "favorite_color", "type": ["null", "string"]}
   ] 
 }

Сериализация и десериализация

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

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

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

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

Сериализация: [8]

import avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter

# Need to know the schema to write. According to 1.8.2 of Apache Avro
schema = avro.schema.parse(open("user.avsc", "rb").read())

writer = DataFileWriter(open("users.avro", "wb"), DatumWriter(), schema)
writer.append({"name": "Alyssa", "favorite_number": 256})
writer.append({"name": "Ben", "favorite_number": 8, "favorite_color": "red"})
writer.close()

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

$ 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  >", "fields": [{"<
0000160 74 79 70 65 22 3a 20 22 73 74 72 69 6e 67 22 2c  >type": "string",<
0000200 20 22 6e 61 6d 65 22 3a 20 22 6e 61 6d 65 22 7d  > "name": "name"}<
0000220 2c 20 7b 22 74 79 70 65 22 3a 20 5b 22 69 6e 74  >, {"type": ["int<
0000240 22 2c 20 22 6e 75 6c 6c 22 5d 2c 20 22 6e 61 6d  >", "null"], "nam<
0000260 65 22 3a 20 22 66 61 76 6f 72 69 74 65 5f 6e 75  >e": "favorite_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 10 00 06 72 65 64 05 f9 a3 80 98 47 54  >en....red.....GT<
0000460 62 bf 68 95 a2 ab 42 ef 24                       >b.h...B.$<
0000471

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

# The schema is embedded in the data file
reader = DataFileReader(open("users.avro", "rb"), DatumReader())
for user in reader:
    print(user)
reader.close()

Это выводит:

{u'favorite_color': None, u'favorite_number': 256, u'name': u'Alyssa'}
{u'favorite_color': u'red', u'favorite_number': 8, u'name': u'Ben'}

Языки с API

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

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

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

Оригинальный логотип Apache Avro принадлежал несуществующему британскому производителю самолетов Avro (первоначально AV Roe and Company). [25]

В конце 2023 года логотип Apache Avro был обновлен до оригинального дизайна. [26]

См. также

[ редактировать ]
  1. ^ «Apache Avro: новый формат обмена данными» . blog.cloudera.com . Проверено 10 марта 2019 г.
  2. ^ «Выпуски Apache Avro» . avro.apache.org . Проверено 23 сентября 2023 г.
  3. ^ Клеппманн, Мартин (2017). Проектирование приложений с интенсивным использованием данных (первое изд.). О'Рейли. п. 122.
  4. ^ «3 причины, почему аналитика в Hadoop так важна — экономия данных» . dataconomy.com . 21 апреля 2016 г.
  5. ^ «Спецификация Apache Avro: файлы контейнера объектов» . avro.apache.org . Проверено 10 марта 2019 г.
  6. ^ «Спецификация Apache Avro: кодировки» . avro.apache.org . Проверено 11 марта 2019 г.
  7. ^ «Начало работы с Apache Avro (Python)» . avro.apache.org . Архивировано из оригинала 5 июня 2016 года . Проверено 11 марта 2019 г.
  8. ^ «Начало работы с Apache Avro (Python)» . avro.apache.org . Архивировано из оригинала 5 июня 2016 года . Проверено 11 марта 2019 г.
  9. ^ «Спецификация Apache Avro: сериализация данных» . avro.apache.org . Проверено 11 марта 2019 г.
  10. ^ пунт. «GitHub — phunt/avro-rpc-quickstart: Быстрый старт Apache Avro RPC. Avro — это подпроект Apache Hadoop» . Гитхаб . Проверено 13 апреля 2016 г.
  11. ^ «Поддерживаемые языки — Apache Avro — Apache Software Foundation» . Проверено 21 апреля 2016 г.
  12. ^ «Авро: 1.5.1 — ASF JIRA» . Проверено 13 апреля 2016 г.
  13. ^ «[AVRO-533] .NET-реализация Avro — ASF JIRA» . Проверено 13 апреля 2016 г.
  14. ^ «Поддерживаемые языки» . Проверено 13 апреля 2016 г.
  15. ^ «АвроЭкс» . hexdocs.pm . Проверено 18 октября 2017 г.
  16. ^ "Avrora — avrora v0.21.1" . hexdocs.pm . Retrieved June 11, 2021 .
  17. ^ «Пакет avro — github.com/hamba/avro — Пакеты Go» . pkg.go.dev . Проверено 4 июля 2023 г.
  18. ^ goavro , LinkedIn, 30 июня 2023 г. , получено 4 июля 2023 г.
  19. ^ «Встроенная реализация Avro на Haskell» . Томас М. ДюБюиссон, Galois, Inc. Проверено 8 августа 2016 г.
  20. ^ «Чистая реализация спецификации Avro на JavaScript» . Гитхаб . Проверено 4 мая 2020 г.
  21. ^ «Начало работы (Python)» . Апач Авро . Проверено 4 июля 2023 г.
  22. ^ Avro, Apache, avro: Avro — это платформа сериализации и RPC. , получено 4 июля 2023 г.
  23. ^ «Реализация клиентской библиотеки Apache Avro в Rust» . Проверено 17 декабря 2018 г.
  24. ^ «Апач Авро 1.8.2 IDL» . Архивировано из оригинала 20 сентября 2010 года . Проверено 11 марта 2019 г.
  25. ^ «Логотип Авро» . avroheritagemuseum.co.uk . Проверено 31 декабря 2018 г.
  26. ^ «[AVRO-3908] Обновить логотип проекта везде — ASF JIRA» . apache.org . Проверено 6 февраля 2024 г.

Дальнейшее чтение

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 102cde2105ed1860750ff7157920f7af__1713973980
URL1:https://arc.ask3.ru/arc/aa/10/af/102cde2105ed1860750ff7157920f7af.html
Заголовок, (Title) документа по адресу, URL1:
Apache Avro - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)