Le framework Apache Hadoop
Le système de fichiers HDFS

Présentation et influences
HDFS, pour Hadoop Distributed File System, est le système de fichiers permettant de gérer le stockage des données sur les machines d'une architecture Hadoop. Son intéret est de s'abstraire de l'architecture physique de stockage, configurée dans la bibliothèque Hadoop, pour manipuler un système de fichiers distribué, comme si il s'agissait d'un disque dur unique.
L'exécutable Hadoop, comme nous le verrons dans la prochain partie, permet la manipulation du système de fichiers
HDFS comporte presque les même caractéristiques que le système de fichiers GFS de Google car il est basé sur les même principes. La principale différence est le langage de programmation utilisé car si GFS est développé en C++, Hadoop est quant à lui basé sur Java.
Quelques différences sensibles sur les opérations possibles par HDFS et sur son fonctionnement interne font qu'il est légèrement plus performant que GFS et plus adapté au développement d'applications.
Principales caractéristiques
Les principales caractéristiques de ce système de fichiers, permettant de montrer son fonctionnement, sont les suivantes :
- Découpe les fichiers à stocker sur le système en blocs de multiples de 64Mo (chunks)
- A partir de la configuration du cluster effectuée dans la bibliothèque Hadoop, gère automatiquement la réplication des données sur les noeuds esclaves
- Utilise SSH pour sécuriser les transferts de données entre les noeuds du système
- Utilise le protocole TCP pour la communication au niveau de la couche transport et RCP pour l'envoi de signalisation entre les noeuds
Il est a noter que de nombreux paramètres de fonctionnement du système de fichiers distribué d'Hadoop sont configurables dans le répertoire conf/ de la bibliothèque Hadoop.
Les machines bénéficiant des rôles de NameNode et de DataNodes sont directement liés à ces caractéristiques dans le cadre du fonctionnement de HDFS.
Problématiques traitées
HDFS permet de répondre à certaines problématiques faisant partie des principaux objectfs d'Hadoop.
Il permet d'assurer la robustesse et le maintien du stockage des fichiers au travers de différents mécanismes :
- Envoi régulier de messages RPC "heart-beats" permettant au NameNode maître de s'assurer du statut des noeuds esclaves. Il peut ainsi détecter rapidement si un noeud esclave est tombé.
- Gère l'auto-balancing au niveau de la localisation d'un chunk à stocker. Cette répartition de charge permet ainsi que la charge de calcul dans le cas de mapreduce soit répartie de manière homogène sur les noeuds esclaves.
- Utilise des sommes de contrôles md5 lors des transferts de données entre le NameNode et les DataNodes afin d'assurer l'intégrité des données.
Il assure également une organisation des données efficace via les principes suivants :
- Découpage des fichiers en blocs de même taille
- Mise en cache des fichiers sur les noeuds maîtres avant envoi aux noeuds esclaves
- Réplication des données des noeuds esclaves
Nous allons maintenant voir les différentes commandes qu'utilise l'exécutable hadoop pour manipuler le système de fichiers distribué et exéctuer des tâches mapreduce