Apache Avro

Apache Avro

Információ
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.

Avro Object Container File

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.

Séma meghatározása

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"]} ] }

Serializáció és deserializáció

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.

Példa a sorozat sorosítására és deserializálására a Pythonban

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 0000471

Deserializáció:


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()


Kimenet:


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

Nyelvek API-kkal

Bár elvileg bármilyen típusú nyelv használható az Avro-val, a következő nyelvek rendelkeznek API-val:

Avro IDL

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.

Lásd is

Hivatkozások

  1. "  https://projects.apache.org/json/projects/avro.json  " (hozzáférés : 2020. április 8. )
  2. 1.10.2. Kiadás  " ,2021. március 17(elérhető : 2021. április 9. )
  3. (in) "  3 ok, amiért a Hadoop-elemzés nagy ügylet - Adatgazdaságtan  " az Adatgazdaságtanról ,2016. április 21(megtekintés : 2020. augusztus 28. ) .
  4. "  Apache Avro ™ Specification: Object Container Files  " , az avro.apache.org címen (hozzáférés : 2016. szeptember 27. )
  5. "  Apache Avro ™ 1.8.2 Specification  " az avro.apache.org címen (elérhető : 2017. október 19. )
  6. "  Apache Avro ™ Getting Started == (Python)  " az avro.apache.org címen (hozzáférés : 2016. június 16. )
  7. "  Apache Avro ™ Getting Started (Python)  " az avro.apache.org címen (hozzáférés : 2016. június 16. )
  8. "  Apache Avro ™ Specification: Data Serialization  " az avro.apache.org címen (hozzáférés : 2016. június 16. )
  9. phunt, „  GitHub - phunt / avro-rpc-quickstart: Apache Avro RPC gyorsindítás. Az Avro az Apache Hadoop alprojektje.  » , GitHub , a GitHubon (megtekintve : 2016. április 13. )
  10. "  Támogatott nyelvek - Apache Avro - Apache Software Foundation  " (hozzáférés : 2016. április 21. )
  11. "  Avro: 1.5.1 - ASF JIRA  " (hozzáférés : 2016. április 13. )
  12. "  [AVRO-533] .NET implementation of Avro - ASF JIRA  " (hozzáférés : 2016. április 13. )
  13. "  Támogatott nyelvek  " (hozzáférés : 2016. április 13. )
  14. Avative Native Haskell implementációja  " , Thomas M. DuBuisson, Galois, Inc. (hozzáférés : 2016. augusztus 8. )

Bibliográfia

  • Tom White , Hadoop: A végleges útmutató ,2010. november( ISBN  978-1-4493-8973-4 )