Archiviazione distribuita che suddivide i file in blocchi replicati sui nodi del cluster, fornendo tolleranza ai guasti, capacità scalabile e accesso ad alta velocità di trasferimento
HDFS (Hadoop Distributed File System) è il sistema di archiviazione primario utilizzato dalle applicazioni Hadoop. Questo framework open source funziona trasferendo rapidamente dati tra i nodi. Viene spesso utilizzato da aziende che necessitano di gestire e archiviare big data. HDFS è un componente chiave di molti sistemi Hadoop, poiché fornisce un mezzo per la gestione dei big data, oltre a supportare l'analisi dei big data.
Ci sono molte aziende in tutto il mondo che utilizzano HDFS, quindi cos'è esattamente e perché è necessario? Immergiamoci in ciò che è HDFS e perché potrebbe essere utile per le aziende.
HDFS sta per Hadoop Distributed File System. HDFS opera come un file system distribuito progettato per essere eseguito su hardware di commodity.
HDFS è tollerante ai guasti ed è progettato per essere distribuito su hardware di commodity a basso costo. HDFS fornisce un accesso ai dati ad alta produttività ai dati delle applicazioni ed è adatto per applicazioni che hanno grandi set di dati e abilita l'accesso in streaming ai dati del file system in Apache Hadoop.
Quindi, cos'è Hadoop? E in cosa differisce da HDFS? Una differenza fondamentale tra Hadoop e HDFS è che Hadoop è il framework open source che può archiviare, elaborare e analizzare dati, mentre HDFS è il file system di Hadoop che fornisce l'accesso ai dati. Ciò significa essenzialmente che HDFS è un modulo di Hadoop.
Diamo un'occhiata all'architettura di HDFS:

Come possiamo vedere, si concentra su NameNodes e DataNodes. Il NameNode è l'hardware che contiene il sistema operativo e il software GNU/Linux. Il file system distribuito Hadoop funge da server master e può gestire i file, controllare l'accesso di un client ai file e supervisionare i processi operativi sui file come rinominare, aprire e chiudere file.
Un DataNode è un hardware che possiede il sistema operativo GNU/Linux e il software DataNode. Per ogni nodo in un cluster HDFS, troverai un DataNode. Questi nodi aiutano a controllare l'archiviazione dei dati del loro sistema poiché possono eseguire operazioni sui file system se il client lo richiede, e anche creare, replicare e bloccare file quando il NameNode lo istruisce.
Il significato e lo scopo di HDFS sono raggiungere i seguenti obiettivi:
Quali sono le origini di Hadoop? La progettazione di HDFS si basava sul Google File System. È stato originariamente costruito come infrastruttura per il progetto del motore di ricerca web Apache Nutch, ma da allora è diventato un membro dell'Ecosistema Hadoop.
Nei primi anni di Internet, sono apparsi i web crawler come mezzo per le persone per cercare informazioni sulle pagine web. Ciò ha creato vari motori di ricerca come Yahoo e Google.
Ha anche creato un altro motore di ricerca chiamato Nutch, che voleva distribuire dati e calcoli su più computer contemporaneamente. Nutch si è poi trasferito a Yahoo, ed è stato diviso in due. Apache Spark e Hadoop sono ora entità separate. Dove Hadoop è progettato per gestire l'elaborazione batch, Spark è fatto per gestire i dati in tempo reale in modo efficiente.
Oggi, la struttura e il framework di Hadoop sono gestiti dalla Apache Software Foundation, che è una comunità globale di sviluppatori e contributori di software.
HDFS è nato da questo ed è progettato per sostituire le soluzioni di archiviazione hardware con un metodo migliore e più efficiente: un file system virtuale. Quando è apparso per la prima volta, MapReduce era l'unico motore di elaborazione distribuita che poteva utilizzare HDFS. Più recentemente, componenti alternativi di servizi dati Hadoop come HBase e Solr utilizzano anche HDFS per archiviare dati.
Quindi, cosa sono i big data e come entra in gioco HDFS? Il termine "big data" si riferisce a tutti i dati difficili da archiviare, elaborare e analizzare. I big data di HDFS sono dati organizzati nel file system HDFS.
Come sappiamo ora, Hadoop è un framework che funziona utilizzando l'elaborazione parallela e l'archiviazione distribuita. Questo può essere utilizzato per ordinare e archiviare big data, poiché non possono essere archiviati nei modi tradizionali.
Infatti, è il software più comunemente utilizzato per gestire i big data, ed è utilizzato da aziende come Netflix, Expedia e British Airways che hanno una relazione positiva con Hadoop per l'archiviazione dei dati. HDFS nei big data è vitale, poiché è così che molte aziende scelgono ora di archiviare i propri dati.
Ci sono cinque elementi fondamentali dei big data organizzati dai servizi HDFS:
Come sottoprogetto open source all'interno di Hadoop, HDFS offre cinque vantaggi fondamentali quando si tratta di big data:
Compatibilità e portabilità. HDFS è progettato per essere portatile su una varietà di configurazioni hardware e compatibile con diversi sistemi operativi sottostanti, offrendo in definitiva agli utenti la possibilità di utilizzare HDFS con la propria configurazione personalizzata. Questi vantaggi sono particolarmente significativi quando si tratta di big data e sono stati resi possibili dal modo particolare in cui HDFS gestisce i dati.
Questo grafico dimostra la differenza tra un file system locale e HDFS.

Quindi, come si usa HDFS? Bene, HDFS funziona con un NameNode principale e più altri datanode, tutti su un cluster di hardware di commodity. Questi nodi sono organizzati nello stesso posto all'interno del data center. Successivamente, viene suddiviso in blocchi che vengono distribuiti tra i DataNode multipli per l'archiviazione. Per ridurre le possibilità di perdita di dati, i blocchi vengono spesso replicati tra i nodi. È un sistema di backup in caso di perdita di dati.
Vediamo i NameNode. Il NameNode è il nodo all'interno del cluster che sa cosa contiene il dato, a quale blocco appartiene, la dimensione del blocco e dove dovrebbe andare. I NameNode sono anche utilizzati per controllare l'accesso ai file, inclusi i momenti in cui qualcuno può scrivere, leggere, creare, rimuovere e replicare dati tra i vari DataNode.
Il cluster può anche essere adattato quando necessario in tempo reale, a seconda della capacità del server, il che può essere utile quando c'è un picco di dati. I nodi possono essere aggiunti o rimossi quando necessario.
Ora, passiamo ai DataNode. I DataNode sono in costante comunicazione con i NameNode per identificare se devono avviare e completare un'attività. Questo flusso di collaborazione costante significa che il NameNode è pienamente consapevole dello stato di ciascun DataNode.
Quando un DataNode viene individuato come non operativo nel modo corretto, il NameNode è in grado di riassegnare automaticamente tale attività a un altro nodo funzionante nello stesso datablock. Allo stesso modo, i DataNode sono anche in grado di comunicare tra loro, il che significa che possono collaborare durante le operazioni standard sui file. Poiché il NameNode è consapevole dei DataNode e delle loro prestazioni, sono cruciali nel mantenimento del sistema.
I Datablock vengono replicati su più DataNode e acceduti dal NameNode.
Per utilizzare HDFS è necessario installare e configurare un cluster Hadoop. Questo può essere una configurazione a nodo singolo, più adatta agli utenti alle prime armi, o una configurazione a cluster per cluster di grandi dimensioni e distribuiti. È quindi necessario familiarizzare con i comandi HDFS, come quelli sottostanti, per operare e gestire il proprio sistema.
| Comando | Descrizione |
| -rm | Rimuove file o directory |
| -ls | Elenca i file con permessi e altri dettagli |
| -mkdir | Crea una directory chiamata path in HDFS |
| -cat | Mostra il contenuto del file |
| -rmdir | Elimina una directory |
| -put | Carica un file o una cartella da un disco locale a HDFS |
| -rmr | Elimina il file identificato da path o la cartella e le sottocartelle |
| -get | Sposta file o cartella da HDFS a file locale |
| -count | Conta il numero di file, il numero di directory e la dimensione del file |
| -df | Mostra lo spazio libero |
| -getmerge | Unisce più file in HDFS |
| -chmod | Cambia i permessi del file |
| -copyToLocal | Copia i file nel sistema locale |
| -Stat | Stampa statistiche sul file o sulla directory |
| -head | Visualizza il primo kilobyte di un file |
| -usage | Restituisce l'aiuto per un singolo comando |
| -chown | Assegna un nuovo proprietario e gruppo a un file |
Come accennato in precedenza, HDFS utilizza NameNode e DataNode. HDFS consente il rapido trasferimento di dati tra i nodi di calcolo. Quando HDFS riceve dati, è in grado di suddividere le informazioni in blocchi, distribuendoli a diversi nodi in un cluster.
I dati vengono suddivisi in blocchi e distribuiti tra i DataNode per l'archiviazione; questi blocchi possono anche essere replicati tra i nodi, consentendo un'efficiente elaborazione parallela. È possibile accedere, spostarsi e visualizzare i dati tramite vari comandi. Le opzioni HDFS DFS come "-get" e "-put" consentono di recuperare e spostare i dati secondo necessità.
Inoltre, HDFS è progettato per essere altamente reattivo e può rilevare rapidamente i guasti. Il file system utilizza la replica dei dati per garantire che ogni pezzo di dato venga salvato più volte e quindi lo assegna a singoli nodi, garantendo che almeno una copia sia su un rack diverso rispetto alle altre copie.
Ciò significa che quando un DataNode non invia più segnali al NameNode, questo rimuove il DataNode dal cluster e opera senza di esso. Se questo nodo dati ritorna, può essere assegnato a un nuovo cluster. Inoltre, poiché i datablock sono replicati su diversi DataNode, la rimozione di uno non comporterà alcuna corruzione dei file di alcun tipo.
È importante sapere che ci sono tre componenti principali di Hadoop. Hadoop HDFS, Hadoop MapReduce e Hadoop YARN. Diamo un'occhiata a cosa questi componenti portano ad Hadoop:
Vuoi sapere come creare un file system HDFS? Segui i passaggi seguenti che ti guideranno su come creare il sistema, modificarlo e rimuoverlo se necessario.
Il tuo elenco HDFS dovrebbe essere /user/yourUserName. Per visualizzare il contenuto della tua directory home HDFS, inserisci:
Dato che sei solo all'inizio, non sarai in grado di vedere nulla in questa fase. Quando vuoi visualizzare il contenuto di una directory non vuota, inserisci:
Potrai quindi vedere i nomi delle directory home di tutti gli altri utenti Hadoop.
Ora puoi creare una directory di test, chiamiamola testHDFS. Apparirà all'interno del tuo HDFS. Inserisci semplicemente quanto segue:
Ora devi verificare che la directory esista utilizzando il comando che hai inserito quando hai elencato il tuo HDFS. Dovresti vedere la directory testHDFS elencata.
Verificalo di nuovo utilizzando il percorso completo HDFS della tua HDFS. Inserisci:
Verifica che questo funzioni prima di passare ai passaggi successivi.
Per copiare un file dal tuo file system locale a HDFS, inizia creando un file che desideri copiare. Per fare ciò, inserisci:
Questo creerà un nuovo file chiamato testFile, inclusi i caratteri HDFS test file. Per verificarlo, inserisci:
ls
E poi per verificare che il file sia stato creato, inserisci:
Dovrai quindi copiare il file in HDFS. Per copiare file da Linux a HDFS, devi usare:
Nota che devi usare il comando "-copyFromLocal" perché il comando "-cp" viene utilizzato per copiare file all'interno di HDFS.
Ora devi solo confermare che il file è stato copiato correttamente. Fallo inserendo quanto segue:
Quando hai copiato il testfile, è stato inserito nella directory home di base. Ora puoi spostarlo nella directory testHDFS che hai già creato. Usa quanto segue:
La prima parte ha spostato il tuo testFile dalla directory home HDFS a quella di test che hai creato. La seconda parte di questo comando ci mostra quindi che non è più nella directory home HDFS, e la terza parte conferma che è stato ora spostato nella directory test HDFS.
Per copiare un file, inserisci:
Il controllo dello spazio su disco è utile quando si utilizza HDFS. Per fare ciò, puoi inserire il seguente comando:
Questo ti permetterà quindi di vedere quanto spazio stai utilizzando nella tua HDFS. Puoi anche vedere quanto spazio è disponibile in HDFS nel cluster inserendo:
Potrebbe arrivare un momento in cui è necessario eliminare un file o una directory in HDFS. Questo può essere ottenuto con il comando:
Vedrai che hai ancora la directory testHDFS e testFile2 rimaste che hai creato. Rimuovi la directory inserendo:
Apparirà un messaggio di errore, ma non farti prendere dal panico. Leggerà qualcosa come "rmdir: testhdfs: Directory is not empty". La directory deve essere vuota prima di poter essere eliminata. Puoi usare il comando "rm" per aggirare questo problema e rimuovere una directory inclusi tutti i file che contiene. Inserisci: