HDF / HDF5
-
Généralités
-
Différentes versions de HDF
-
HDF5
- Groups
- Datasets
- Attributes
-
Lecture / écriture d’une sélection
- Sélection d’hyperslabs
- Exemple sans stride et sans block
- Exemple avec strides et blocks
- Sélection d’une liste de points indépendants
- (Sélection d’une union d’hyperslabs)
Généralités 1/3
Problématique :
-
Volumes de données de plus en plus importants dans tous les domaines : industrie, recherche, ...
-
Définition, acquisition, traitement, archivage et distribution de ces informations dans des environnements de plus en plus complexes (hétérogènes, distribués, ...)
Les nombreux formats de données standardisés (FDS) proposent une réponse (partielle) à cette problématique :
-
CDF - Common Data Format ; physique de l’espace
-
NetCDF - Network Common Data Format ; climatologie, météorologie, océanographie
-
FITS - Flexible Image Transport System ; astronomie, astrophysique, physique solaire
-
HDF - Hierarchical Data Format ; observations spatiales, climatologie, océanographie, environnement
Généralités 2/3
C’est quoi, HDF ?
Format de fichier standard et public créé initialement en 1987 par le N.C.S.A. (National Center for Supercomputing Applications) et maintenu par le HDF Group (2006) pour :
-
Support de la majorité des types de données et métadonnées utilisées par la communauté scientifique
-
Stockage efficace et accès à de très grands volumes de données
-
Indépendance vis-à-vis des plateformes et systèmes
Généralités 3/3
Intérêts de HDF :
-
Flexibilité : Stockage dans un ou plusieurs fichier(s) de données de sources et formats physiques différents
-
Portabilité : Indépendance du format vis-à-vis des plateformes, des OS et des langages
-
Hiérarchisation des données : Possibilité de regrouper en ”Vgroups” (// répertoires) des ensembles de données logiquement reliées, eux-mêmes pouvant contenir des Vgroups...
-
Auto-documentation : L’utilisateur peut attacher des ”attributs” et/ou des ”annotations” (métadonnées) aux diverses unités de données du fichier ou au fichier lui-même
-
Extensibilité : Création de nouveaux types de données et de nouvelles interfaces (HDF-EOS : extension du format HDF → sélection géographique et temporelle sur la donnée)
Différentes versions de HDF 1/2
HDF4 (1996)
Limitations :
-
Maximum de 20 000 objets complexes par fichier
-
Taille maximale d’un fichier HDF : 2 Go (problème réglé en partie par les interfaces multi-fichiers)
-
Modèle de données inconsistant
-
La bibliothèque est ancienne, complexe à cause des modifications et enrichissements successifs, ne supporte pas les E/S parallèles, et mal les applications ”threadées”
-
Tableaux de types composés (// struct) limités à une dimension
-
Modifications/suppressions difficiles ou impossibles
HDF4 continue à être maintenue (mais plus enrichie)
Différentes versions de HDF 2/2
Pour résoudre ces problèmes → HDF5 (1998) :
-
Pas de compatibilité HDF4 → HDF5 (coexistence possible)
-
Plus de limitation de nombre d’objets et de taille de fichier (sauf liée au système)
-
Modèle de données plus simple et consistant : 2 types de base uniquement au lieu de 6 dans HDF4
-
Une bibliothèque plus simple et mieux conçue, supportant les E/S parallèles et les ”threads”
HDF5
HDF5 améliore HDF4. Il simplifie la structure des fichiers pour proposer seulement deux types d’objets :
-
Les datasets (ou ensemble de données) : tableaux multidimensionnels contenant des données d’un même type
-
Les groups (ou groupes) : contiennent, ou regroupent, des datasets et d’autres groupes
L’utilisateur peut aussi définir une structure d’attribut pour ajouter des informations (des métadonnées) sur chaque objet
Cette structuration en datasets et groups donne aux fichiers HDF5 une structure arborescente. Ainsi, le nom complet d’un objet du fichier HDF5 est construit comme un chemin dans un système de fichiers (/chemin/vers/le/fichier)
HDF5 Groups
Un groupe HDF5 est une structure contenant zéro ou plusieurs objets HDF5. Un groupe comporte deux parties :
-
Un en-tête de groupe, qui contient un nom de groupe et une liste des attributs du groupe
-
Une liste d’objets HDF5 qui appartiennent à ce groupe
HDF5 Datasets
Un dataset (ensemble de données) est stocké dans un fichier en deux parties : un en-tête et un tableau de données
L’en-tête contient des informations nécessaires pour interpréter les données ainsi que les métadonnées (qui décrivent ou annotent le jeu de données). L’en-tête contient par exemple le nom de l’objet, sa dimension, ...
Il existe quatre catégories d’informations essentielles dans l’en-tête : le nom, le datatype (type de données), le dataspace, et le format de stockage
HDF5 Datasets : datatype
Il existe deux catégories de types de données : les types de données atomiques (pouvant être spécifiques au système, i.e. natifs) et les types de données composés :
-
Les types de données atomiques comprennent les nombres entiers et flottants. Chaque type atomique appartient à une classe particulière et possède plusieurs propriétés: la taille, l’ordre (endianness) et la précision
-
Les types de données atomiques natifs : bien qu’il soit possible de décrire presque n’importe quel genre de type de données atomique, la plupart des applications utilisent des types de données prédéfinis qui sont soutenus par leur compilateur
-
Les types de données composés (// struct) sont constitués de types de données atomiques. Il est possible de lire les membres d’un type composé sans lire le type tout entier
HDF5 Datasets : dataspace 1/2
Le dataspace décrit la dimensionnalité de l’ensemble de données. Les dimensions d’un ensemble de données peuvent être fixes (immuables), ou elles peuvent être illimitées, ce qui signifie qu’elles sont extensibles
Les propriétés d’un dataspace sont le rang (nombre de dimensions) du tableau de données, les dimensions réelles du tableau, et les tailles maximales des dimensions du tableau
HDF5 Datasets : dataspace 2/2
Un dataspace peut aussi décrire des parties d’un ensemble de données, permettant ainsi d'effectuer des opérations partielles d’E/S sur des sélections. Il y a actuellement quatre façons de faire une sélection partielle :
-
Sélectionner un hyperslab n-dimensionnel logiquement contigu
-
Sélectionner un hyperslab non contigu constitué par des éléments (ou blocs d’éléments) qui sont espacés de manière égale
-
Sélectionner une union d’hyperslabs
-
Sélectionner une liste de points indépendants
HDF5 Datasets : format de stockage
Le format HDF5 permet de stocker les données de différentes façons. Le format d’agencement de stockage par défaut est contigu, ce qui signifie que les données sont stockées de la même manière linéaire qu’en mémoire
Un autre format de stockage est également défini pour HDF5 : le stockage chunked (morcelé) : il consiste à diviser les données en ”morceaux” de taille égale stockés séparément
HDF5 Attributes
Les attributs sont des petits jeux de données nommés qui sont attachés à des datasets ou des groupes. Ils sont utilisés pour décrire la nature et/ou l’utilisation prévue d’un ensemble de données ou d’un groupe. Un attribut comporte deux parties : un nom et une valeur. La partie valeur contient une ou plusieurs entrées de données du même type de données
Le format HDF5 et la bibliothèque d’E/S sont conçus avec l’hypothèse que les attributs sont de petits ensembles de données. Ils sont toujours stockés dans l’en-tête de l’objet auquel ils sont attachés
...
←
→
01/07/13 - M. TOLA - Liris -
/
#