← Retourner à la liste des articles
Image blog
Auteur

Par Maxime Jumelle

CTO & Co-Founder

Publié le 13 avr. 2023

Catégorie Data Engineering

HDFS : le système de fichiers distribué Hadoop

HDFS (Hadoop Distributed File System) est un système de fichiers distribué open source conçu pour stocker et gérer de gros volumes de données sur des clusters de serveurs. Il fait partie de l'écosystème Hadoop, qui comprend également d'autres composants tels que MapReduce, YARN (Yet Another Resource Negotiator) et Spark.

Il est devenu en quelques années la référence pour le stockage de données à très grande échelle, notamment pour ses performances et sa tolérance à la panne, mais également pour sa facilité d'utilisation et son intégration dans toute la suite logicielle de l'écosystèeme Hadoop.

Les origines de HDFS

HDFS a été développé pour répondre aux besoins de stockage de données à grande échelle pour les applications de traitement distribué telles que Hadoop MapReduce. Il permet de stocker des fichiers de grande taille en les découpant en blocs de taille fixe, puis en les distribuant sur plusieurs nœuds dans le cluster. HDFS assure également la réplication des données pour garantir une haute disponibilité des données en cas de panne de nœud ou de disque.

Aujourd'hui, HDFS reste un outil de choix pour le stockage de fichiers distribué, non seulement car il est encore très présent dans l'écosystème Hadoop, mais aussi parce qu'il peut être intégré à des services de stockage dans le Cloud comme AWS S3 ou Google Cloud Storage (GCS) pour offrir des solutions de stockage de données hybrides. Pour les entreprises qui utilisent le Cloud, cette intégration offre donc une expérience fluide et sans contraintes avec une forte inter-opérabilité entre les services et HDFS.

L'architecture HDFS

Rappelons quelques notions importantes. Il existe deux composants dans HDFS :

  • NameNode : NameNode est le daemon maître (programme principal). Il s'agit du nœud maître dans le cluster HDFS. Il gère les métadonnées du système de fichiers, notamment les informations sur les fichiers, les répertoires, les autorisations d'accès, les blocs de données et les emplacements des blocs. Le NameNode conserve également les informations sur les DataNodes du cluster et surveille leur disponibilité. Les clients accèdent au système de fichiers HDFS via le NameNode, qui coordonne les opérations de lecture et d'écriture des fichiers.
  • DataNode : DataNode est le daemon esclave (programme secondaire). Ce sont les nœuds dans le cluster HDFS qui stockent les données réelles des fichiers dans le système de fichiers HDFS. Les DataNodes communiquent régulièrement avec le NameNode pour envoyer des informations sur leur état et pour recevoir des instructions sur la manière de stocker, de lire ou de supprimer des données. Les DataNodes peuvent être ajoutés ou supprimés dynamiquement du cluster en fonction des besoins de stockage.

Ce qui est important à comprendre, c'est que HDFS divise les données en plusieurs blocs. Par défaut, la taille d'un bloc est de 128 Mo.


À lire aussi : découvrez notre formation Data Engineer


Le système de fichiers HDFS utilise une donc cette architecture de réplication pour garantir la disponibilité et la tolérance aux pannes des données. Les blocs de données sont répliqués sur plusieurs DataNodes pour réduire les risques de perte de données en cas de panne de nœud ou de disque. Le nombre de réplications peut être configuré selon les besoins de tolérance aux pannes et de performances.

Par exemple, supposons que l'on ait un cluster avec 1 NameNode et 3 DataNodes. Si l'on y ajoute un fichier qui pèse 500 Mo, alors il y aura 3 blocs de 128 Mo et 1 bloc de 116 Mo (500 Mo - 3 x 128 Mo). Ainsi, 1 DataNode stockera 2 blocs, et chacun des deux autres stockera un seul bloc.

Et ce découpage par blocs est l'une des fonctionnalités clés qui permet de stocker et de gérer de grands fichiers de manière efficace et distribuée.

  • Aucune limitation sur la taille du fichier : un fichier peut être plus volumineux que n'importe quel disque du réseau. Le découpage par blocs permet de gérer efficacement des fichiers de grande taille en les découpant en blocs de taille fixe. Cela permet de stocker et de traiter les fichiers volumineux en plusieurs parties et de les distribuer sur plusieurs nœuds du cluster. Cela facilite également le traitement distribué des fichiers en les répartissant sur plusieurs nœuds du cluster.
  • Facilité de stockage : les blocs étant de taille fixe, nous pouvons facilement calculer le nombre de blocs pouvant être stockés sur un disque donné, ce qui facilite la gestion de l'espace disque en réservant une quantité suffisante d'espace pour chaque bloc.
  • Cela s'adapte bien à la réplication de données : les blocs sont faciles à répliquer entre les DataNodes, offrant ainsi une tolérance aux pannes et une haute disponibilité en cas de panne de nœud ou de disque.
  • Dissocie les problèmes de métadonnées du fichier : étant donné que les blocs ne sont que des blocs de données à stocker, nous n'avons pas besoin de stocker les métadonnées de fichier (telles que les informations d'autorisation) avec les blocs, un autre système peut gérer les métadonnées séparément (ici, c'est précisément le rôle du NameNode).

Mais pourquoi 128 Mo ? Pourquoi pas 64 Mo ou 256 Mo ? Même si ce choix peut sembler arbitraire, il s'agit en réalité d'un compromis entre performance et généralisation.

  • Si les blocs sont trop grands, cela peut prendre du temps lors des étapes de chargement/sauvegarde de données, ainsi que dans la réplication des données entre les DataNodes.
  • Si les blocs sont petits, il y aura trop de blocs dans HDFS et donc trop de métadonnées à stocker. La gestion d'un si grand nombre de blocs et de métadonnées pourrait créer une surcharge et générer davantage de trafic dans le réseau.

Bien entendu, il est possible de modifier soi-même cette valeur en configurant le paramètre dfs.block.size.

Dossiers HDFS

La structure de répertoire de HDFS est similaire à celle des systèmes de fichiers locaux sur les systèmes Unix/Linux. La structure de répertoire de HDFS est hiérarchique et est représentée par une arborescence de dossiers et de fichiers.

Le répertoire racine de HDFS est représenté par le caractère /. Tous les autres répertoires et fichiers sont créés sous ce répertoire racine. Les utilisateurs peuvent créer leurs propres dossiers personnalisés pour stocker leurs données et leurs applications dans HDFS.

/
|-- user
|   |-- blent
|   |   |-- hello.txt
|   |   `-- world.txt
|   |-- maxime
|   |   |-- data.csv
|   |   `-- code.sql
|-- tmp
|-- hadoop
|   `-- mapred
|       `-- system
|-- hbase
|-- hive
|-- user
|   `-- history
`-- var

Les applications de l'écosystème Hadoop, comme Apache HBase ou Apache Hive, vont eux aussi avoir leur dossier spécifique. C'est notamment à l'intérieur de ces dossiers que sont situés les tables de données.

Ainsi, chaque fichier peut donc être référencé par son chemin sur HDFS. Par exemple, si le nom de domaine du noeud principal HDFS est mon-adresse.internal, alors le fichier data.csv représentée plus haut aura pour chemin HDFS hdfs://mon-adresse.internal/user/maxime/data.csv. Ainsi, toute application capable de lire sur un système HDFS pourra lire le contenu du fichier.

Inconvénients de HDFS

Outre les nombreux avantages listés plus haut que présente HDFS, il y a également quelques inconvénients à son utilisation.

L'installation et la configuration de HDFS peuvent être coûteuses pour les entreprises en raison du coût des serveurs, des logiciels et des licences nécessaires pour exécuter et gérer le système. De plus, HDFS peut avoir une latence élevée lorsqu'il s'agit d'accéder aux fichiers stockés dans le système de fichiers, en particulier pour les fichiers de petite taille, ce qui peut rendre le traitement de données en temps réel plus difficile.


À lire aussi : découvrez notre formation Data Engineer


De plus, la gestion de HDFS peut également être complexe en raison de la nécessité de configurer et de gérer plusieurs nœuds de serveur pour stocker et gérer les données. La gestion des nœuds peut nécessiter une expertise technique et une surveillance constante pour garantir la disponibilité des données et la performance du système. C'est en partie pour cette raison que de nombreuses entreprises choisissent de s'orienter vers des clusters managés dans le Cloud, pour avoir à éviter de gérer soi même la mise en place et la supervision d'un cluster HDFS.

Par ailleurs, HDFS peut avoir une faible efficacité pour les petits fichiers, car chaque fichier est divisé en blocs de taille fixe. Si un petit fichier est stocké sur HDFS, il peut occuper un espace disque important par rapport à sa taille réelle, ce qui peut entraîner une utilisation inefficace des ressources de stockage.

Au global, HDFS reste tout de même un système très puissant et encore très utilisé aujourd'hui dans le monde du Data Engineering.

Vous souhaitez vous former au Data Engineering ?

Articles similaires

Blog

7 févr. 2024

Data Engineering

Pendant de nombreuses années, le rôle des Data Engineers était de récupérer des données issues de différentes sources, systèmes de stockage et applications tierces et de les centraliser dans un Data Warehouse, dans le but de pouvoir obtenir une vision complète et organisée des données disponibles.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

4 déc. 2023

Data Engineering

Pour de nombreuses entreprises, la mise en place et la maintenant de pipelines de données est une étape cruciale pour avoir à disposition d'une vue d'ensemble nette de toutes les données à disposition. Un des challenges quotidien pour les Data Analysts et Data Engineers consiste à s'assurer que ces pipelines de données puissent répondre aux besoins de toutes les équipes d'une entreprise.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

14 nov. 2023

Data Engineering

Pour améliorer les opérations commerciales et maintenir la compétitivité, il est essentiel de gérer efficacement les données en entreprise. Cependant, la diversité des sources de données, leur complexité croissante et la façon dont elles sont stockées peuvent rapidement devenir un problème important.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article