Hadoop 2 – HDFS Federation

Le dispositif HDFS Federation permet de faire cohabiter plusieurs NameNodes (NN) au sein d’un même cluster physique.

Les NN sont indépendants deux à deux : chaque NN gère un espace de nommage (namespace) qui lui est propre et les NN ne communiquent pas entre eux.

Chaque NN se voit allouer un certain nombre de blocs pour stocker les fichiers dont il a la charge. Ces blocs sont répartis sur plusieurs nœuds. Un disque peut héberger des blocs correspondant à des NN différents.

L’intérêt du concept de Federation est double :

  • Federation facilite le scaling out d’un cluster :
    • Il est facile de rajouter des nœuds pour augmenter la capacité de stockage et/ou la puissance de traitement mais, dans la version 1, toute la charge de travail repose sur un seul NN, ce qui a ses limites lorsque l’on gère des clusters de plusieurs milliers de nœuds.
    • La version 2 de Hadoop, en distribuant la charge de travail entre plusieurs NN, facilite l’avènement de clusters de grande taille ; les temps de réponse au niveau des NN peuvent être améliorés (moins de métadonnées à gérer pour chaque NN, d’où besoins en RAM et en temps CPU moindres pour chaque NN, etc.).
  • Federation permet d’isoler chaque namespace des autres, par exemple pour faire cohabiter au sein d’un même cluster physique un cluster logique de développement et un cluster logique de production.
Une Federation HDFS

Une Federation HDFS

Les notions de High Availability et de Federation sont indépendantes. Il est possible d’activer l’une ou l’autre, ou les deux. Dans ce dernier cas, il faut activer l’option Federation avant d’activer l’option High Availability.

Fonctionnement de HDFS

Présentation de HDFS

HDFS (Hadoop Distributed File System) est le composant de Hadoop en charge du stockage des données dans un cluster Hadoop

HDFS reprend de nombreux concepts proposés par des systèmes de fichiers classiques comme ext2 pour Linux ou FAT pour Windows. Nous retrouvons donc la notion de blocs (la plus petite unité que l’unité de stockage peut gérer), les métadonnées qui permettent de retrouver les blocs à partir d’un nom de fichier, les droits ou encore l’arborescence des répertoires.

Toutefois, HDFS se démarque d’un système de fichiers classique pour les principales raisons suivantes :

  • HDFS est optimisé pour maximiser les débits de données. La taille d’un bloc de données est ainsi de 64 Mo dans HDFS contre 512 octets à 4 Ko dans la plupart des systèmes de fichiers traditionnels, ce qui permet de réduire le seek time. ( Il est toutefois possible d’augmenter la taille d’un bloc à 128 Mo ou à 256 Mo en fonction des besoins)
  • HDFS est un système de gestion de fichiers du type Write Once Read Many (WORM) : on y écrit une fois le fichier, puis on y accède plusieurs fois..
  • HDFS fournit un système de réplication des blocs dont le nombre de réplications est configurable (3 par défaut). Pendant la phase d’écriture, chaque bloc correspondant au fichier est répliqué sur des nœuds distincts dans le cluster, ce qui contribue à en garantir la fiabilité et la disponibilité au moment de lecture de données. Si un bloc est indisponible sur un nœud, des copies de ce bloc seront disponibles sur d’autres nœuds.
  • HDFS s’appuie sur le système de fichier natif de l’OS pour présenter un système de stockage unifié reposant sur un ensemble de disques et de systèmes de fichiers hétérogènes.

Fonctionnement de HDFS

Le fonctionnement de HDFS est assuré par trois types de deamons :

1. Le NameNode (noeud maitre – master node):

Dans un cluster Hadoop, le NameNode gère l’espace de noms, l’arborescence du système de fichiers et les métadonnées des fichiers et des répertoires. Il centralise la localisation des blocs de données répartis dans le cluster.

Quand un client sollicite Hadoop pour récupérer un fichier, c’est via le Namenode que l’information est extraite. Ce Namenode va indiquer au client quels sont les Datanodes qui contiennent les blocs.

Le NameNode reçoit régulièrement un « battement de cœur » et un Blockreport de tous les DataNodes dans le cluster afin de s’assurer que les datanodes fonctionnent correctement. Un Bloclreport (ou rapport de bloc) contient une liste de tous les blocs d’un DataNode.

En cas de défailance du datanode, le NameNode choisit de nouveaux datanodes pour de nouvelles réplications de blocs de données, équilibre la charge d’utilisation des disques et gère également le trafic de communication des datanodes.

Les métadonnées sont stockées sur disque dur (fichier fsimage) et chargées dans la mémoire vive du NameNode lors du démarrage du cluster
Si vous perdez le NameNode, vous perdez HDFS!

2. Le SecondaryNameNode :

Il s’agit ici d’un abus de langage! Dans l’architecture HDFS, le nom – Secondary NameNode donne l’impression que c’est un substitut du NameNode. Hélas! Ce n’est pas le cas..

Le SecondaryNameNode effectue des tâches de maintenance pour le compte du NameNode. Plus précisément, le Secondary NameNode met à jour le fichier fsimage à interval régulier en y intégrant le contenu des edits.

Le SecondaryNameNode intervient soit :

  • lorsque le fichier edits atteint une taille prédéfinie.
  • à intervalle régulier (par exemple une fois par heure).

3. Le DataNode :