Stockage des données

Stockage des données

Dans le contexte SparK/Hadoop, de nombreuses solutions techniques existent pour le stockage des données.
Selon les besoins, les données peuvent être conservées dans des fichiers sur un système de fichiers distribués (DFS)
ou gérées par un outil spécialisé ([Hive], [HBase], …).

Le choix entre toutes ces solutions va dépendre du profil d’accès aux données (accès aléatoire, lecture séquentielle, mises à jour, …),
des performances souhaitées pour les opérations importantes et de la richesse des fonctionnalités proposées.
Par exemple, un fichier Parquet dans HDFS fournira de bonnes performances pour les lectures séquentielles mais ne permettra pas les mises à jour.

La suite de cette page donne quelques éléments et des références vers ces technologies.

Comparaisons entre les systèmes/formats

Systèmes de fichiers distribués

Ces systèmes fournissent un accès de type fichier ainsi que de la tolérance aux pannes.
Dans le contexte Spark/Hadoop, le plus commun est HDFS.
D’autres alternatives comme [GlusterFS] ou [Ceph] existent et sont utilisées dans un contexte ”Cloud”.

HDFS

HDFS est le DFS proposé avec le framework Hadoop.
C’est une implémentation open source du ”Google File System”.
Il est bien adapté au stockage de gros fichiers.

Références

Comparaison

Systèmes de gestion de bases de données

De nombreux moteurs de stockage/interrogation existent dans l’écosystème Spark/Hadoop.
Les plus connus sont sans doute l’entrepôt de données [Hive] et le SGBD orienté colonne [HBase].

Une alternative intéressante en terme de performances est le projet [Apache Kudu].

Références

Sérialization et formats de fichiers

Les formats de sérialisation d’objets et fichiers sont très nombreux.
En dehors des très pratiques ”csv” et ”json”, il est nécessaire de se tourner vers des formats plus sophistiqués lorsqu’on recherche de la performance dans le contexte Spark/Hadoop.
Actuellement, les formats Avro, Parquet et ORC sont de bons candidats pour le stockage des données dans HDFS.

Le second choix qu’il est possible de faire à propos du stockage en fichiers concerne la technique de compression utilisée.
Selon le codec, l’efficacité en taux de compression et les performances en lecture ou écriture peuvent varier de façon importante.

Enfin, des formats spécialisés existent pour certaines applications ([Gbin] (Gaïa DPAC), [HDF5]).

Comparaisons

[Parquet]

[Avro]

[ORC]

Une réflexion au sujet de « Stockage des données »

  1. Quelques petits retours d’expérience sur ce sujet, qui est extrêmement important quand on traite de grandes volumétries de données :

    Le file system GlusterFS n’est pas du tout fait pour faire de nombreuses IO, même avec Hadoop Spark. Nous avons eu pas mal de soucis avec sur le projet GAIA au CNES.

    Pour la sérialisation, il faut éviter au maximum de reposer sur la serialisation Java de base (ce qu’est en réalité un Gbin de GAIA), ou même sur des équivalents plus performant comme Kryo par exemple. En utilisant les Dataset de Spark, on est de toute manière compatible avec les formats comme Parquet. De même les formats textes (CSV, Json) sont intéressant pour l’interfaçage entre applications, mais pas vraiment pertinent pour des traitements efficaces et un stockage optimisé.

Laisser un commentaire