Dai paper di Google al software open source
Nel 2003 e nel 2004 Google pubblica due articoli accademici che descrivono l’architettura interna dei propri sistemi: il Google File System (GFS) per lo storage distribuito e MapReduce per l’elaborazione parallela dei dati. I paper sono pubblici, ma il codice no. Hadoop nasce come implementazione open source di queste idee, sviluppata inizialmente da Doug Cutting e Mike Cafarella come sottoprogetto di Nutch, un motore di ricerca web open source.
Nel 2006 il progetto entra nell’Apache Software Foundation come progetto indipendente. È scritto in Java e progettato per funzionare su cluster di hardware commodity — server economici, senza componenti specializzati.
HDFS: lo storage distribuito
Il Hadoop Distributed File System (HDFS) è un file system progettato per memorizzare file di grandi dimensioni — nell’ordine dei gigabyte e dei terabyte — distribuendoli su decine o centinaia di macchine. L’architettura segue il modello master/worker:
- Il NameNode è il nodo master che gestisce i metadati del file system: la struttura delle directory, la posizione dei blocchi, le repliche. Non memorizza i dati, ma sa dove si trova ogni blocco
- I DataNode sono i nodi worker che memorizzano fisicamente i blocchi di dati. Ogni file viene suddiviso in blocchi di dimensione fissa (tipicamente 64 MB) e ogni blocco viene replicato su tre nodi diversi per default
La tolleranza ai guasti è una proprietà architettonica, non un’eccezione. HDFS assume che i guasti hardware siano la norma: quando un DataNode diventa irraggiungibile, il NameNode avvia automaticamente la ri-replicazione dei blocchi perduti su altri nodi disponibili.
MapReduce: il modello di calcolo
Il framework MapReduce permette di elaborare grandi volumi di dati in parallelo su un cluster HDFS. Il programmatore definisce due funzioni:
- Map: riceve una coppia chiave-valore in input e produce un insieme di coppie chiave-valore intermedie. Ogni nodo del cluster esegue la funzione map sui blocchi di dati locali, evitando di spostare dati sulla rete
- Reduce: aggrega tutte le coppie intermedie con la stessa chiave, producendo il risultato finale
Il framework gestisce automaticamente la distribuzione del lavoro, il trasferimento dei dati intermedi (shuffle), il monitoraggio dei task e il riavvio dei task falliti. Il programmatore si concentra sulla logica di elaborazione; la complessità della distribuzione è nascosta dall’infrastruttura.
Architettura per dati su larga scala
Hadoop non è un database e non sostituisce i sistemi relazionali. È un’infrastruttura per l’elaborazione batch di dataset troppo grandi per un singolo server. L’approccio: portare il calcolo dove si trovano i dati, anziché spostare i dati verso il calcolo. Su un cluster di centinaia di nodi commodity, Hadoop permette di elaborare petabyte di dati con costi contenuti e tolleranza ai guasti integrata nel design.
Link: hadoop.apache.org
