HDFS, le système de fichier star de HADOOP

Godson K. Kalipe
TakwimuLab
Published in
6 min readOct 1, 2020

Introduction

HDFS version courte pour Hadoop File System est le système de fichier avec lequel sont formattés les différents noeuds dans un cluster Hadoop. Avec YARN et MapReduce, il fait partie des 3 principaux blocs de tout environnement Hadoop. Bien que ses commandes soient similaires à celles de n'importe quel autre système de fichier (Ext4, FAT, NTFS), HDFS est conçu de manière à permettre un stockage sécurisé et un traitement optimal des données distribuées à travers plusieurs noeuds (serveurs) comme si ces données résidaient sur une seule et unique machine.

Dans cet article, nous allons découvrir ensemble l'architecture de HDFS, les caractéristiques qui en font l'allié de choix du Big Data avant d'explorer certaines de ces commandes.

Objectifs de HDFS

Avec l'accroissement rapide de la taille des données à sauvegarder dans les différents corps de métier, le problème du stockage centralisé des données s'est posé dès le début des années 2000. HDFS est né pour combler ce vide.

Au lieu de stocker les données sur une seule supermachine extrêmement coûteuse, HDFS permet de répartir ces données sur plusieurs serveurs bas de gamme qui sont considérés grâce au système de fichier distribué comme une seule machine logique. Résultats ? Et bien, :

  • Un cluster HDFS est rapidement, facilement et "infiniment" extensible puisqu'il suffit d'y rajouter un simple serveur (DataNode) pour en accroître la capacité de stockage sans aucun besoin de modifier l'architecture existante ou de déplacer les données déjà sauvegardées.
  • HDFS limite quasi totalement le risque de perdre les données puisque chaque bloc de données est répliqué sur 3 machines qui contiennent toutes une copie de ce même bloc.
  • Le coût de la mise en place de parcs de stockage de données est considérablement réduit car au lieu de dépenser sur des super serveurs, on peut se contenter de serveurs de basse ou moyenne gamme beaucoup plus accessibles sur le marché et facilement remplaçables.
  • Avec la distribution des données sur plusieurs machines, leur traitement en parallèle est rendu beaucoup plus facile, ce qui rend le duo HDFS+MapReduce bien plus efficace que toutes les solutions existantes avant l'avènement de Hadoop.

Architecture de HDFS

Architecture de HDFS | Source : Big Intellects

HDFS a une architecture maître esclave. Dans tout cluster Hadoop, il existe donc deux types de noeuds :

  • Le NameNode : Il existe un seul NameNode qui joue le rôle de maître dans le cluster. Il contient les metadonnées du cluster, c'est-à-dire les information sur quel fichier, quel réplicat et quel bloc est enregistré sur quel serveur (Plus de détails sur les blocs et les réplicats un peu plus bas). Le NameNode manipule deux importants fichiers que sont: fsimage et edit logs. Le premier est une capture de l'état de HDFS au démarrage du NameNode et le second contient toutes les modifications faites à HFDS jusqu'au prochain démarrage où les deux fusionnent pour donner la nouvelle version de fsimage.
  • Le Secondary NameNode : Son rôle est d'éviter la perte de métadonnées du NameNode. En effet, en production, le NameNode est rarement redémarré et son redémarrage prend du temps. Ainsi, pour éviter une possible perte de métadonnées entre deux démarrages, le Secondary NameNode copie périodiquement les données de edit logs et les fusionnent avec le fsimage.
  • Les DataNodes : Ce sont les noeuds qui stockent les données proprement dites dans HDFS. Ils jouent le rôle d'esclaves car ils exécutent les opérations de lecture et d'écriture, de création de blocs et de réplicas.

Blocs et Réplicas

Les notions de blocs et de réplicas sont inhérentes à HDFS et expliquent une grande partie de son efficacité. Pour les comprendre, il faut se référer aux processus d'écriture et delecture dans HDFS.

  • L'écriture : Chaque fois qu'un client veut écrire sur HDFS (créer un nouveau fichier, uploader un dossier etc), il contacte le NameNode qui fournit l'addresse des DataNodes sur lequel la donnée doit résider. Le fichier à écrire est alors divisé en petits blocs (dont la taille peut être définie dans la configuration de Hadoop) qui sont écrits sur les DataNodes dont le client a reçu l'addresse. Ensuite, chacun de ces DataNodes réplique les blocs qu'il a reçu sur un certain nombre d'autres dataNodes (3 par défaut). La notion de blocs dans HDFS, intervient pour faciliter le traitement en parallèle de petits blocs de données d'un même fichier et la notion de réplicas a pour but de minimiser les pertes de données en cas de panne ou de défaillance d'un serveur.
  • La lecture : De la même manière, le client qui veut lire une donnée, récupère auprès du Namenode les addresses de ses différents blocs. Le NameNode fournir ces addresses après une vérification des privilèges du client. Le client procède ensuite à la lecture directement depuis les DataNodes concernés. (Voir image de l'architecture HDFS)

Revue des commandes de HDFS

Si vous avez déjà Hadoop installé sur votre machine, vous devez démarrer HDFS (les daemons dataNode, NameNode et SecondaryNameNode pour être précis) avant de pouvoir utiliser les commandes HDFS. Positionnez vous dans le dossier sbin du dossier de votre installation hadoop et exécutez :

$ ./start-dfs.sh

Une fois votre travail terminé, vous pourrez arrêter les processus enclenchés avec :

$ ./stop-dfs.sh

Mais on n'a pas encore fini. Pour le moment, découvrons les commandes en question. Les commandes HDFS sont très similaires à celles de Linux à quelques exception près. Elles sont précédées de hadoop fs -.

  • Pour explorer le contenu d'un dossier :
$ hadoop fs -ls /chemin/du/dossier
  • Pour créer un dossier nommé "mondossier " à la racine de HDFS
$ hadoop fs -mkdir /mondossier

Attention cependant à ne pas oublier le hadoop fs sans lequel les commandes sont exécutées en local. Sur la prochaine capture, on voit bien, la différence de sortie entre ls et hadoop fs -ls :

Différence entre ls et hadoop fs -ls
  • Pour copier un fichier de la machine client vers le cluster HDFS, l'une de ces deux commandes peut être utiisée :
$ hadoop fs -copyFromLocal /chemin/vers/fichier/local /localisation/sur/HDFS$ hadoop fs -put /chemin/vers/fichier/local /localisation/sur/HDFS
  • L'opération inverse consistant à copier un fichier HDFS sur notre client est faite comme suit :
$ hadoop fs -copyToLocal /chemin/vers/fichier/HDFS /localisation/en/local$ hadoop fs -get /chemin/vers/fichier/HDFS /localisation/en/local

Voici une capture de ces commandes en action (Je vous invite à les essayer par vous même aussi) :

Illustration d'exécution copyToLocal

Les commandes sont donc plus ou moins similaires à celles de Linux et plutôt faciles à appréhender. Mais allez, une dernière pour la route ?

  • Pour supprimer un dossier non vide :
$ hadoop fs -rmr /dossier/non/vide
Opérations de suppressions avec HDFS

💡Une question qui revient souvent est :

❓ Comment/Où spécifie-t-on le neud (DataNode) sur lequel les fichiers et dossiers sont créés ?

La réponse est simple.

✔️ C'est le rôle du NameNode de déterminer sur lequel des DataNodes du cluster les données que nous uploadons ou créeons sur HDFS seront sauvegardées. Ainsi, nous pouvons opérer sur un cluster HDFS comme s'il s'agissait d'une seule machine sans nous préocuper des allocations internes. (Génial, n'est-ce pas?)

N'hésitez pas à vous amuser avec le reste des commandes HDFS disponibles avec la commandehadoop fs .

Et voilà, vous en savez maintenant un peu plus sur HDFS. Vous pouvez installer Hadoop sur votre machine et essayer ces commandes et pourquoi pas essayer d'exécuter quelques scripts mapreduce sur les données que vous y sauvegarder? Ça tombe bien! C'est le sujet de mon prochain article.

À très vite!

--

--