Les analyses sur Hadoop lisaient les enregistrements ligne par ligne, si bien qu'une requête nécessitant un seul salaire tirait quand même l'enregistrement complet de chaque employé, et les enregistrements hétérogènes se compressaient mal. Les jeux de données de Twitter étaient imbriqués sur sept niveaux avec plus de 80 nœuds feuilles.
Twitter et Cloudera ont construit Parquet, un format de stockage colonnaire open source pour Hadoop. Au lieu des lignes, il écrit des colonnes : tous les noms, puis tous les âges, puis tous les salaires. Son grand exploit fut de découper les données imbriquées en colonnes à l'aide de l'algorithme de découpage d'enregistrements Dremel de Google et d'une spécification d'encodage partagée.
Comme une colonne ne contient qu'un seul type, la compression générique et la compression spécifique au type s'améliorent toutes deux, et un moteur de requête évite de charger les colonnes dont il n'a pas besoin. L'encodage automatique par dictionnaire, complété par le bit-packing et l'encodage par plages, réduit le reste. Parquet ne lie les utilisateurs à aucune bibliothèque de sérialisation, ce qui explique son adoption par de nombreux moteurs.
Parquet 1.0 a été lancé en juillet 2013 par des contributeurs de Twitter, Cloudera, Criteo, Berkeley AMPLab et Stripe, et il était déjà en production chez Twitter.
Stocker par colonne pour que les analyses évitent ce dont elles n'ont pas besoin
Des valeurs de colonne homogènes se compressent bien mieux que des lignes mixtes, si bien que les fichiers deviennent bien plus petits.
Les requêtes ne chargent que les colonnes dont elles ont besoin, si bien que les E/S et les coûts chutent fortement.
Découper les données imbriquées via Dremel signifie qu'un schéma complexe tient encore en colonnes.
L'absence de dépendance à un framework a permis à chaque moteur de l'adopter sans réécriture.
Lorsque le goulot d'étranglement est la lecture et la compression, changez la disposition physique, pas la logique : stocker ensemble des valeurs homogènes fait diminuer les E/S coûteuses et réduit le fichier gratuitement.
Suites
Parquet 1.0 est sorti en juillet 2013 et est rapidement devenu le format colonnaire par défaut dans l'écosystème Hadoop et Spark, puis dans les data lakes, les lakehouses et les entrepôts cloud. C'est aujourd'hui l'un des formats de stockage ouverts les plus largement pris en charge, utilisé partout où les analyses nécessitent des scans rapides et peu coûteux de tables larges.
VÉRIFIEZ LES SOURCES
Les sources
- Announcing Parquet 1.0: Columnar Storage for Hadoop Twitter Blog · web.archive.org ·
- Parquet Format Specification Apache Parquet · apache.googlesource.com