Le HDFS repose sur une architecture maître/esclave.
- Un cluster HDFS comprend un NameNode, qui joue le rôle de serveur principal (anciennement « maître »). Le NameNode surveille l’état de tous les fichiers, les autorisations d’accès et l’emplacement de chaque bloc. Le logiciel NameNode gère l’espace de noms du système de fichiers, et contrôle l’accès des clients aux fichiers et exécute des opérations telles que l’ouverture, la fermeture et le renommage des répertoires et fichiers.
L’espace de noms divise également les fichiers en blocs et assigne ces blocs aux DataNodes, qui constituent la partie secondaire (anciennement « esclave ») du système. En configurant un seul NameNode par cluster, l’architecture du système simplifie la gestion des données et le stockage des métadonnées du HDFS. De plus, une sécurité renforcée est assurée en empêchant les données utilisateur de transiter par le NameNode.
- En général, chaque nœud d’un cluster dispose d'un DataNode qui gère le stockage des données sur ce nœud. Le logiciel DataNode gère la création, la suppression et la réplication des blocs, ainsi que les demandes de lecture et d'écriture. Chaque DataNode stocke les données HDFS dans son système de fichiers local, chaque bloc étant un fichier distinct. Les DataNodes sont les nœuds esclave (ou processus Hadoop fonctionnant en arrière-plan) et peuvent s'exécuter sur du matériel standard, permettant ainsi aux organisations de réduire les coûts.
Le NameNode et le DataNode sont des logiciels écrits pour fonctionner sur une large gamme de systèmes d'exploitation, souvent basés sur GNU/Linux. Le HDFS étant écrit en Java, toute machine supportant Java peut exécuter les logiciels NameNode et DataNode.
Les déploiements incluent souvent une machine dédiée à l'exécution du logiciel NameNode, tandis que les autres machines du cluster exécutent chacune une instance unique du logiciel DataNode. En cas de besoin, bien que rarement, il est possible de configurer plusieurs DataNodes sur une même machine.
Lorsque les données sont intégrées dans le HDFS, elles sont fragmentées en blocs et réparties sur les différents nœuds du cluster. Les données étant stockées dans plusieurs DataNodes, les blocs peuvent être répliqués sur d'autres nœuds pour permettre un traitement parallèle. Le système de fichiers distribués (DFS) propose des commandes pour accéder rapidement aux données, les récupérer, les déplacer et les visualiser. Grâce à la réplication des blocs de données sur plusieurs DataNodes, une copie peut être supprimée sans risquer de corrompre les autres copies. La taille par défaut des blocs dans le HDFS est de 128 Mo (Hadoop 2.x), une taille que certains peuvent considérer comme importante. Cependant, cette taille vise à minimiser les temps de recherche et à réduire la quantité de métadonnées nécessaires.
Pour minimiser les risques et accélérer le traitement, lorsqu’un DataNode cesse de communiquer avec le NameNode, ce DataNode est retiré du cluster et les opérations se poursuivent sans lui. Si ce DataNode redevient opérationnel par la suite, il est réassigné à un nouveau cluster.
Le HDFS propose des moyens d’accès flexibles aux données via différentes interfaces : une API Java native est incluse, un wrapper en langage C est disponible pour l’API Java, et il est également possible d’utiliser un navigateur HTTP pour parcourir les fichiers d’une instance HDFS.