Apache Parquet
| Développé par | Apache Software Foundation |
|---|---|
| Première version | [1] |
| Dernière version | 1.16.0 ()[2] |
| Dépôt | github.com/apache/parquet-java |
| Écrit en | Java |
| Type |
Projet de la fondation Apache (d) Format de fichier (en) |
| Licence | Licence Apache 2.0 |
| Documentation | parquet.apache.org/docs |
| Site web | parquet.apache.org |
| Extension | .parquet |
|---|---|
| Type MIME | application/vnd.apache.parquet |
| PUID | |
| Signature | 50 41 52 31 (hexa) |
| Développé par | |
| Version initiale |
, |
| Site web |
(en) parquet.apache.org |
Apache Parquet est un format de fichiers orienté colonne, initialement développé pour l'écosystème de calcul distribué Apache Hadoop. Il est similaire aux autres formats de fichiers de stockage colonnaires disponibles dans Hadoop, à savoir RCFile et Optimized RCFile. Il est compatible avec la plupart des frameworks de traitement de données de l'environnement Hadoop. Il fournit des schémas efficaces de compression et de codage de données avec des performances améliorées pour gérer des données complexes en masse.
Historique
[modifier | modifier le code]Le projet open source qui a abouti à Apache Parquet vient des efforts conjoints entre Twitter[3] et Cloudera[4]. La première version de Apache Parquet 1.0 sort en . Depuis le Apache Parquet devient un projet top-level de la Apache Software Foundation [5],[6]
Fonctionnalités
[modifier | modifier le code]Apache Parquet utilise l’algorithme de fragmentation et d’assemblage des enregistrements (« record-shredding and assembly »), qui permet de gérer les structures de données complexes utilisées pour le stockage des données[7]. Les valeurs de chaque colonne sont stockées dans des emplacements mémoire contigus, offrant les avantages suivants :
- La compression par colonne optimise l’espace de stockage.
- Des techniques d’encodage et de compression spécifiques au type de données de chaque colonne peuvent être appliquées.
- Les requêtes ciblant des valeurs de colonnes spécifiques n’ont pas besoin de lire l’intégralité de la ligne, ce qui améliore les performances.
Apache Parquet est implémenté à l’aide du framework Apache Thrift, ce qui accroît sa flexibilité : il est compatible avec plusieurs langages de programmation comme C++, Java, Python, PHP, etc. En août 2015, Parquet supportait les frameworks de traitement de données massives suivants : Apache Hive, Apache Drill, Apache Impala, Apache Crunch, Apache Pig, Cascading, Presto et Apache Spark. Il s’agit également de l’un des formats de données externes utilisés par les bibliothèques pandas et polars de Python, dédiées à la manipulation et à l’analyse de données.
Compression et encodage
[modifier | modifier le code]Avec Parquet, la compression s'effectue colonne par colonne, ce qui permet d'utiliser différents schémas d'encodage pour les données textuelles et les données entières. Cette stratégie permet également d'ouvrir la voie à la mise en œuvre de nouveaux schémas d'encodage plus performants à mesure qu'ils sont inventés.
Parquet prend en charge divers formats de compression : snappy, gzip, LZO, brotli, zstd et LZ4[8].
Encodage par dictionnaire
[modifier | modifier le code]Parquet dispose d'un encodage par dictionnaire automatique activé dynamiquement pour les données comportant un petit nombre de valeurs uniques (c'est-à-dire inférieur à 105), ce qui permet une compression importante et augmente la vitesse de traitement[9].
Compression par bits
[modifier | modifier le code]Le stockage des entiers s'effectue généralement avec 32 ou 64 bits dédiés par entier. Pour les petits entiers, le regroupement de plusieurs entiers dans le même espace rend le stockage plus efficace[9].
Codage par plages (RLE)
[modifier | modifier le code]Afin d'optimiser le stockage de plusieurs occurrences d'une même valeur, on utilise un encodage par plages, qui consiste à stocker une seule fois une valeur unique avec le nombre d'occurrences[9].
Parquet met en œuvre un hybride de bit packing et de RLE, dans lequel le codage bascule en fonction de celui qui produit les meilleurs résultats de compression. Cette stratégie fonctionne bien pour certains types de données entières et se combine bien avec le codage par dictionnaire[9].
Data Lakes et autres stockages Cloud
[modifier | modifier le code]Le format Apache Parquet est largement utilisé comme format de fichier sous-jacent dans les architectures modernes de lacs de données. Des systèmes de stockage dans le cloud tels qu'Amazon S3, Azure Data Lake Storage et Google Cloud Storage stockent généralement les données au format Parquet en raison de ses capacités efficaces de représentation et de récupération en colonnes. Les environnements de data lakehouse, notamment Apache Iceberg, Delta Lake et Apache Hudi , ajoutent une couche de métadonnées supplémentaire aux fichiers Parquet afin de prendre en charge des fonctionnalités telles que l'évolution des schémas, les requêtes temporelles et les transactions conformes à l'ACID. Dans ces architectures, les fichiers Parquet servent de couche de stockage immuable, tandis que les formats de table gèrent le versionnage des données et l'intégrité transactionnelle.
Comparaison
[modifier | modifier le code]Apache Parquet est comparable aux formats de fichiers RCFile et Optimized Row Columnar (ORC) : tous trois appartiennent à la catégorie des formats de stockage de données en colonnes dans l'écosystème Hadoop. Ils offrent tous une meilleure compression et un meilleur encodage, ainsi que des performances de lecture améliorées, au détriment d'une vitesse d'écriture plus lente. En plus de ces fonctionnalités, Apache Parquet prend en charge une évolution limitée du schéma[10], c'est-à-dire que le schéma peut être modifié en fonction des changements apportés aux données. Il offre également la possibilité d'ajouter de nouvelles colonnes et de fusionner des schémas qui n'entrent pas en conflit.
Apache Arrow est conçu comme un complément en mémoire aux formats en colonnes sur disque tels que Parquet et ORC. Les projets Arrow et Parquet comprennent des bibliothèques qui permettent la lecture et l'écriture entre les deux formats[11].
Articles connexes
[modifier | modifier le code]Notes et références
[modifier | modifier le code]- ↑ « https://projects.apache.org/json/projects/parquet.json » (consulté le )
- ↑ « Release 1.16.0 », (consulté le )
- ↑ « Announcing Parquet 1.0 : Columnar Storage for Hadoop », sur twitter.com (consulté le ).
- ↑ (en) « Cloudera Blog - », sur Cloudera Blog (consulté le ).
- ↑ (en) « Apache Parquet paves the way for better Hadoop data storage », sur InfoWorld (consulté le ).
- ↑ (en) « The Apache Software Foundation Announces Apache™ Parquet™ as a Top-Level Project », sur The Apache Software Foundation Blog, (consulté le ).
- ↑ https://github.com/julienledem/redelm/wiki/The-striping-and-assembly-algorithms-from-the-Dremel-paper
- ↑ https://parquet.apache.org/docs/file-format/data-pages/compression/
- https://blog.twitter.com/2013/announcing-parquet-10-columnar-storage-for-hadoop
- ↑ https://medium.com/data-engineering-with-dremio/all-about-parquet-part-04-schema-evolution-in-parquet-c2c2b1aa6141
- ↑ https://arrow.apache.org/docs/python/parquet.html
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Apache Parquet » (voir la liste des auteurs).