Sommario:
- Avvio e funzionamento del NameNode
- Scrittura dei dati
- Lettura dei dati
- Bilanciamento dei dati nel cluster Hadoop
- Design del server master NameNode
Video: Hadoop Rack Awareness 2024
Il NameNode funge da rubrica per Hadoop Distributed File System (HDFS) perché non conosce solo quali blocchi costituiscono singoli file ma anche dove sono memorizzati ciascuno di questi blocchi e le loro repliche. Quando un utente memorizza un file in HDFS, il file viene diviso in blocchi di dati e tre copie di questi blocchi di dati vengono archiviate in nodi slave in tutto il cluster Hadoop.
Ci sono molti blocchi di dati da tenere sotto controllo. Come ci si potrebbe aspettare, sapere dove sono sepolti i corpi rende il NameNode un componente estremamente importante in un cluster Hadoop. Se il NameNode non è disponibile, le applicazioni non possono accedere ai dati memorizzati in HDFS.
Se si dà un'occhiata alla figura seguente, è possibile vedere il daemon NameNode in esecuzione su un server nodo principale. Tutte le informazioni di mappatura relative ai blocchi di dati e ai loro file corrispondenti sono memorizzate in un file chiamato.
HDFS è un file system di journaling, il che significa che qualsiasi modifica di dati viene registrata in un giornale di modifica che tiene traccia degli eventi dall'ultimo checkpoint - l'ultima volta in cui il registro di modifica è stato unito. In HDFS, il giornale di modifica viene mantenuto in un file denominato che è memorizzato sul NameNode.
Avvio e funzionamento del NameNode
Per capire come funziona il NameNode, è utile dare un'occhiata a come viene avviato. Poiché lo scopo del NameNode è di informare le applicazioni di quanti blocchi di dati devono elaborare e di tenere traccia della posizione esatta in cui sono archiviati, ha bisogno di tutte le posizioni dei blocchi e dei mapping da block-to-file disponibili in RAM.
Questi sono i passaggi necessari per il NameNode. Per caricare tutte le informazioni necessarie al NameNode dopo l'avvio, si verifica quanto segue:
-
Il NameNode carica il file in memoria.
-
Il NameNode carica il file e riproduce le modifiche registrate su giornale per aggiornare i metadati del blocco già in memoria.
-
I daemon DataNode inviano i report del blocco NameNode.
Per ogni nodo slave, è presente un report a blocchi che elenca tutti i blocchi di dati memorizzati e descrive lo stato di salute di ognuno.
Una volta completato il processo di avvio, il NameNode ha un'immagine completa di tutti i dati memorizzati in HDFS ed è pronto a ricevere richieste di applicazioni dai client Hadoop.
Poiché i file di dati vengono aggiunti e rimossi in base alle richieste dei client, le modifiche vengono scritte sui volumi del disco del nodo slave, gli aggiornamenti del journal vengono apportati al file e le modifiche si riflettono nelle posizioni dei blocchi e nei metadati memorizzati nella memoria del NameNode.
Durante tutta la vita del cluster, i daemon DataNode inviano gli heartbeat NameNode (un segnale rapido) ogni tre secondi, a indicare che sono attivi.(Questo valore predefinito è configurabile.) Ogni sei ore (di nuovo, un valore predefinito configurabile), i DataNodes inviano al NameNode un report a blocchi che descrive quali sono i blocchi di file sui loro nodi. In questo modo, il NameNode ha sempre una vista corrente delle risorse disponibili nel cluster.
Scrittura dei dati
Per creare nuovi file in HDFS, è necessario eseguire la seguente procedura:
-
Il client invia una richiesta al NameNode per creare un nuovo file.
Il NameNode determina quanti blocchi sono necessari e al client viene concesso un lease per la creazione di questi nuovi blocchi di file nel cluster. Come parte di questo contratto, il cliente ha un limite di tempo per completare l'attività di creazione. (Questo limite di tempo assicura che lo spazio di archiviazione non venga occupato da applicazioni client non riuscite.)
-
Il client scrive quindi le prime copie dei blocchi di file sui nodi slave utilizzando il lease assegnato dal NameNode.
Il NameNode gestisce le richieste di scrittura e determina dove devono essere scritti i blocchi di file e le loro repliche, bilanciando disponibilità e prestazioni. La prima copia di un blocco di file viene scritta in un rack e la seconda e la terza copia vengono scritte su un rack diverso rispetto alla prima copia, ma in diversi nodi slave nello stesso rack. Questa disposizione riduce al minimo il traffico di rete assicurando che nessun blocco di dati si trovi nello stesso punto di errore.
-
Poiché ogni blocco viene scritto su HDFS, un processo speciale scrive le rimanenti repliche sugli altri nodi slave identificati dal NameNode.
-
Dopo che i daemon DataNode confermano che le repliche dei blocchi di file sono state create, l'applicazione client chiude il file e notifica il NameNode, che quindi chiude il lease aperto.
Lettura dei dati
Per leggere i file da HDFS, dovrebbe essere eseguita la seguente procedura:
-
Il client invia una richiesta al NameNode per un file.
Il NameNode determina quali blocchi sono coinvolti e sceglie, in base alla vicinanza generale dei blocchi tra loro e al client, il percorso di accesso più efficiente.
-
Il client accede quindi ai blocchi utilizzando gli indirizzi forniti dal NameNode.
Bilanciamento dei dati nel cluster Hadoop
Nel tempo, con combinazioni di pattern di ingestione dei dati non uniformi (in cui alcuni nodi slave potrebbero avere più dati scritti) o errori del nodo, è probabile che i dati vengano distribuiti in modo non uniforme tra i rack e i nodi slave nel tuo cluster Hadoop.
Questa distribuzione non uniforme può avere un impatto negativo sulle prestazioni perché la richiesta sui singoli nodi slave diventa sbilanciata; i nodi con pochi dati non saranno completamente utilizzati; e i nodi con molti blocchi saranno abusati. ( Nota: L'uso eccessivo e sottoutilizzato si basano sull'attività del disco, non su CPU o RAM.)
HDFS include un'utilità di bilanciamento per ridistribuire i blocchi da nodi slave sovrautilizzati a quelli sottoutilizzati mantenendo la politica di inserimento blocchi su diversi nodi e rack slave. Gli amministratori di Hadoop dovrebbero controllare regolarmente l'integrità di HDFS e, se i dati vengono distribuiti in modo non uniforme, dovrebbero richiamare l'utilità di bilanciamento.
Design del server master NameNode
A causa della sua natura mission-critical, il server master che esegue il daemon NameNode richiede requisiti hardware notevolmente diversi rispetto a quelli per un nodo slave. Più significativamente, i componenti di livello aziendale devono essere utilizzati per ridurre al minimo la probabilità di un'interruzione. Inoltre, avrai bisogno di abbastanza RAM per caricare in memoria tutti i metadati e i dati sulla posizione di tutti i blocchi di dati archiviati in HDFS.