Apache Hadoop: architettura di archiviazione per grandi quantità di dati
Big Data è la parola chiave per le crescenti quantità di dati. In tutto il mondo, le aziende sviluppano metodi sempre più efficienti per comprendere i dati elettronici, immagazzinarli in architetture di archiviazione giganti ed elaborarli sistematicamente. Petabyte e exabyte sono unità di misura tutt’altro che rare. Quindi, in quest’ordine di grandezze, è difficile che un unico sistema riesca a gestire i processi di calcolo. Le analisi dei Big Data presuppongono perciò una piattaforma software che consente di distribuire complessi compiti di computing su una grande quantità di nodi. In quest’ambito Apache Hadoop, un framework che si presenta come la base di molte distribuzioni e applicazioni per i Big Data, rientra tra le soluzioni più conosciute.
- vCPU estremamente vantaggiose e potenti core dedicati
- Massima flessibilità senza periodo contrattuale minimo
- Servizio di assistenza tecnica 24 ore su 24, 7 giorni su 7
Che cos’è Hadoop?
Apache Hadoop è una struttura per diversi componenti software basata su Java che consente di scomporre i compiti di calcolo (jobs) in processi in più parti, di distribuirli su diversi nodi di un cluster e lasciarli così lavorare parallelamente. Nelle architetture Hadoop più grandi sono utilizzati migliaia di singoli computer. In questo modo si ha il vantaggio che ogni computer del cluster deve mettere a disposizione solo una piccola parte delle risorse hardware necessarie. Il lavoro con grandi quantità di dati non richiede un computer di calcolo dalle prestazioni elevate, ma si può svolgere grazie a svariati server standard che ottimizzano i costi.
Il progetto open source Hadoop è stato creato nel 2006 dallo sviluppatore Doug Cutting e si rifà all’algoritmo di Google MapReduce. Quando nel 2004 il motore di ricerca ha rilasciato informazioni su una tecnologia in grado di consentire processi di calcolo complessi sulla base di grandi quantità di dati, che possono avvenire parallelamente grazie a un cluster, Cutting ha riconosciuto il potenziale di MapReduce e ne ha proseguito lo sviluppo in un proprio progetto. Lo sviluppatore, che ha lavorato presso i grandi del settore come Excite, Apple Inc. e Xerox Park e si è fatto un nome con Apache Lucene, è stato aiutato in questo progetto da Yahoo, il suo datore di lavoro all’epoca. Nel 2008 Hadoop è diventato il progetto di punta dell’Apache Software Foundation e alla fine del 2011 il framework è stato rilasciato nella versione 1.0.0.
Oltre alla release ufficiale dell’Apache Software Foundation, esistono diversi forks del framework, che vengono offerti ai clienti da diversi fornitori come distribuzioni aziendali. Un supporto per Hadoop c’è ad esempio presso l’attuale datore di lavoro di Doug Cutting, Cloudera, che con CDH mette a disposizione una distribuzione open source specifica per le aziende; prodotti simili si ritrovano anche con Hortonworks e Teradata. Microsoft ha integrato Hadoop nel servizio Cloud Azure e anche InfoSphere BigInsights di IBM si basa su questo progetto di Apache.
L’architettura di Hadoop: struttura e componenti di base
Quando si parla di Hadoop, si intende solitamente un pacchetto software completo, indicato anche come ecosistema di Hadoop. Qui si trovano oltre ai componenti di base (il core di Hadoop), diverse estensioni che non spiccano solo per i loro nomi curiosi, come Pig, Chukwa, Oozie o ZooKeeper, ma ampliano anche il framework con moltissime funzionalità aggiuntive per l’elaborazione di grandi quantità di dati. Tutte queste estensioni vengono portate avanti dall’Apache Software Foundation, a stretto contatto con gli altri progetti e si basano le une sulle altre.
Il core di Hadoop costituisce la base dell’ecosistema di questo framework. I componenti del core del software sono nella versione 1 il modulo di base Hadoop Common, Hadoop Distributed File System (HDFS) e un MapReduce Engine, che è stato sostituito da una tecnica di gestione di cluster, YARN (chiamato anche MapReduce 2.0), a partire dalla versione 2.3. Con questo l’algoritmo MapReduce è escluso dal sistema di gestione vero e proprio, così da diventare un plug-in basato su YARN.
Hadoop Common
Il modulo Hadoop Common mette a disposizione di tutti gli altri componenti del framework un set con funzioni di base: tra queste rientrano i file di archivio Java, che servono per avviare Hadoop, le librerie per la serializzazione dei dati, le interfacce utente per gli accessi al file system dell’architettura di Hadoop e la comunicazione Remote Procedure Call all’interno di un cluster. Inoltre nel modulo del codice sorgente di Hadoop Common si trovano la documentazione del progetto e le informazioni relative a sottoprogetti.
Hadoop Distributed File System (HDFS)
HDFS è un file system ad alta 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.
MapReduce Engine
Un altro componente fondamentale del core di Hadoop è l’algoritmo sviluppato da Google MapReduce, che nella versione 1 di Hadoop è implementato ancora come engine autonomo. I compiti principali di questo engine sono la gestione delle risorse, il controllo e il monitoring dei processi di calcolo (job scheduling/monitoring). L’elaborazione dei dati consta quindi essenzialmente delle fasi “Map” e “Reduce”, che consentono la modifica dei dati direttamente nel luogo di archiviazione (Data Locality), accelerando così le tempistiche di calcolo e riducendo la portata della rete. Durante la fase Map, i processi di calcolo complessi (jobs) vengono scomposti in singole parti e distribuiti da un JobTracker al nodo master a molti sistemi slave nel cluster. Là i TaskTracker fanno in modo che i processi scomposti in parti vengano portati a termine parallelamente. Nella successiva fase di Reduce vengono raccolti i risultati intermedi e convogliati in un esito complessivo.
Mentre i nodi master contengono solitamente i componenti NameNode e JobTracker, su ogni slave subordinato lavorano rispettivamente un DataNode e un TaskTracker. Con la release di Hadoop Version 2.3, il MapReduce Engine è stato drasticamente rielaborato. Il risultato è la tecnica di gestione del cluster YARN/MapReduce 2.0, che separa la gestione delle risorse e quella dei compiti del MapReduce (job scheduling/monitoring) e sfrutta il framework per nuovi modelli di rielaborazione e un’ampia scelta di applicazioni per i Big Data.
YARN/MapReduce 2.0
Con l’introduzione del modulo YARN (“Yet Another Resource Negotiator“), a partire dalla versione 2.3, è stata modificata notevolmente l’architettura di Hadoop. Si parla perciò anche di un passaggio da Hadoop 1 a Hadoop 2. Mentre Hadoop 1 mette a disposizione degli utenti solo l’applicazione MapReduce, la separazione della gestione delle risorse e dei compiti dal modello di elaborazione dei dati consente di integrare nel framework molte applicazioni per i Big Data. Di conseguenza MapReduce è su Hadoop 2 solo una delle possibili applicazioni per l’accesso ai dati, che si possono eseguire nel framework. Infatti il framework non viene più considerato da tempo come un semplice ambiente di test del MapReduce, dove YARN ricopre, invece, il ruolo di un sistema operativo distribuito per la gestione delle risorse per le applicazioni per i Big Data.
Le modifiche sostanziali dell’architettura di Hadoop riguardano soprattutto i due tracker del MapReduce Engine, che su Hadoop 2 non sono più dei componenti autonomi e il modulo YARN si basa perciò su tre nuovi elementi: il ResourceManager, il NodeManager e l’ApplicationMaster.
- ResourceManager: il ResourceManager globale ha la funzione di massima autorità nell’architettura Hadoop (master), al quale sono subordinati diversi NodeManager (slave). A questo spetta il ruolo di controllare il cluster, di orchestrare la distribuzione delle risorse sul NodeManager subordinato e di distribuire le applicazioni. Il Resource Manager sa dove si trovano i singoli sistemi slave nel cluster e quali risorse possono mettere a disposizione. Un componente importante del ResourceManager è il ResourceScheduler, che decide come distribuire le risorse disponibili nel cluster.
- NodeManager: su ogni nodo del cluster è presente un NodeManager, che assume la posizione di slave nell’infrastruttura di Hadoop 2 e svolge anche la funzione di destinatario dei comandi del ResourceManager. Se viene avviato un NodeManager su un nodo nel cluster, questo si registra presso il ResourceManager e invia un segno di vita periodico, l’Heartbeat. Ogni NodeManager è responsabile per le risorse del proprio nodo e mette a disposizione del cluster una parte di queste. Come queste risorse devono essere utilizzate nel cluster, viene gestito dal ResourceScheduler del ResourceManager.
- ApplicationMaster: ogni nodo all’interno del sistema YARN comprende un ApplicationMaster, che richiede le risorse dal ResourceManager e dal NodeManager e le assegna sotto forma di contenitori. Su questi contenitori vengono eseguite e controllate le applicazioni per i Big Data dell’ApplicationMaster.
Se dovesse essere eseguita un’applicazione per i Big Data su Hadoop 2, sono essenzialmente coinvolti nel processo 3 agenti principali:
- un client,
- un ResourceManager e
- uno o più NodeManager.
Nel primo passaggio il client trasmette l’ordine al ResourceManager che deve essere avviata un’applicazione per i Big Data nel cluster e viene perciò allocato un contenitore. Detto in altre parole, il Resource Manager prenota le risorse del cluster per l’applicazione e contatta un NodeManager. Il NodeManager interpellato avvia il contenitore ed esegue qui un ApplicationMaster, che è a sua volta responsabile dell’esecuzione e del controllo dell’applicazione.
L’ecosistema di Hadoop: componenti aggiuntivi
Oltre ai componenti del core, l’ecosistema di Hadoop comprende diverse estensioni, portate avanti da progetti software separati e che contribuiscono alla funzionalità e alla flessibilità del framework. Per via del codice sorgente aperto e delle moltissime interfacce si possono combinare questi componenti aggiuntivi a piacimento con le funzioni principali. La seguente lista indica una selezione dei progetti più conosciuti nell’ecosistema di Hadoop:
- Ambari: Ambari, un progetto di Apache, è stato iniziato dal distributore di Hadoop Hortonworks e integra l’ecosistema con uno strumento di installazione e di gestione, che agevola considerevolmente l’approvvigionamento (messa a disposizione delle risorse IT), oltre che la gestione e il monitoring dei componenti di Hadoop. Inoltre è presente un wizard che vi guiderà passo passo nell’installazione dei servizi di Hadoop su qualsiasi computer nel cluster, oltre che una funzione di gestione con la quale si possono avviare i servizi centralmente, interromperli o configurarli. Un’interfaccia grafica informa gli utenti sullo stato del sistema, mentre è possibile rilevare i parametri e configurare i livelli di allarme con Ambari Metrics System e Ambari Alert Framework.
- Avro: Apache Avro è un sistema per la serializzazione dei dati, basato su JSON per definire i tipi di dati e i protocolli. Invece, i dati veri e propri vengono serializzati in un formato binario compatto, che serve come formato di trasmissione dati per la comunicazione tra i diversi nodi di Hadoop, oltre che per i suoi servizi e programmi.
- Cassandra: Apache Cassandra è un sistema di gestione di database per la distribuzione di grandi quantità di dati, scritto in Java, che segue un approccio non relazionale e perciò si parla anche di database NoSQL. L’obiettivo del sistema open source, originariamente sviluppato da Facebook, è quello di garantire un’alta scalabilità e stabilità nelle grandi architetture distribuite. L’archiviazione dei dati ha luogo sulla base di relazioni chiave-valore.
- HBase: anche HBase è un database NoSQL open source, che consente di avere i permessi di scrittura e di lettura in tempo reale per grandi quantità di dati in un cluster. HBase si basa su BigTable, il database ad alte prestazioni sviluppato da Google. Rispetto ad altri database NoSQL, HBase si contraddistingue per un’alta consistenza dei dati.
- Chukwa: si tratta di un sistema di analisi e di elaborazione dei dati, che si basa su HDFS e sul MapReduce del framework di Hadoop e consente un monitoring in tempo reale così come analisi dei dati nei grandi sistemi distribuiti. Per questo Chukwa si basa su agent, che funzionano su ogni nodo da controllare e raccolgono i file di log eseguiti nei nodi dalle applicazioni, poi questi file vengono trasmessi ai cosiddetti Collectors e salvati nel HDFS.
- Flume: anche Apache Flume è un servizio, che è stato concepito per la raccolta, l’aggregazione e lo spostamento dei file di log. Per effettuare lo streaming dei dati per scopi di analisi e di archiviazione da diverse fonti a HDFS, Flume si basa sui formati di trasporto come Apache Thrift o Avro.
- Pig: Apache Pig è una piattaforma per l’analisi di grandi quantità di dati che mette a disposizione degli utenti di Hadoop il linguaggio di programmazione di alto livello Pig Latin, consentendo così di descrivere il flusso di dati dei MapReduce jobs ad un livello astratto. Le richieste MapReduce non vengono così più create in Java, ma vengono programmate nella molto più efficiente lingua Pig Latin, cosa che agevola notevolmente la gestione dei MapReduce jobs. Così si può ad esempio comprendere meglio l’esecuzione parallela delle analisi complesse. Pig Latin è stato originariamente sviluppato da Yahoo; il nome si rifà alle intenzioni con cui è stato sviluppato il software, infatti Pig è stato concepito per elaborare tutti i tipi di dati (strutturati, non strutturati o relazionali).
- Hive: con Apache Hive, Hadoop si può ampliare con un database centrale ottimizzato per scopi di analisi, chiamato Data Warehouse. Il software è stato progettato da Facebook e si basa sul framework di MapReduce. Con HiveQL, Hive dispone di una sintassi simile a SQL, che consente di interrogare i dati salvati in HDFS, condensarli o analizzarli. In più le richieste simili a SQL vengono convertite automaticamente in MapReduce Jobs.
- HCatalog: un componente principale di Apache Hive è HCatalog, un sistema di gestione di metadati e tabelle che consente di elaborare e salvare i dati, indipendentemente dal formato o dalla struttura. In più HCatalog descrive la struttura dei dati e agevola così l’utilizzo tramite Hive o Pig.
- Mahout: Apache Mahout amplia l’ecosistema di Hadoop con librerie di Java, facilmente ampliabili, per applicazioni di Data Mining e quelle matematiche per l’apprendimento meccanico. Gli algoritmi che si possono implementare con Mahout su Hadoop consentono operazioni come classificazione, clustering e impostazione di filtri collaborativi. In genere Mahout viene usato ad esempio nello sviluppo di servizi per dare suggerimenti (del tipo “I clienti che hanno comprato questo articolo, hanno anche comprato…”).
- Oozie: Oozie è un componente opzionale per il workflow che consente di strutturare una catena di processi, di automatizzarli e di eseguirli per un determinato periodo di tempo. Così Oozie compensa il deficit del MapReduce Engine di Hadoop 1, dove nella configurazione di base non si possono generare delle relazioni tra i MapReduce Job.
- Sqoop: Apache Sqoop è un componente software che facilita l’importazione e l’esportazione di grandi quantità di dati tra il framework Hadoop per i Big Data e la memorizzazione dei dati strutturati. Oggigiorno, nelle aziende i dati vengono solitamente salvati in database relazionali, quindi Sqoop consente uno scambio efficiente tra questi sistemi di archiviazione e il cluster.
- ZooKeeper: infine, Apache ZooKeeper offre servizi per coordinare i processi nel cluster, mettendo a disposizione le funzioni per la memorizzazione, la distribuzione e l’aggiornamento delle informazioni di configurazione.
L’uso di Hadoop nelle aziende
Il framework per i Big Data gode di una grande popolarità in moltissime aziende, visto che un cluster per Hadoop per l’elaborazione di grandi quantità di dati si può realizzare grazie a computer standard. Tra le aziende più prestigiose che utilizzano Hadoop si contano Adobe, AOL, eBay, Facebook, Google, IBM, LinkedIn, Twitter e Yahoo. Oltre alla possibilità di poter salvare ed elaborare parallelamente i dati su architetture distribuite in modo facile, il software open source si contraddistingue soprattutto per la sua stabilità, ampliabilità e per una grande varietà di funzioni.