Apache Avro

Apache Avro

Tiedot
Kehittäjä Apache-ohjelmistosäätiö
Ensimmäinen versio 11. tammikuuta 2011
Viimeinen versio 1.10.2 (17. maaliskuuta 2021)
Tallettaa github.com/apache/avro , svn.apache.org/repos/asf/avro ja svn.apache.org/repos/asf/avro
Kirjoitettu Java , C , C ++ , C # , PHP , Python ja Ruby
Tyyppi Tietojen sarjallisuusmuoto ( d )
Lisenssi Apache-lisenssiversio 2.0
Verkkosivusto avro.apache.org

Avro on etäproseduurikutsun ja  tietojen serialization puitteissa kehitettiin Apache Hadoop projektin. Se käyttää JSON- ohjelmaa tietotyyppien ja protokollien määrittelemiseen ja sarjoittaa tiedot pienemmässä binaarimuodossa. Ensisijainen käyttö on Apache Hadoopissa , jossa se voi tarjota sekä sarjaliitäntämuodon pysyvälle datalle että "lankakehys" -moodin Hadoop-solmujen väliselle viestinnälle ja asiakasohjelmat Hadoop-palveluille.

Se on samanlainen kuin Apache Thrift ja  Protocol Buffers , mutta se ei vaadi koodin luontiohjelman suorittamista skeemamuutoksen aikana (ellei sitä suositella staattisesti kirjoitetuille kielille).

Apache Spark SQL tunnistaa ja hyväksyy Avron tietolähteenä.

Avro Object Container -tiedosto

Avro Object Container -tiedosto koostuu:

Otsikko koostuu:

Datalohkoille Avro määrittää kaksi sarjakoodausta: binaarisen ja JSON. Suurin osa sovelluksista käyttää binaarikoodausta, koska se on pienempi ja nopeampi. Virheenkorjaukseen ja verkkosovelluksiin joskus JSON-koodaus voi olla sopiva.

Määritelmä skeema

Avrossa skeemat määritetään JSON: n avulla. Ne koostuvat primitiivisistä tyypeistä (nolla, looginen, int, pitkä, kelluva, kaksinkertainen, tavu, merkkijono) tai monimutkaisista (tietue, enum, taulukko, kartta, unioni, kiinteä).

Esimerkki kaaviosta:

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

Sarjallisuus ja deserialisaatio

Avron tiedot voidaan tallentaa vastaavan skeeman kanssa, mikä tarkoittaa, että sarjatuotettu artikkeli voidaan lukea tuntematta skeemaa etukäteen.

Esimerkki koodin sarjasta ja deserialisoinnista Pythonissa

Sarjaaminen:

import avro.schema from avro.datafile import DataFileReader, DataFileWriter from avro.io import DatumReader, DatumWriter schema = avro.schema.parse(open("user.avsc").read()) # nécessite la connaissance du schéma pour pouvoir ecrire writer = DataFileWriter(open("users.avro", "w"), DatumWriter(), schema) writer.append({"name": "Alyssa", "favorite_number": 256}) writer.append({"name": "Ben", "favorite_number": 7, "favorite_color": "red"}) writer.close()

Tiedosto "users.avro" sisältää JSON-skeeman ja kompaktin binäärisen esityksen tiedoista:

$ od -c users.avro 0000000 O b j 001 004 026 a v r o . s c h e m 0000020 a 272 003 { " t y p e "  : " r e c 0000040 o r d " , " n a m e s p a c e 0000060 "  : " e x a m p l e . a v r o 0000100 " , " n a m e "  : " U s e r 0000120 " , " f i e l d s "  : [ { " 0000140 t y p e "  : " s t r i n g " , 0000160 " n a m e "  : " n a m e " } 0000200 , { " t y p e "  : [ " i n t 0000220 " , " n u l l " ] , " n a m 0000240 e "  : " f a v o r i t e _ n u 0000260 m b e r " } , { " t y p e "  : 0000300 [ " s t r i n g " , " n u l 0000320 l " ] , " n a m e "  : " f a 0000340 v o r i t e _ c o l o r " } ] } 0000360 024 a v r o . c o d e c \b n u l l 0000400 \0 211 266 / 030 334 ˪ ** P 314 341 267 234 310 5 213 0000420 6 004 , \f A l y s s a \0 200 004 002 006 B 0000440 e n \0 016 \0 006 r e d 211 266 / 030 334 ˪ ** 0000460 P 314 341 267 234 310 5 213 6 0000471

Deserialisaatio:


reader = DataFileReader(open("users.avro", "r"), DatumReader()) # nécessite la connaissance du schéma pour pouvoir lire for user in reader: print user reader.close()


Tuotos:


{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'}

Kielet, joissa on sovellusliittymät

Vaikka periaatteessa on mahdollista käyttää mitä tahansa kieltä Avron kanssa, seuraavilla kielillä on API:

Avro IDL

Sen lisäksi, että Avro tukee JSON-protokollaa tyyppejä ja määritelmiä varten, Avro sisältää kokeellisen tuen toiselle käyttöliittymän kuvauskielen (IDL) syntaksille, joka tunnetaan nimellä Avro IDL. Aikaisemmin nimellä GenAvro, tämä muoto on suunniteltu helpottamaan sen käyttöönottoa käyttäjille, jotka tuntevat perinteisemmät IDL- ja ohjelmointikielet.Syntaksi on samanlainen kuin C / C ++, Protocol Buffers ja muut.

Katso myös

Viitteet

  1. "  https://projects.apache.org/json/projects/avro.json  " (käytetty 8. huhtikuuta 2020 )
  2. Release 1.10.2  " ,17. maaliskuuta 2021(käytetty 9. huhtikuuta 2021 )
  3. (in) "  3 Syyt Miksi In Hadoop Analytics ovat iso juttu - Dataconomy  " on Dataconomy ,21. huhtikuuta 2016(käytetty 28. elokuuta 2020 ) .
  4. "  Apache Avro ™ Specification: Object Container Files  " , osoitteessa avro.apache.org (käytetty 27. syyskuuta 2016 )
  5. "  Apache Avro ™ 1.8.2 Specification  " osoitteessa avro.apache.org (käytetty 19. lokakuuta 2017 )
  6. "  Apache Avro ™ Getting Started == (Python)  " osoitteessa avro.apache.org (käytetty 16. kesäkuuta 2016 )
  7. "  Apache Avro ™ Getting Started (Python)  " osoitteessa avro.apache.org (käytetty 16. kesäkuuta 2016 )
  8. "  Apache Avro ™ Specification: Data Serialization  " osoitteessa avro.apache.org (käytetty 16. kesäkuuta 2016 )
  9. phunt, “  GitHub - phunt / avro-rpc-quickstart: Apache Avro RPC -pikaopas. Avro on Apache Hadoopin aliprojekti.  » , GitHub , GitHubissa (luettu 13. huhtikuuta 2016 )
  10. "  Tuetut kielet - Apache Avro - Apache Software Foundation  " (käytetty 21. huhtikuuta 2016 )
  11. "  Avro: 1.5.1 - ASF JIRA  " ( katsottu 13. huhtikuuta 2016 )
  12. "  [AVRO-533] .NET-toteutus Avro - ASF JIRA  " (käytetty 13. huhtikuuta 2016 )
  13. "  Tuetut kielet  " (käytetty 13. huhtikuuta 2016 )
  14. "  Native Haskell Implementation of Avro  " , Thomas M.DuBuisson, Galois, Inc. (käytetty 8. elokuuta 2016 )

Bibliografia

  • Tom White , Hadoop: Lopullinen opas ,marraskuu 2010( ISBN  978-1-4493-8973-4 )