Par Maxime Jumelle
CTO & Co-Founder
Publié le 15 mai 2023
Catégorie Data Engineering
Apache Avro est un système de sérialisation de données et un format de données compact, rapide et polyvalent. Il a été développé par Apache Software Foundation et est conçu pour faciliter l'échange de données entre les différentes applications. Contrairement à d'autres formats comme CSV ou JSON, une des grandes particularités d'Apache Avro est qu'il utilise un schéma pour définir la structure des données, ce qui permet de sérialiser et de désérialiser les données de manière efficace, tout en garantissant la compatibilité entre les différentes versions des schémas. Cela signifie que les données sérialisées avec un certain schéma peuvent être lues et interprétées correctement même si le schéma a été mis à jour.
Dans cet aricle, nous allons voir en quoi Apache Avro est une alternative très robuste pour la sérialisation de données par rapport aux formats traditionnels.
L'histoire d'Apache Avro remonte à l'année 2009, lorsque Doug Cutting, créateur d'Apache Lucene et co-créateur d'Apache Hadoop, a proposé la création d'un nouveau projet au sein de la fondation Apache. Ce projet visait à développer un système de sérialisation de données rapide et efficace, capable de faciliter l'échange de données entre différentes applications.
La proposition a été acceptée et le projet a été baptisé "Avro", et a été initialement développé en Java. Par la suite, il a été petit à petit porté dans d'autres langages de programmation tels que C, C++, C#, Python et Ruby. Son développement initial était axé sur l'intégration avec Apache Hadoop, un framework de traitement distribué pour le Big Data.
L'un des principaux objectifs de la conception d'Avro était de fournir un système de sérialisation efficace, capable de gérer l'évolution des schémas de données. Avro utilise des schémas définis au format JSON pour décrire la structure des données. Ces schémas permettent de sérialiser les données de manière compacte, tout en conservant des informations sur la structure des données elles-mêmes.
À lire aussi : découvrez notre formation Data Engineer
Comme évoqué à plusieurs reprises, Avro fonctionne en utilisant un schéma pour décrire la structure des données et en fournissant des mécanismes de sérialisation et de désérialisation efficaces.
La première étape est la définition du schéma : tilise un schéma défini au format JSON pour décrire la structure des données. Le schéma spécifie les champs, leur type et leur ordre. Il peut également inclure des métadonnées supplémentaires telles que des noms, des espaces de noms et des docstrings pour documenter les données. Nous retrouvons la plupart des types élémentaires (null
, int
, float
, string
, ...) mais également des types plus complexes (record
, enum
, array
, ...).
{ "type": "record", "name": "schema", "namespace": "org.blent.schema", "fields": [ { "name": "fname", "type": "string" }, { "name": "lname", "type": "string" }, { "name": "age", "type": ["int", "null"] } ] }
En regardant le champ fields
, il y a trois champs enregistrés par le schéma.
fname
, de type string
.lname
, de type string
.age
, de type int
mais qui peut être manquant.Ensuite, à partir du schéma, Avro peut générer du code source dans différents langages de programmation (par exemple, Java, C#, Python). Ce code généré facilite la sérialisation et la désérialisation des données selon le schéma spécifié.
Lorsque des données doivent être sérialisées, Avro utilise le schéma correspondant pour encoder les données dans un format binaire compact. La sérialisation inclut également des informations sur le schéma lui-même, ce qui permet à Avro de traiter les éventuelles évolutions du schéma lors de la désérialisation.
Les données sérialisées peuvent être stockées dans des fichiers ou transmises sur un réseau. Grâce au format binaire compact utilisé pour minimiser la taille des données, cela permet de réduire l'espace de stockage nécessaire et la bande passante requise pour l'échange de données.
Bien entendu, le principal intérêt de sérialiser les données au format binaire, outre le gain de place, réside également dans la capacité à désérialiser dans le même format et avec une forte consistance. Lorsque des données sérialisées doivent être lues ou utilisées, Avro utilise le schéma correspondant pour décoder les données binaires et les retransformer en une structure de données utilisable dans le langage de programmation cible.
Au même titre que certains formats de données comme Apache Parquet, le principal intérêt est de pouvoir lire des données sans avoir besoin d'inférer sur le type des colonnes, contrairement aux formats classiques comme CSV ou JSON qui ne contiennent pas de schémas de données, et dont l'outil utilisé (Pandas, Apache Spark, etc) nécessite un schéma de données en plus.
Enfin, bien qu'un schéma peut sembler ajouter une contrainte forte en matière d'évolutivité sur le format des donées, Avro est conçu pour gérer la modification des schémas de données au fil du temps. Lors de la désérialisation, Avro peut interpréter les données sérialisées en utilisant le schéma actuel, tout en étant capable de traiter les anciennes versions du schéma. Cela garantit la compatibilité entre les différentes versions des schémas lors de l'échange de données.
Cette capacité à gérer plusieurs schémas de données est très importante, car de nombreuses situations exigent de mettre à jour des données pour des besoins opérationnels différents. En règle générale, pour gérer une multitude de schémas et de versions associées, les entreprises utilisent souvent des registre de schémas que les applications peuvent utiliser pour déterminer quels schémas et quelles versions à utiliser pour lire tel fichier.
Apache Avro présente plusieurs avantages qui en font un choix populaire pour la sérialisation de données et l'échange de données entre les applications.
À lire aussi : découvrez notre formation Data Engineer
Néanmoins, l'utilisation d'un schéma peut constituer un inconvénient dans certaines situations. En effet, la définition des schémas Avro peut être complexe, en particulier pour les structures de données complexes ou les schémas imbriqués. La gestion des schémas peut demander une attention et une expertise supplémentaires, surtout lorsque des modifications de schéma sont nécessaires.
De plus, Avro est basé sur des schémas définis de manière explicite, ce qui signifie que la sérialisation et la désérialisation des données nécessitent que les schémas correspondants soient disponibles. Si un schéma n'est pas disponible ou incompatible, cela peut entraîner des erreurs lors de la lecture ou de l'écriture des données.
Enfin, bien qu'Avro nous offre la possibilité d'évoluer les schémas de données, cela peut être un processus complexe, en particulier lorsqu'il s'agit de gérer les schémas en production et d'assurer la compatibilité avec les versions précédentes. La gestion de la compatibilité entre les différentes versions de schéma peut nécessiter une planification et une gestion adéquates.
En résumé, Apache Avro est un excellent choix pour la sérialisation de données au format binaire, à la fois avec le gain de place lors du stockage, mais aussi grâce à l'utilisation d'un schéma. En revanche, ce dernier point rajoute une complexité à l'utilisation de ce format de données, contrairement aux formats plus standards comme CSV ou JSON.
Vous souhaitez vous former au Data Engineering ?
Articles similaires
7 févr. 2024
Pendant de nombreuses années, le rôle des Data Engineers était de récupérer des données issues de différentes sources, systèmes de stockage et applications tierces et de les centraliser dans un Data Warehouse, dans le but de pouvoir obtenir une vision complète et organisée des données disponibles.
Maxime Jumelle
CTO & Co-Founder
Lire l'article
4 déc. 2023
Pour de nombreuses entreprises, la mise en place et la maintenant de pipelines de données est une étape cruciale pour avoir à disposition d'une vue d'ensemble nette de toutes les données à disposition. Un des challenges quotidien pour les Data Analysts et Data Engineers consiste à s'assurer que ces pipelines de données puissent répondre aux besoins de toutes les équipes d'une entreprise.
Maxime Jumelle
CTO & Co-Founder
Lire l'article
14 nov. 2023
Pour améliorer les opérations commerciales et maintenir la compétitivité, il est essentiel de gérer efficacement les données en entreprise. Cependant, la diversité des sources de données, leur complexité croissante et la façon dont elles sont stockées peuvent rapidement devenir un problème important.
Maxime Jumelle
CTO & Co-Founder
Lire l'article
60 rue François 1er
75008 Paris
Blent est une plateforme 100% en ligne pour se former aux métiers Tech & Data.
Organisme de formation n°11755985075.
Data Engineering
IA Générative
MLOps
Cloud & DevOps
À propos
Gestion des cookies
© 2024 Blent.ai | Tous droits réservés