vendredi 27 janvier 2017

apache avro

Résultat de recherche d'images pour "apache avro"

Avro est un appel de procédure à distance et une structure de sérialisation de données développée dans le projet Hadoop d'Apache. Il utilise JSON pour définir les types de données et les protocoles, et sérialise les données dans un format binaire compact. Son utilisation principale est Apache Hadoop, où il peut fournir à la fois un format de sérialisation pour les données persistantes, et un format fil pour la communication entre les noeuds Hadoop, et des programmes clients aux services Hadoop.

Il est semblable à Thrift, mais ne nécessite pas d'exécuter un programme de génération de code quand un schéma change (sauf si désiré pour les langues statiquement-typées).

Apache Spark SQL peut accéder à Avro en tant que source de données.
Un fichier conteneur d'objets Avro se compose de:

Un en-tête de fichier, suivi de
Un ou plusieurs blocs de données de fichier.
Un en-tête de fichier se compose de:

Quatre octets, ASCII 'O', 'b', 'j', suivis de 1.
Des métadonnées de fichier, y compris la définition du schéma.
Le marqueur de synchronisation de 16 octets, généré de façon aléatoire pour ce fichier.
Pour les blocs de données Avro spécifie deux encodages de sérialisation: [3] binaire et JSON. La plupart des applications utilisent le codage binaire, car il est plus petit et plus rapide. Pour le débogage et les applications Web, l'encodage JSON peut parfois être approprié.
Définition du schéma
Les schémas Avro sont définis à l'aide de JSON. Les schémas sont composés de types primitifs (null, boolean, int, long, flottant, double, octets et chaîne) et des types complexes (record, enum, array, map, union et fixed).

Exemple de schéma simple:
{
   "namespace": "example.avro",
   "type": "record",
   "name": "User",
   "fields": [
      {"name": "name", "type": "string"},
      {"name": "favorite_number",  "type": ["int", "null"]},
      {"name": "favorite_color", "type": ["string", "null"]}
   ] 
 }

Sérialisation et désérialisation
Les données d'Avro peuvent être stockées avec leur schéma correspondant, ce qui signifie que l'élément sérialisé peut être lu sans connaître le schéma à l'avance.

Exemple de code de sérialisation et de désérialisation en Python
Sérialisation:
import avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter

schema = avro.schema.parse(open("user.avsc").read())  # need to know the schema to write

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

Author:

0 commentaires: