Apache Avro - Apache Avro - Wikipedia

Apache Avro
Apache Avro Logo.svg
Tuzuvchi (lar)Apache dasturiy ta'minot fondi
Dastlabki chiqarilish2009 yil 2-noyabr; 11 yil oldin (2009-11-02)[1]
Barqaror chiqish
1.10.1 / 2020 yil 3-dekabr; 11 kun oldin (2020-12-03)[2]
OmborAvro ombori
YozilganJava, C, C ++, C #, Perl, Python, PHP, Yoqut
TuriMasofaviy protsedura chaqiruvi ramka
LitsenziyaApache litsenziyasi 2.0
Veb-saytavro.apache.org

Avro a qatorga yo'naltirilgan masofaviy protsedura chaqiruvi va ma'lumotlar seriyalash Apache-ning Hadoop loyihasi doirasida ishlab chiqilgan ramka. U foydalanadi JSON ma'lumotlar turlarini aniqlash uchun va protokollar va ma'lumotlarni ixcham ikkilik formatda seriyalashtiradi. Uning asosiy ishlatilishi Apache Hadoop Bu erda u doimiy ma'lumotlar uchun ketma-ketlashtirish formatini va Hadoop tugunlari o'rtasidagi aloqa uchun simli formatni va mijoz dasturlaridan Hadoop-ga qadar taqdim etishi mumkin. xizmatlar.Avro ​​kodlangan ma'lumotlarni tuzish uchun sxemadan foydalanadi. Uning sxemasi ikki xil tilga ega; biri odam tahriri uchun (Avro IDL), ikkinchisi esa JSON asosida mashinada o'qilishi mumkin.[3]

Bunga o'xshash Tejamkorlik va Protokol buferlari, lekin qachon kod ishlab chiqarish dasturini ishga tushirishni talab qilmaydi sxema o'zgarishlar (agar kerak bo'lmasa) statik usulda yozilgan tillar).

Apache Spark SQL ma'lumotlar manbai sifatida Avro-ga kirishi mumkin.[4]

Avro ob'ekt konteyner fayli

Avro ob'ekt konteyner fayli quyidagilardan iborat.[5]

  • Fayl sarlavhasi, so'ngra
  • bir yoki bir nechta fayl ma'lumot bloklari.

Fayl sarlavhasi quyidagilardan iborat:

  • To'rt bayt, ASCII 'O', 'b', 'j', so'ngra 1 (0x01) bo'lgan Avro versiya raqami (Ikkilik qiymatlar 0x4F 0x62 0x6A 0x01).
  • Fayl metama'lumotlari, shu jumladan sxema ta'rifi.
  • Ushbu fayl uchun 16 baytli, tasodifiy ravishda yaratilgan sinxronizatsiya belgisi.

Ma'lumot bloklari uchun Avro ikkita ketma-ketlik kodlashini belgilaydi:[6] ikkilik va JSON. Ko'pgina dasturlarda ikkilik kodlash qo'llaniladi, chunki u kichikroq va tezroq. Nosozliklarni tuzatish va veb-ga asoslangan dasturlar uchun ba'zan JSON kodlash mos bo'lishi mumkin.

Sxemaning ta'rifi

Avro sxemalari JSON yordamida aniqlanadi. Sxemalar ibtidoiy turlardan (null, boolean, int, long, float, double, bayt va string) va murakkab turlardan (yozuv, enum, massiv, xarita, birlashma va sobit) iborat.[7]

Oddiy sxema misoli:

 {   "nom maydoni": "example.avro",   "turi": "yozuv",   "ism": "Foydalanuvchi",   "maydonlar": [      {"ism": "ism", "turi": "string"},      {"ism": "sevimli_ raqam",  "turi": ["bekor", "int"]},      {"ism": "favorit_color", "turi": ["bekor", "string"]}   ]  }

Serializatsiya va deserializatsiya

Avro-dagi ma'lumotlar mos keladigan sxema bilan saqlanishi mumkin, ya'ni ketma-ket elementni sxemani oldindan bilmasdan o'qish mumkin.

Python-dagi seriyalash va deserializatsiya kodining misoli

Serializatsiya:[8]

Import avro.schemadan avro.datafile Import DataFileReader, DataFileWriterdan avro.io Import DatumReader, DatumWritersxema = avro.sxema.Ajratish(ochiq("user.avsc", "rb").o'qing())  # yozish uchun sxemani bilishi kerak. Apache Avro 1.8.2-ga binoanyozuvchi = DataFileWriter(ochiq("users.avro", "wb"), DatumWriter(), sxema)yozuvchi.qo'shib qo'ying({"ism": "Alyssa", "sevimli_ raqam": 256})yozuvchi.qo'shib qo'ying({"ism": "Ben", "sevimli_ raqam": 7, "favorit_color": "qizil"})yozuvchi.yaqin()

"Users.avro" fayli JSON-dagi sxemani va ixcham ikkilik tasvirni o'z ichiga oladi[9] ma'lumotlar:

$ od -v -t x1z foydalanuvchilar.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 "," nom maydoni<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  >"," maydonlar ": [{"<0000160 74 79 70 65 22 3a 20 22 73 74 72 69 6e 67 22 2c  >turi ":" string ",<0000200 20 22 6e 61 6d 65 22 3a 20 22 6e 61 6d 65 22 7d  > "ism": "ism"}<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 ":" favqulodda_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  >uz .... qizil ..... GT<0000460 62 bf 68 95 a2 ab 42 ef 24                       >b.h ... B. $<0000471

Deserializatsiya:

o'quvchi = DataFileReader(ochiq("users.avro", "rb"), DatumReader())  # sxema ma'lumotlar fayliga kiritilganuchun foydalanuvchi yilda o'quvchi:    chop etish foydalanuvchio'quvchi.yaqin()

Ushbu natijalar:

{siz"sevimli_ rang": Yo'q, siz'sevimli_number': 256, siz"ism": siz"Alyssa"}{siz"sevimli_ rang": siz"qizil", siz'sevimli_number': 7, siz"ism": siz"Ben"}

API-larga ega tillar

Nazariy jihatdan har qanday til Avro-dan foydalanishi mumkin bo'lsa-da, quyidagi tillarda ular uchun API-lar yozilgan:[10][11]

Avro IDL

JSON-ni turdagi va protokol ta'riflari uchun qo'llab-quvvatlashdan tashqari, Avro eksperimentalni ham o'z ichiga oladi[18] alternativani qo'llab-quvvatlash interfeys tavsiflash tili (IDL) sintaksisi Avro IDL nomi bilan tanilgan. Ilgari GenAvro nomi bilan tanilgan ushbu format C / C ++ ga o'xshash sintaksisga ega bo'lgan an'anaviy IDL va dasturlash tillarini yaxshi biladigan foydalanuvchilar tomonidan qabul qilinishini engillashtirish uchun mo'ljallangan. Protokol buferlari va boshqalar.

Apache Avro logotipi ishlamay qolgan Britaniyaning samolyot ishlab chiqaruvchisidir Avro (dastlab A.V. Roe and Company).[19] Futbol jamoasi Avro F.C. xuddi shu logotipdan foydalanadi.[20]

Shuningdek qarang

Adabiyotlar

  1. ^ "Apache Avro: ma'lumotlar almashinuvi uchun yangi format". blog.cloudera.com. Olingan 10 mart, 2019.
  2. ^ "Apache Avro ™ nashrlari". avro.apache.org. Olingan 3 dekabr, 2020.
  3. ^ Kleppmann, Martin (2017). Ma'lumotni zich ishlatadigan dasturlarni loyihalash (Birinchi nashr). O'Rayli. p. 122.
  4. ^ "In-Hadoop Analytics-ning katta bitim bo'lishining 3 sababi - Datakonomiya". dataconomy.com. 2016 yil 21 aprel.
  5. ^ "Apache Avro ™ spetsifikatsiyasi: ob'ekt konteynerlari fayllari". avro.apache.org. Olingan 10 mart, 2019.
  6. ^ "Apache Avro ™ spetsifikatsiyasi: kodlash". avro.apache.org. Olingan 11 mart, 2019.
  7. ^ "Apache Avro ™ ishini boshlash (Python)". avro.apache.org. Olingan 11 mart, 2019.
  8. ^ "Apache Avro ™ ishini boshlash (Python)". avro.apache.org. Olingan 11 mart, 2019.
  9. ^ "Apache Avro ™ spetsifikatsiyasi: ma'lumotlar ketma-ketligi". avro.apache.org. Olingan 11 mart, 2019.
  10. ^ funt. "GitHub - phunt / avro-rpc-quickstart: Apache Avro RPC Quick Start. Avro - bu Apache Hadoop subprojecti". GitHub. Olingan 13 aprel, 2016.
  11. ^ "Qo'llab-quvvatlanadigan tillar - Apache Avro - Apache Software Foundation". Olingan 21 aprel, 2016.
  12. ^ "Avro: 1.5.1 - ASF JIRA". Olingan 13 aprel, 2016.
  13. ^ "[AVRO-533] .NET dasturini amalga oshirish Avro - ASF JIRA". Olingan 13 aprel, 2016.
  14. ^ "Qo'llab-quvvatlanadigan tillar". Olingan 13 aprel, 2016.
  15. ^ "Avro-ning mahalliy Haskell dasturini amalga oshirish". Tomas M. DuBuisson, Galois, Inc. Olingan 8 avgust, 2016.
  16. ^ "Avro spetsifikatsiyasining sof JavaScript dasturi". Olingan 4-may, 2020.
  17. ^ "Avro mijozlar kutubxonasini Rustga tatbiq etish". Olingan 17 dekabr, 2018.
  18. ^ "Apache Avro 1.8.2 IDL". Olingan 11 mart, 2019.
  19. ^ "Avro logotipi". avroheritagemuseum.co.uk. Olingan 31 dekabr, 2018.
  20. ^ "AVRO F.C." avrojfc.org. Olingan 31 dekabr, 2018.

Qo'shimcha o'qish