HDFS è un file system adalta disponibilità, che serve per l’archiviazione di grandi quantità di dati in un cluster ed è così responsabile all’interno del framework per la conservazione dei dati. In più i file vengono scomposti in blocchi e distribuiti in modo ridondante senza uno schema preciso su diversi nodi. Secondo gli sviluppatori, HDFS è in grado di gestire una quantità di dati con cifre a tre zeri (quindi che si aggirano intorno a diversi milioni). Si possono configurare a proprio piacimento sia la lunghezza dei blocchi sia il grado di ridondanza.
Il cluster di Hadoop funziona essenzialmente secondo il principio master-slave: l’architettura del framework è composta da un nodo master a cui sono subordinati molti nodi slaves. Questo principio si riflette anche nella struttura del HDFS, che si basa su un NameNode e diversi DataNodes subordinati. Il NameNode gestisce tutti i metadati del file system, mantenendo la struttura delle cartelle e i file. L’immagazzinamento dei dati vero e proprio avviene sui DataNodes subordinati. Per ridurre le perdite di dati, i file vengono scomposti in singoli blocchi e salvati più volte su diversi nodi. La configurazione standard prevede che ogni blocco sia presente in una tripla versione.
Ogni DataNode invia al NameNode un segno di vita ad intervalli regolari, chiamati Heartbeat. Se questo segnale manca, il NameNode dichiara il corrispettivo slave “morto” e si occupa di garantire, grazie alle copie di dati su altri nodi, che siano disponibili abbastanza copie dei blocchi coinvolti nel cluster, nonostante il crash. Al NameNode spetta un ruolo centrale all’interno del framework. Per evitare che si verifichi un “Single Point of Failure”, si è soliti affiancare a questo nodo master un SecondaryNameNode, che si contraddistingue per i cambiamenti complessivi in riferimento ai metadati e consente così un ripristino delle istanze di controllo principali.
Nel passaggio da Hadoop 1 a Hadoop 2, HDFS è stato ampliato con altri sistemi di sicurezza: NameNode HA (High Availability) aggiunge al sistema una protezione automatica contro i crash, avviando automaticamente un componente sostitutivo in caso di un crash del NameNode. Una funzione di snapshot consente inoltre di riportare il sistema ad uno stadio precedente. Così tramite l’estensione Federation si possono gestire più NameNodes all’interno di un cluster.