Logo Blent.ai
← 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

23 mai 2023

Data Engineering

Apache Phoenix est une extension open-source de Apache HBase qui fournit une couche de requêtes SQL pour les données stockées dans HBase. Phoenix permet ainsi d'interagir sur les tables HBase à l'aide de requêtes SQL standard, sans avoir à écrire de code spécifique à HBase
Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

15 mai 2023

Data Engineering

Apache Avro est un système de sérialisation de données et un format de données compact, rapide et polyvalent. Il a été développé par Apache Software Foundation et est conçu pour faciliter l'échange de données entre les différentes applications. Contrairement à d'autres formats comme CSV ou JSON, une des grandes particularités d'Apache Avro est qu'il utilise un schéma pour définir la structure des données, ce qui permet de sérialiser et de désérialiser les données de manière efficace, tout en garantissant la compatibilité entre les différentes versions des schémas.
Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

12 mai 2023

Data Engineering

Apache Flink est un système de traitement des données en temps réel et de traitement par lots à grande échelle. Il s'agit d'un projet open source développé par la fondation Apache, conçu pour offrir une haute disponibilité, une faible latence et une grande capacité de traitement des flux de données. Flink fournit un modèle algorithmique unifié qui permet de traiter les données en temps réel et par lots de manière cohérente. Il prend en charge des opérations avancées telles que la transformation, le filtrage, l'agrégation et la jointure de données en continu.
Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Logo Blent

60 rue François 1er

75008 Paris

Blent est une plateforme 100% en ligne pour se former aux métiers Tech & Data.

Organisme de formation n°11755985075.

Gestion des cookies

© 2023 Blent.ai | Tous droits réservés