cours
Avro vs. Parquet : Une comparaison complète pour le stockage des Big Data
Un stockage efficace des données est un élément essentiel de tout système de big data. Avro et Parquet sont deux formats largement utilisés, chacun conçu pour des charges de travail différentes - Avro excelle dans la diffusion en continu et l'évolution des schémas, tandis que Parquet est optimisé pour l'analyse et l'efficacité du stockage. Il est essentiel de comprendre leurs différences pour créer des pipelines de données évolutifs.
Ce guide présente leur architecture, leurs cas d'utilisation et la manière dont ils s'intègrent dans les flux de données modernes.
Qu'est-ce qu'Avro ?
Avro est un format de stockage basé sur les lignes développé pour le projet Apache Hadoop. Il est conçu pour sérialiser efficacement les données en vue de leur échange entre systèmes, ce qui le rend particulièrement utile pour les plateformes de données en continu et les applications distribuées.
Avro définit les schémas en utilisant JSON pour la lisibilité humaine, mais les données réelles sont stockées dans un format binaire compact pour des raisons d'efficacité. Cette conception permet une gestion aisée des schémas et une sérialisation rapide.
Caractéristiques d'Avro
Avro offre plusieurs avantages, notamment en termes d'évolution des schémas et d'efficacité du stockage :
- Évolution du schéma : Avro intègre des métadonnées de schéma dans les données, ce qui permet une évolution transparente des schémas. Cela signifie que de nouveaux champs peuvent être ajoutés ou que des champs existants peuvent être modifiés sans nécessiter une réécriture complète de l'ensemble de données, ce qui rend Avro très flexible pour les pipelines de données.
- Sérialisation compacte : La sérialisation binaire d'Avro minimise la charge de stockage et améliore les performances dans les scénarios d'échange de données. Il est particulièrement utile dans les environnements où une sérialisation et une désérialisation efficaces sont cruciales, comme les files d'attente de messagerie et les flux de données.
Cas d'utilisation pour Avro
- Systèmes de streaming et de messagerie - couramment utilisésdans Apache Kafka pour une sérialisation efficace des événements.
- Échange de données et interopérabilité - Idéal pour partager des données structurées entre différentes applications.
- Stockage orienté lignes - Fonctionne bien pour les charges de travail où les données doivent être écrites et lues séquentiellement par lignes.
Qu'est-ce que le parquet ?
Parquet est un format de stockage en colonnes optimisé pour les charges de travail analytiques à haute performance. Contrairement aux formats basés sur les lignes comme Avro, Parquet stocke les données par colonnes, ce qui le rend nettement plus efficace pour l'analyse des données volumineuses. Développé par Apache, Parquet est largement utilisé dans les entrepôts de données et les cadres de calcul distribuétravaux tels que Apache Spark et Hadoop.
Caractéristiques du parquet
Parquet est conçu pour la performance analytique et offre des avantages clés tels que
- Stockage en colonnes : Comme Parquet stocke les données par colonne, les requêtes peuvent efficacement analyser uniquement les colonnes requises au lieu de charger des lignes entières. Cela réduit les E/S sur disque, ce qui permet d'accélérer les performances des requêtes, en particulier pour les charges de travail à forte intensité de lecture.
- Compression efficace : Parquet utilise des techniques de compression avancées telles que l'encodage de dictionnaires, l'encodage de longueurs d'exécution et l'empaquetage de bits, ce qui permet de réduire les coûts de stockage tout en maintenant des vitesses d'interrogation élevées. Les types de données similaires étant stockés ensemble, Parquet permet d'obtenir une meilleure compression que les formats basés sur des lignes.
Cas d'utilisation de Parquet
- Entreposage de données et analyse - Utilisé dans des plateformes comme Amazon Redshift, Google BigQuery et Snowflake.
- Traitement des données volumineuses - Optimisé pour les frameworks de calcul distribué tels que Apache Spark et Presto.
- Performances d'interrogation efficaces - Idéal pour les charges de travail lourdes en lecture où seules des colonnes spécifiques sont nécessaires.
Pour en savoir plus sur Parquet et apprendre à l'utiliser en pratique, consultez le tutoriel Apache Parquet.
Devenez ingénieur en données
Différences entre Avro et Parquet
Avro et Parquet sont des formats de stockage de données largement utilisés dans les écosystèmes de big data, mais ils ont des objectifs différents et excellent dans des scénarios différents. Vous trouverez ci-dessous une comparaison détaillée de leurs différences.
Structure des données
- Avro : Utilise un format de stockage basé sur les lignes, ce qui signifie que les enregistrements entiers sont stockés de manière séquentielle. Avro est donc efficace pour les charges de travail à forte intensité d'écriture où les données doivent être ajoutées rapidement.
- Parquet : Utilise un format de stockage en colonnes, où les données sont stockées par colonnes plutôt que par lignes. Cette structure est utile pour les requêtes analytiques qui nécessitent de lire uniquement des colonnes spécifiques plutôt que des lignes entières.
Visualisation du stockage en ligne ou en colonne
Pour mieux comprendre la différence entre le stockage basé sur les lignes (Avro) et le stockage basé sur les colonnes (Parquet), examinez cet ensemble de données :
ID |
Nom |
L'âge |
Ville |
101 |
Alice |
25 |
New York (en anglais) |
102 |
Bob |
30 |
Chicago |
103 |
Carole |
28 |
Seattle |
La façon dont Avro stocke les données (par ligne) :
- [101, Alice, 25, New York]
- [102, Bob, 30, Chicago]
- [103, Carol, 28, Seattle]
Chaque enregistrement est stocké de manière séquentielle, ce qui le rend efficace pour les opérations d'écriture mais plus lent pour l'interrogation de champs spécifiques.
Comment Parquet stocke les données (en colonnes) :
- ID : [101, 102, 103]
- Nom : [Alice, Bob, Carol]
- Âge : [25, 30, 28]
- Ville : [New York, Chicago, Seattle]
Chaque colonne est stockée séparément, ce qui permet d'extraire plus rapidement les colonnes nécessaires (par exemple, la colonne "Âge").
Évolution du schéma
- Avro : Conçu pour l'évolution des schémas, il permet d'ajouter ou de modifier de nouveaux champs sans compromettre la compatibilité avec les données plus anciennes. Le schéma est stocké avec les données, ce qui le rend auto-descriptif.
- Parquet : Prend en charge l'évolution des schémas, mais est moins flexible qu'Avro. Les modifications de schéma peuvent être plus complexes, notamment lorsqu'il s'agit d'ajouter ou de modifier des structures de colonnes.
Efficacité de la compression et du stockage
- Avro : Utilise un encodage binaire compact, mais n'exploite pas les techniques de compression en colonnes, ce qui entraîne des tailles de fichiers plus importantes par rapport à Parquet.
- Parquet : Il utilise des techniques de compression en colonnes telles que l'encodage de dictionnaires, l'encodage de longueurs d'exécution et l'empilement de bits, ce qui le rend plus efficace en termes d'espace, en particulier pour les grands ensembles de données.
Performances des requêtes
- Avro : Il n'est pas optimisé pour les requêtes analytiques car il stocke les données par ligne. L'analyse de grands ensembles de données nécessite la lecture d'enregistrements entiers, ce qui ralentit les performances des requêtes dans les charges de travail analytiques.
- Parquet : Optimisé pour les requêtes rapides, en particulier lorsque seul un sous-ensemble de colonnes est nécessaire. Sa structure en colonnes permet un balayage sélectif, ce qui améliore les performances en matière d'analyse de données massives.
Efficacité en écriture et en lecture
- Avro : Il offre des vitesses d'écriture rapides puisqu'il stocke les données ligne par ligne. Toutefois, les opérations de lecture peuvent être plus lentes pour les analyses, car des lignes entières doivent être lues.
- Parquet : Optimisé pour les performances de lecture, mais peut avoir des vitesses d'écriture plus lentes en raison de la surcharge du stockage en colonnes et des techniques de compression.
Avro vs. Tableau comparatif des parquets
Fonctionnalité |
Avro |
Parquet |
Format de stockage |
Basé sur les lignes (stocke des enregistrements entiers de manière séquentielle) |
Basé sur les colonnes (stocke les données par colonnes) |
Meilleur pour |
Streaming, données événementielles, évolution des schémas |
Requêtes analytiques, analyse de données massives (big data) |
Évolution des schémas |
Excellent - le schéma est stocké avec les données, ce qui permet des mises à jour transparentes |
Limité - l'évolution des schémas est possible mais nécessite une manipulation prudente |
Compression |
Codage binaire compact mais moins optimisé pour l'analyse |
Forte compression à l'aide de techniques de compression en colonnes (codage par dictionnaire, codage par longueur d'onde, empilement de bits) |
Lire la performance |
L'analyse est plus lente car des lignes entières doivent être lues. |
Analyse plus rapide car seules les colonnes nécessaires sont lues |
Performance en matière d'écriture |
Plus rapide - ajoute rapidement des lignes entières |
Plus lent - le stockage en colonnes nécessite un traitement supplémentaire |
Efficacité des requêtes |
Inefficace pour les requêtes analytiques en raison de la structure basée sur les lignes |
Très efficace pour les requêtes analytiques puisque seules les colonnes nécessaires sont analysées. |
Taille du fichier |
Généralement plus grande en raison du stockage en ligne |
Des fichiers plus petits grâce à de meilleures techniques de compression |
Cas d'utilisation |
Architectures événementielles, systèmes de messagerie Kafka, stockage de logs |
Lacs de données, entrepôts de données, processus ETL, charges de travail analytiques |
Cadres de traitement |
Fonctionne bien avec Apache Kafka, Hadoop et Spark. |
Optimisé pour Apache Spark, Hive, Presto, Snowflake |
Prise en charge des données imbriquées |
Prend en charge les données imbriquées, mais nécessite la définition d'un schéma |
Optimisé pour les structures imbriquées, il est mieux adapté aux données hiérarchiques. |
Interopérabilité |
Largement utilisé dans les plateformes de diffusion en continu |
Préférence pour le traitement des données volumineuses et les charges de travail analytiques |
Extension de fichier |
|
|
Adoption par l'industrie primaire |
Plateformes de streaming, journalisation, pipelines en temps réel |
Entreposage de données, analyse, intelligence économique |
Quand utiliser Avro ou Parquet
Le choix entre Avro et Parquet dépend de votre cas d'utilisation spécifique, des caractéristiques de votre charge de travail et de vos exigences en matière de traitement des données. Vous trouverez ci-dessous des lignes directrices pratiques qui vous aideront à déterminer quand utiliser chaque format.
Quand utiliser Avro
Avro est le mieux adapté aux scénarios qui nécessitent une sérialisation efficace, une évolution des schémas et un stockage basé sur les lignes. Pensez à utiliser Avro dans les situations suivantes :
- Pipelines de données en continu et pilotés par les événements : Avro est largement utilisé dans les plateformes de flux de données en temps réel comme Apache Kafka en raison de son format binaire compact et de sa sérialisation efficace.
- L'évolution des schémas est fréquente : Avro est le choix préféré lorsqu'il s'agit de traiter des schémas de données évolutifs, car il incorpore le schéma dans le fichier, ce qui permet des modifications en douceur sans compromettre la compatibilité.
- Échange et intégration de données entre systèmes : Avro est couramment utilisé pour transmettre des données structurées entre différentes applications en raison de son schéma auto-descriptif et de la prise en charge de plusieurs langages de programmation.
- Charges de travail à forte intensité d'écriture : Si votre flux de travail implique des écritures ou des ajouts fréquents, Avro est plus performant que Parquet. Il stocke les données dans des rangées séquentielles sans les frais généraux de l'indexation en colonnes.
- Stockage de journaux et collecte de données brutes : Avro est souvent utilisé dans les systèmes d'enregistrement ou pour stocker des données brutes non traitées, en raison de l'efficacité de son stockage par ligne et de sa capacité à capturer des enregistrements détaillés.
Quand utiliser le parquet ?
Parquet est idéal pour les charges de travail analytiques, le traitement des données volumineuses et l'efficacité du stockage. Utilisez le parquet lorsque :
- Requêtes analytiques et entreposage de données : Si votre objectif principal est d'effectuer des requêtes rapides dans des lacs de données, des entrepôts de donnéesou dessystèmes OLAP (Online AnalyticalProcessing), la structure en colonnes de Parquet est très efficace.
- Charges de travail lourdes en lecture : Parquet est optimisé pour les scénarios dans lesquels les données sont lues fréquemment mais écrites moins souvent, tels que les tableaux de bord BI, les rapports et les analyses par lots.
- Big data et traitement distribué : Parquet est le format préféré des frameworks big data comme Apache Spark, Hive, Presto et Snowflake, où le stockage en colonnes réduit les coûts d'E/S et améliore les performances.
- Compression et optimisation du stockage : Si l'efficacité du stockage est une priorité, les techniques de compression avancées de Parquet (par exemple, l'encodage de dictionnaire, l'encodage de longueur d'exécution) réduisent de manière significative la taille des fichiers par rapport aux formats basés sur les lignes.
- Lecture sélective des colonnes et projection du schéma : Lorsque vous travaillez avec de grands ensembles de données mais que vous n'interrogez que quelques colonnes, Parquet permet un balayage sélectif des colonnes, ce qui accélère considérablement les requêtes et les rend plus rentables.
Lequel choisir ?
Scénario |
Format recommandé |
Streaming en temps réel (Kafka, logs, messagerie) |
✅ Avro |
Modifications fréquentes du schéma / évolution de la structure des données |
✅ Avro |
Stockage basé sur les rangées pour des écritures rapides |
✅ Avro |
Échange de données entre applications |
✅ Avro |
Analyse et interrogation des big data |
✅ Parquet |
Stockage et compression efficaces |
✅ Parquet |
Charges de travail lourdes en lecture (lacs de données, entreposage) |
✅ Parquet |
Interrogation et filtrage basés sur des colonnes |
✅ Parquet |
Comment Avro et Parquet fonctionnent avec les outils Big Data
Avro et Parquet sont largement utilisésdans les cadres de traitement des big data, les formes de cloud platet les environnements informatiques distribués. Vous trouverez ci-dessous un aperçu de la manière dont Avro et Parquet s'intègrent aux outils de big data les plus courants.
Apache Spark
Apache Spark est un cadre informatique distribué largement utilisé pour le traitement de grands ensembles de données. Il supporte à la fois Avro et Parquet, mais chaque format présente des avantages distincts en fonction du cas d'utilisation.
Utiliser Avro dans Apache Spark
- Avro est idéal pour l'ingestion de données et les pipelines ETL en raison de sa structure basée sur les lignes.
- Il permet l'évolution des schémas, ce qui en fait un choix privilégié pour les pipelines de streaming Kafka.
- Généralement utilisé comme format intermédiaire avant de convertir les données dans des formats adaptés à l'analyse comme Parquet.
Exemple :
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("AvroExample").getOrCreate()
# Read Avro file
df = spark.read.format("avro").load("data.avro")
df.show()
# Write DataFrame to Avro
df.write.format("avro").save("output.avro")
Utiliser Parquet dans Apache Spark
- Parquet est optimisé pour l'analytique et le traitement par lots dans Spark.
- Étant donné que les requêtes Spark impliquent souvent l'analyse de colonnes spécifiques, le stockage en colonnes de Spark réduit les E/S et accélère les requêtes.
- Il s'agit du format de stockage par défaut dans de nombreux lacs de données et environnements analytiques.
Exemple :
# Read Parquet file
df = spark.read.parquet("data.parquet")
df.show()
# Write DataFrame to Parquet
df.write.mode("overwrite").parquet("output.parquet")
Apache Hive et Presto
Apache Hive et Presto sont des moteurs de requête basés sur SQL et conçus pour les données volumineuses. Les deux moteurs prennent en charge Avro et Parquet, mais se comportent différemment :
Avro dans Hive et Presto
- Utilisé dans les flux de travail d'ingestion des données avant leur transformation dans un format optimisé.
- Il offre une certaine souplesse pour l'évolution du schéma, mais les requêtes peuvent être plus lentes en raison du balayage basé sur les lignes.
Exemple :
CREATE EXTERNAL TABLE avro_table
STORED AS AVRO
LOCATION 's3://my-data-bucket/avro/';
Parquet dans Hive et Presto
- Format préféré pour les analyses en raison de l'élagage des colonnes et de la compression efficace.
- Les requêtes sont nettement plus rapides car seules les colonnes nécessaires sont lues.
Exemple :
CREATE EXTERNAL TABLE parquet_table
STORED AS PARQUET
LOCATION 's3://my-data-bucket/parquet/';
Apache Kafka
Kafka est une plateforme de flux de données en temps réel, et Avro est la norme de facto pour la sérialisation des messages.
Pourquoi Avro est préféré dans Kafka
- Le format binaire compact réduit la taille des messages, ce qui diminue la largeur de bande et les coûts de stockage.
- La prise en charge de l'évolution des schémas garantit la compatibilité entre les producteurs et les consommateurs.
- Fonctionne de manière transparente avec Confluent Schema Registry, ce qui permet de contrôler la version des schémas.
Exemple :
from confluent_kafka import avro
from confluent_kafka.avro import AvroProducer
schema_registry_url = "http://localhost:8081"
avro_producer = AvroProducer({'bootstrap.servers': 'localhost:9092',
'schema.registry.url': schema_registry_url},
default_value_schema=avro.loads(value_schema_str))
avro_producer.produce(topic='avro_topic', value={"id": 1, "name": "Alice"})
avro_producer.flush()
Plateformes de données dans le cloud (AWS, GCP, Azure)
Avro et Parquet sont tous deux pris en charge par les principales plateformes cloud, mais sont utilisés différemment.
AWS (Amazon S3, Glue, Redshift, Athena)
- Avro: Utilisé pour le stockage de données en continu et l'évolution du schémadans les travaux ETL d'AWS Glue.
- Parquet: De préférence dans AWS Athena, RedshiftSpectrum, et les lacs de données pour une analyse plus rapide.
SELECT * FROM my_parquet_table WHERE year = 2023;
Google Cloud Platform (BigQuery, Dataflow, GCS)
- Avro: Utilisé pour ingérer des données brutes dans Google Dataflow.
- Parquet: Optimisé pour Google BigQuery, permettant une extraction par colonne.
LOAD DATA INTO my_dataset.my_table
FROM 'gs://my-bucket/data.parquet'
FORMAT PARQUET;
Azure (Azure Data Lake, Synapse Analytics, Databricks)
- Avro: Utilisé pour l'échange de données et les ingestion dans Azure Data Factory.
- Parquet: Préférezd à Azure Synapse Analytics et AzureDatabricks pour optimiser le stockage et l'analyse.
Pipelines ETL et entreposage de données
Les deux formats jouent des rôles différents dans les pipelines ETL :
Stade ETL |
Meilleur format |
Raison |
Ingestion (flux et journaux) |
✅ Avro |
Efficace pour l'ingestion de données en temps réel (Kafka, IoT, journaux d'événements). |
Traitement intermédiaire |
✅ Avro |
L'évolution des schémas permet de transformer les données sans interrompre les pipelines. |
Stockage final (analytique et BI) |
✅ Parquet |
Requêtes plus rapides et stockage optimisé pour la recherche en colonnes. |
Conclusion
Avro et Parquet sont des formats de stockage de données essentiels dans les écosystèmes de big data, chacun servant des objectifs différents. Ce billet explore leur architecture technique, les cas d'utilisation, l'intégration avec les outils big data et le rôle dans les pipelines ETL.
Les principaux enseignements à en tirer sont les suivants :
- Le format Avro, basé sur des lignes, est efficace pour la diffusion en continu, l'évolution des schémas et la sérialisation des données.
- Le format en colonnes de Parquet optimise les requêtes analytiques, la compression et l'efficacité du stockage.
- Les outils de big data tels que Apache Spark, Hive et Kafka s'intègrent à ces formats de différentes manières.
- Les pipelines ETL utilisent souvent les deux, Avro gérant l'ingestion des données brutes et Parquet permettant des analyses efficaces.
Pour renforcer les bases de l'entreposage de données et du traitement des big data, découvrez les concepts de l'entreposage de données. Pour en savoir plus sur le traitement des données en temps réel ou par lots, consultez le site Batch vs. Traitement des flux. Pour acquérir une expérience pratique des outils de big data, le cours Big Data Fundamentals with PySpark est un excellent point de départ.
La compréhension de ces formats de stockage et de leurs applications est essentielle pour concevoir des architectures de données évolutives et efficaces.
Devenez ingénieur en données
FAQ
Pourquoi Parquet est-il préféré pour l'analyse ?
Le format en colonnes de Parquet le rend très efficace pour les requêtes qui n'accèdent qu'à des colonnes spécifiques. Il réduit les frais généraux et assure une excellente compression des données répétitives, ce qui le rend idéal pour les entrepôts de données et les outils de veille stratégique.
Quelles sont les différences de stockage entre Avro et Parquet ?
Avro utilise un stockage basé sur les lignes, qui convient au traitement des données séquentielles, tandis que le stockage en colonnes de Parquet réduit la taille des charges de travail analytiques et optimise les performances des requêtes.
Quel format offre la meilleure compression ?
Parquet offre généralement une meilleure compression grâce à sa structure en colonnes et à la possibilité d'utiliser efficacement des algorithmes de compression avancés.
Avro et Parquet peuvent-ils être utilisés ensemble ?
Oui, de nombreux flux de travail utilisent les deux formats. Par exemple, Avro est souvent utilisé pour l'ingestion de données et la diffusion en continu, tandis que Parquet est utilisé pour stocker les données traitées dans des lacs de données ou des entrepôts pour des requêtes analytiques.
Comment Avro et Parquet s'intègrent-ils aux outils de big data ?
Ces deux formats sont pris en charge par des frameworks big data populaires comme Apache Hadoop, Spark et Hive. Avro est souvent utilisé pour les pipelines d'ingestion de données, tandis que Parquet est préféré pour les tâches analytiques dans les lacs de données et les entrepôts.
Je suis un data scientist avec de l'expérience dans l'analyse spatiale, l'apprentissage automatique et les pipelines de données. J'ai travaillé avec GCP, Hadoop, Hive, Snowflake, Airflow et d'autres processus d'ingénierie et de science des données.
Apprenez-en plus sur l'ingénierie des données avec ces cours !
cours
Fondamentaux du Big Data avec PySpark
cursus
Ingénieur de données
blog
Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Nisha Arya Ahmed
20 min
blog
2022-2023 Rapport annuel DataCamp Classrooms
blog
Q2 2023 DataCamp Donates Digest
blog
Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Fereshteh Forough
4 min
blog