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 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.
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"]} ] }Avron tiedot voidaan tallentaa vastaavan skeeman kanssa, mikä tarkoittaa, että sarjatuotettu artikkeli voidaan lukea tuntematta skeemaa etukäteen.
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 0000471Deserialisaatio:
Tuotos:
Vaikka periaatteessa on mahdollista käyttää mitä tahansa kieltä Avron kanssa, seuraavilla kielillä on API:
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.