Création d’un fichier HDFS par un programme Hadoop

Création d’un fichier HDFS par un programme Hadoop comporte les grandes étapes suivantes :

  1. Le programme Hadoop demande la création du fichier à HDFS, par le biais d’une instruction create().
  2. HDFS envoie une demande de création de fichier au NameNode, par le biais d’un appel de type RPC.
  3. Le NameNode s’assure que le fichier n’existe pas et que le programme Hadoop disposes des droits nécessaires pour créer le fichier. Si tout se passe bien, le NameNode ajoute le nouveau fichier dans sa cartographie  des données du cluster. Sinon, une exception IOException est générée
  4. HDFS renvoie une instance de FSDataOutputStream au programme, ce qui lui permet d’accéder au fichier en écriture.
  5. Les lignes envoyées à HDFS pour écriture dans le fichier sont découpées en paquets et stochées temporairemenr dans une file d’attente, qui est prise en charge par une instance de DataStreamer :
    • DataStreamer demande au NameNode les adresses de trois blocs sur trois DataNodes différents pour y stocker les données de la file d’attente.
    • Chaque fois qu’un paquet de données a été stocké avec succès sur un DataNode, un accusé de réception du paquet est envoyé à FSDataOutputStream.
    • DataStreamer pourrait demander au NameNode trois nouvelles adresses lorsqu’un groupe de trois blocs est plein.
  6. Enfin, lorsque le dernier paquet a été écrit avec succès sur trois DataNodes différents, le programme Hadoop envoie close() à FSDataOutputStream.
Mais qu’arrive-t-il si un problème d’écriture intervient au niveau d’un DataNode ? HDFS le détecter, affecte un nouveau bloc de remplacement dans le cluster et réécrit dans ce nouveau bloc tous les paquets susceptibles d’être affectés par le problème d’écriture

Lecture d’un fichier HDFS par un programme Hadoop

Dans le cours précédent “Fonctionnement de HDFS” nous avons présenté HDFS (Hadoop Distributed Filesystem) et nous avons aussi detaillé son fonctionnement. Pour rappel, HDFS est le composant de Hadoop en charge du stockage des données dans un cluster Hadoop.

Dans cette partie nous allons  présenter un peu plus en détail les grandes étapes de Lecture de fichiers HDFS par un programme Hadoop :

  1. Le programme Hadoop demande l’ouverture du fichier à HDFS, par le biais d’une instruction open().
  2. HDFS demande au NameNode de localiser les premiers blocs constituant le fichier, par le biais d’un appel de type RPC
  3. Le NameNode s’assure que le programme Hadoop dispose des droits suffisants pour lire le fichier. Si oui, le NameNode renvoie à HDFS trois adresses pour chaque bloc. Sinon, une exception IOException est générée.
  4. HDFS renvoie une instance de FSDataInputStream au programme Hadoop, ce qui lui permet d’accéder au fichier en lecture, par le biais de l’instruction read().
  5. Une fois l’integralité d’un bloc a été lue, HDFS ferme la connexion avec le DataNode concerné, et en ouvre une nouvelle pour lire le bloc suivant.
  6. Enfin, lorsque la lecture du fichier est terminée, le programme Hadoop envoie close() à FSDataInputStream.
Mais qu’arrive-t-il si un problème de lecture intervient au niveau d’un bloc ? HDFS le détecte et essaye de lire le bloc concerné sur l’un des deux autres DataNode qui hébergent une copie.