La tecnica principale per archiviare i file nella memoria risiede nel file system utilizzato dall'ambiente operativo. A differenza dei comuni filesystem, Hadoop utilizza un filesystem diverso che gestisce grandi set di dati su una rete distribuita. Si chiama Hadoop Distributed File System (HDFS) . Questo articolo introduce l'idea, con relative informazioni di base per cominciare.
Cos'è un filesystem?
Un filesystem in genere è un metodo e una struttura di dati utilizzati dal sistema operativo per gestire i file su un disco o una partizione. Dal punto di vista di un disco magnetico, ogni dato è una carica immagazzinata in settori tra le tracce. Pensa alle tracce come file a spirale e settori come le minuscole celle attraverso le tracce a spirale. Ora, se chiediamo al disco di localizzare alcuni dati, esso, nella migliore delle ipotesi, può reindirizzare la sua testa verso alcuni settori nella sequenza a spirale. Questi dati grezzi non sono significativi a meno che non entri in gioco il sistema operativo; ha il compito di delimitare le informazioni da una raccolta di settori da riconoscere come fascicolo. Un sistema operativo organizza le informazioni in una struttura di dati di contabilità chiamata filesystem. Questa struttura definisce il modello di contabilità. Ma c'è qualche differenza tecnica su come i sistemi operativi gestiscono questa struttura. Ad esempio, Windows utilizza il modello FAT32, NTFS, Linux utilizza EXT2, EXT3 e così via. Ma l'idea di base è che tutti organizzino i dati secondo una struttura definita.
L'organizzazione del filesystem è principalmente responsabile della gestione della creazione, modifica ed eliminazione di file (anche le directory sono file), partizione del disco, dimensioni dei file e così via, e operano direttamente sui settori grezzi di un disco o di una partizione.
File in un sistema distribuito
Le caratteristiche di un sistema distribuito sono diverse, nel senso che lo storage è disseminato su più macchine in una rete. Un singolo repository non può contenere una quantità così grande di dati. Se una singola macchina ha una capacità di archiviazione e una potenza di elaborazione limitate, ma, quando il lavoro di elaborazione e lo spazio di archiviazione sono distribuiti tra le macchine attraverso la rete, la potenza e l'efficienza diventano molteplici. Ciò non solo apre la possibilità di un'ampia potenza di elaborazione, ma sfrutta anche l'uso dell'infrastruttura esistente. Questo risultato è che il costo è ridotto al minimo, ma l'efficienza è aumentata. Ogni singola macchina nella rete diventa un potenziale cavallo di battaglia che ospita dati limitati mentre collettivamente fa parte di un archivio illimitato e di un'ampia potenza di elaborazione. Il compromesso è la complessità. Se ciò può essere sfruttato con tecniche innovative, un sistema distribuito è eccellente per affrontare i problemi dei big data. Il filesystem HDFS mira a raggiungere questo obiettivo. In effetti, oltre a HDFS, ci sono molti altri file system distribuiti simili, come GPFS (General Parallel File System) di IBM, Ceph, (Wikipedia link:elenco di file system distribuiti) e simili. Tutti cercano di affrontare questo problema da varie direzioni con diverse percentuali di successo.
Panoramica HDFS
Il normale filesystem è stato progettato per funzionare su una singola macchina o singolo ambiente operativo. I set di dati in Hadoop richiedono una capacità di archiviazione superiore a quella che può fornire una singola macchina fisica. Pertanto, diventa imperativo partizionare i dati su un numero di macchine. Ciò richiede un processo speciale per gestire i file attraverso la rete distribuita. HDFS è il file system che risolve specificamente questo problema. Questo filesystem è più complesso di un normale filesystem perché ha a che fare con la programmazione di rete, la frammentazione, la tolleranza ai guasti, la compatibilità con il filesystem locale e così via. Consente ad Hadoop di eseguire applicazioni Big Data su più server. È caratterizzato da un'elevata tolleranza ai guasti con un'elevata velocità di trasmissione dei dati su hardware a basso costo. L'obiettivo del file system HDFS è il seguente:
- Per gestire file molto grandi
- L'accesso ai dati in streaming al file system deve sfruttare un pattern di scrittura una volta e più volte.
- Esegui su hardware economico a basso costo
- Deve sfruttare l'accesso ai dati a bassa latenza.
- Supporta un numero enorme di file
- Supporta più writer di file con modifiche arbitrarie dei file
Nozioni di base su HDFS
Una quantità minima di dati che viene letta e scritta su un disco ha qualcosa chiamato dimensione del blocco . In genere, la dimensione di questo blocco è di 512 byte e i blocchi del file system sono di pochi kilobyte. HDFS funziona secondo lo stesso principio, ma la dimensione del blocco è molto maggiore. La dimensione del blocco più grande sfrutta la ricerca riducendo al minimo le ricerche e quindi i costi. Questi blocchi sono distribuiti in qualcosa chiamato cluster , che non sono altro che blocchi e copie di blocchi su diversi server della rete. I singoli file vengono replicati tra i server nel cluster.
Esistono due tipi di nodi che operano nel cluster in un modello master-slave. Il nodo principale è chiamato namenodes e il nodo di lavoro è chiamato datanodes . È attraverso questi nodi che HDFS mantiene il file (e la directory) albero di sistema e metadati. In effetti, un file viene suddiviso in blocchi e archiviato in un sottoinsieme di datanode per diffondersi nel cluster. Il datanode è responsabile delle richieste di lettura, scrittura, creazione di blocchi, eliminazione e replica nel file system.
I nodi dei nomi , d'altra parte, sono server che monitorano l'accesso al file system e mantengono i file di dati nell'HDFS. Associano i blocchi al datanode e gestiscono le richieste di apertura, chiusura e ridenominazione di file/directory.
Nodi dati sono la parte centrale del filesystem e svolgono il lavoro di archiviazione e recupero delle richieste di blocco dal client. Nome è il manutentore a cui datanode rapporto. Ciò significa che se i namenode vengono cancellati, le informazioni sui file andrebbero perse. Pertanto, Hadoop si assicura che il nodo del nome sia sufficientemente resiliente per resistere a qualsiasi tipo di errore. Una tecnica per garantire ciò è eseguirne il backup in un namenode secondario unendo periodicamente l'immagine dello spazio dei nomi con il registro delle modifiche. Il nodo secondario di solito risiede su una macchina separata che assume il ruolo di namenode principale in caso di guasto grave.
Esistono molti modi per interagire con il filesystem HDFS, ma l'interfaccia a riga di comando è forse la più semplice e comune. Hadoop può essere installato su una macchina ed eseguito per avere un assaggio di prima mano. ne parleremo negli articoli successivi, quindi resta sintonizzato.
Operazioni sul file system
Le operazioni del filesystem HDFS sono abbastanza simili alle normali operazioni del filesystem. Ecco alcuni elenchi solo per dare un'idea.
Copia i file dal filesystem locale in HDFS:
% hadoop fs -copyFromLocal docs/sales.txt hdfs://localhost/ user/mano/sales.txt
Crea una directory in HDFS:
% hadoop fs -mkdir students
Elenca i file e le directory nella directory di lavoro corrente in HDFS:
% hadoop fs -ls .
Conclusione
HDFS è un'implementazione di ciò che fa un filesystem rappresentato dall'astrazione di Hadoop. Hadoop è scritto in Java; quindi, tutte le interazioni del filesystem vengono intercettate tramite l'API Java. L'interfaccia della riga di comando è una shell fornita per le interazioni comuni. Lo studio dell'HDFS apre un orizzonte diverso al settore dell'architettura distribuita e delle sue complesse procedure di lavoro. Molto lavoro è in corso per perfezionare questo modello di calcolo, il cui impulso è stato senza dubbio quello dei Big Data negli ultimi anni.
Riferimento
Documentazione sull'architettura HDFS