Fejlesztette | Apache Software Foundation |
---|---|
Az első verzió | 2011. január 11 |
Utolsó verzió | 1.10.2 (2021. március 17) |
Letét | github.com/apache/avro , svn.apache.org/repos/asf/avro és svn.apache.org/repos/asf/avro |
Beírva | Java , C , C ++ , C # , PHP , Python és Ruby |
típus | Az adatok sorosítási formátuma ( d ) |
Engedély | Apache licenc 2.0 verzió |
Weboldal | avro.apache.org |
Avro egy távoli eljárás hívás és az adatok sorszámozás keret belül kialakított Apache Hadoop projekt. A JSON- t használja az adattípusok és protokollok meghatározásához , és kompaktabb bináris formátumban sorosítja az adatokat. A fő felhasználási terület az Apache Hadoop , ahol mind a sorosítási formátumot biztosíthatja a tartós adatok számára, mind a "drótváz" formátumot a Hadoop csomópontok közötti kommunikációhoz, valamint a Hadoop szolgáltatások ügyfélprogramjait.
Hasonló az Apache Thrift és a Protokoll pufferekhez , de nem igényel kódgeneráló program futtatását a sémaváltás során (kivéve, ha statikusan beírt nyelveknél ez szükséges).
Az Avro-t az Apache Spark SQL felismeri és elfogadja adatforrásként.
Az Avro Object Container fájl a következőkből áll:
A fejléc a következőkből áll:
Adatblokkokhoz az Avro két sorosítási kódolást határoz meg: bináris és JSON. A legtöbb alkalmazás bináris kódolást fog használni, mert kisebb és gyorsabb. Hibakereséshez és webes alkalmazásokhoz néha a JSON-kódolás is megfelelő lehet.
Az Avro-ban a sémákat a JSON segítségével definiálják. Ezek primitívek (null, logikai, int, hosszú, úszó, dupla, bájtok, húrok) vagy összetett típusok (rekord, enum, tömb, térkép, unió, fix).
Példa diagramra:
{ "namespace": "example.avro", "type": "record", "name": "User", "fields": [ {"name": "name", "type": "string"}, {"name": "favorite_number", "type": ["int", "null"]}, {"name": "favorite_color", "type": ["string", "null"]} ] }Az Avro-ban tárolt adatok a megfelelő sémával együtt tárolhatók, ami azt jelenti, hogy a sorosított cikk elolvasható a séma előzetes ismerete nélkül.
Serializálás:
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()A "users.avro" fájl tartalmazza a JSON-sémát és az adatok kompakt bináris ábrázolását:
$ 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 0000471Deserializáció:
Kimenet:
Bár elvileg bármilyen típusú nyelv használható az Avro-val, a következő nyelvek rendelkeznek API-val:
A JSON támogatása a típusok és a protokolldefiníciók mellett az Avro kísérleti támogatást tartalmaz egy másik interfészleíró nyelv (IDL) szintaxisának, amely Avro IDL néven ismert. Korábban GenAvro néven ismert formátum célja, hogy megkönnyítse a hagyományos IDL-ekben és programozási nyelvekben jártas felhasználók általi elfogadását, a C / C ++, a Protokoll pufferek és mások szintaxisához hasonlóan.