Big Data è la parola chiave per le crescenti quantità di dati. In tutto il mondo, le aziende svi­lup­pa­no metodi sempre più ef­fi­cien­ti per com­pren­de­re i dati elet­tro­ni­ci, im­ma­gaz­zi­nar­li in ar­chi­tet­tu­re di ar­chi­via­zio­ne giganti ed ela­bo­rar­li si­ste­ma­ti­ca­men­te. 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 pre­sup­pon­go­no perciò una piat­ta­for­ma software che consente di di­stri­bui­re 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 di­stri­bu­zio­ni e ap­pli­ca­zio­ni per i Big Data, rientra tra le soluzioni più co­no­sciu­te.

Compute Engine
La soluzione IaaS ideale per i tuoi carichi di lavoro
  • vCPU estre­ma­men­te van­tag­gio­se e potenti core dedicati
  • Massima fles­si­bi­li­tà senza periodo con­trat­tua­le minimo
  • Servizio di as­si­sten­za tecnica 24 ore su 24, 7 giorni su 7

Che cos’è Hadoop?

Apache Hadoop è una struttura per diversi com­po­nen­ti software basata su Java che consente di scomporre i compiti di calcolo (jobs) in processi in più parti, di di­stri­buir­li su diversi nodi di un cluster e lasciarli così lavorare pa­ral­le­la­men­te. Nelle ar­chi­tet­tu­re Hadoop più grandi sono uti­liz­za­ti migliaia di singoli computer. In questo modo si ha il vantaggio che ogni computer del cluster deve mettere a di­spo­si­zio­ne solo una piccola parte delle risorse hardware ne­ces­sa­rie. Il lavoro con grandi quantità di dati non richiede un computer di calcolo dalle pre­sta­zio­ni elevate, ma si può svolgere grazie a svariati server standard che ot­ti­miz­za­no i costi.

Il progetto open source Hadoop è stato creato nel 2006 dallo svi­lup­pa­to­re Doug Cutting e si rifà all’algoritmo di Google MapReduce. Quando nel 2004 il motore di ricerca ha ri­la­scia­to in­for­ma­zio­ni su una tec­no­lo­gia in grado di con­sen­ti­re processi di calcolo complessi sulla base di grandi quantità di dati, che possono avvenire pa­ral­le­la­men­te grazie a un cluster, Cutting ha ri­co­no­sciu­to il po­ten­zia­le di MapReduce e ne ha pro­se­gui­to lo sviluppo in un proprio progetto. Lo svi­lup­pa­to­re, 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 Foun­da­tion e alla fine del 2011 il framework è stato ri­la­scia­to nella versione 1.0.0.

Oltre alla release ufficiale dell’Apache Software Foun­da­tion, esistono diversi forks del framework, che vengono offerti ai clienti da diversi fornitori come di­stri­bu­zio­ni aziendali. Un supporto per Hadoop c’è ad esempio presso l’attuale datore di lavoro di Doug Cutting, Cloudera, che con CDH mette a di­spo­si­zio­ne una di­stri­bu­zio­ne open source specifica per le aziende; prodotti simili si ritrovano anche con Hor­to­n­works e Teradata. Microsoft ha integrato Hadoop nel servizio Cloud Azure e anche In­fo­Sphe­re Bi­gIn­sights di IBM si basa su questo progetto di Apache.

L’ar­chi­tet­tu­ra di Hadoop: struttura e com­po­nen­ti di base

Quando si parla di Hadoop, si intende so­li­ta­men­te un pacchetto software completo, indicato anche come eco­si­ste­ma di Hadoop. Qui si trovano oltre ai com­po­nen­ti di base (il core di Hadoop), diverse esten­sio­ni che non spiccano solo per i loro nomi curiosi, come Pig, Chukwa, Oozie o ZooKeeper, ma ampliano anche il framework con mol­tis­si­me fun­zio­na­li­tà ag­giun­ti­ve per l’ela­bo­ra­zio­ne di grandi quantità di dati. Tutte queste esten­sio­ni vengono portate avanti dall’Apache Software Foun­da­tion, a stretto contatto con gli altri progetti e si basano le une sulle altre.

Il core di Hadoop co­sti­tui­sce la base dell’eco­si­ste­ma di questo framework. I com­po­nen­ti del core del software sono nella versione 1 il modulo di base Hadoop Common, Hadoop Di­stri­bu­ted File System (HDFS) e un MapReduce Engine, che è stato so­sti­tui­to 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 di­spo­si­zio­ne di tutti gli altri com­po­nen­ti 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 se­ria­liz­za­zio­ne dei dati, le in­ter­fac­ce utente per gli accessi al file system dell’ar­chi­tet­tu­ra di Hadoop e la co­mu­ni­ca­zio­ne Remote Procedure Call all’interno di un cluster. Inoltre nel modulo del codice sorgente di Hadoop Common si trovano la do­cu­men­ta­zio­ne del progetto e le in­for­ma­zio­ni relative a sot­to­pro­get­ti.

Hadoop Di­stri­bu­ted File System (HDFS)

HDFS è un file system ad alta di­spo­ni­bi­li­tà, che serve per l’ar­chi­via­zio­ne di grandi quantità di dati in un cluster ed è così re­spon­sa­bi­le all’interno del framework per la con­ser­va­zio­ne dei dati. In più i file vengono scomposti in blocchi e di­stri­bui­ti in modo ri­don­dan­te senza uno schema preciso su diversi nodi. Secondo gli svi­lup­pa­to­ri, HDFS è in grado di gestire una quantità di dati con cifre a tre zeri (quindi che si aggirano intorno a diversi milioni). Si possono con­fi­gu­ra­re a proprio pia­ci­men­to sia la lunghezza dei blocchi sia il grado di ri­don­dan­za

Il cluster di Hadoop funziona es­sen­zial­men­te secondo il principio master-slave: l’ar­chi­tet­tu­ra del framework è composta da un nodo master a cui sono su­bor­di­na­ti molti nodi slaves. Questo principio si riflette anche nella struttura del HDFS, che si basa su un NameNode e diversi DataNodes su­bor­di­na­ti. Il NameNode gestisce tutti i metadati del file system, man­te­nen­do la struttura delle cartelle e i file. L’im­ma­gaz­zi­na­men­to dei dati vero e proprio avviene sui DataNodes su­bor­di­na­ti. Per ridurre le perdite di dati, i file vengono scomposti in singoli blocchi e salvati più volte su diversi nodi. La con­fi­gu­ra­zio­ne standard prevede che ogni blocco sia presente in una tripla versione.

Ogni DataNode invia al NameNode un segno di vita ad in­ter­val­li regolari, chiamati Heartbeat. Se questo segnale manca, il NameNode dichiara il cor­ri­spet­ti­vo slave “morto” e si occupa di garantire, grazie alle copie di dati su altri nodi, che siano di­spo­ni­bi­li ab­ba­stan­za copie dei blocchi coinvolti nel cluster, no­no­stan­te il crash. Al NameNode spetta un ruolo centrale all’interno del framework. Per evitare che si verifichi un “Single Point of Failure”, si è soliti af­fian­ca­re a questo nodo master un Se­con­da­ry­Na­me­No­de, che si con­trad­di­stin­gue per i cam­bia­men­ti com­ples­si­vi in ri­fe­ri­men­to ai metadati e consente così un ri­pri­sti­no delle istanze di controllo prin­ci­pa­li.

Nel passaggio da Hadoop 1 a Hadoop 2, HDFS è stato ampliato con altri sistemi di sicurezza: NameNode HA (High Avai­la­bi­li­ty) aggiunge al sistema una pro­te­zio­ne au­to­ma­ti­ca contro i crash, avviando au­to­ma­ti­ca­men­te un com­po­nen­te so­sti­tu­ti­vo in caso di un crash del NameNode. Una funzione di snapshot consente inoltre di riportare il sistema ad uno stadio pre­ce­den­te. Così tramite l’esten­sio­ne Fe­de­ra­tion si possono gestire più NameNodes all’interno di un cluster.

MapReduce Engine

Un altro com­po­nen­te fon­da­men­ta­le del core di Hadoop è l’algoritmo svi­lup­pa­to da Google MapReduce, che nella versione 1 di Hadoop è im­ple­men­ta­to ancora come engine autonomo. I compiti prin­ci­pa­li di questo engine sono la gestione delle risorse, il controllo e il mo­ni­to­ring dei processi di calcolo (job sche­du­ling/mo­ni­to­ring). L’ela­bo­ra­zio­ne dei dati consta quindi es­sen­zial­men­te delle fasi “Map” e “Reduce”, che con­sen­to­no la modifica dei dati di­ret­ta­men­te nel luogo di ar­chi­via­zio­ne (Data Locality), ac­ce­le­ran­do così le tem­pi­sti­che di calcolo e riducendo la portata della rete. Durante la fase Map, i processi di calcolo complessi (jobs) vengono scomposti in singole parti e di­stri­bui­ti da un Job­Trac­ker al nodo master a molti sistemi slave nel cluster. Là i Ta­sk­Trac­ker fanno in modo che i processi scomposti in parti vengano portati a termine pa­ral­le­la­men­te. Nella suc­ces­si­va fase di Reduce vengono raccolti i risultati intermedi e con­vo­glia­ti in un esito com­ples­si­vo.

Mentre i nodi master con­ten­go­no so­li­ta­men­te i com­po­nen­ti NameNode e Job­Trac­ker, su ogni slave su­bor­di­na­to lavorano ri­spet­ti­va­men­te un DataNode e un Ta­sk­Trac­ker. Con la release di Hadoop Version 2.3, il MapReduce Engine è stato dra­sti­ca­men­te rie­la­bo­ra­to. 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 sche­du­ling/mo­ni­to­ring) e sfrutta il framework per nuovi modelli di rie­la­bo­ra­zio­ne e un’ampia scelta di ap­pli­ca­zio­ni per i Big Data.

YARN/MapReduce 2.0

Con l’in­tro­du­zio­ne del modulo YARN (“Yet Another Resource Ne­go­tia­tor“), a partire dalla versione 2.3, è stata mo­di­fi­ca­ta no­te­vol­men­te l’ar­chi­tet­tu­ra di Hadoop. Si parla perciò anche di un passaggio da Hadoop 1 a Hadoop 2. Mentre Hadoop 1 mette a di­spo­si­zio­ne degli utenti solo l’ap­pli­ca­zio­ne MapReduce, la se­pa­ra­zio­ne della gestione delle risorse e dei compiti dal modello di ela­bo­ra­zio­ne dei dati consente di integrare nel framework molte ap­pli­ca­zio­ni per i Big Data. Di con­se­guen­za MapReduce è su Hadoop 2 solo una delle possibili ap­pli­ca­zio­ni per l’accesso ai dati, che si possono eseguire nel framework. Infatti il framework non viene più con­si­de­ra­to da tempo come un semplice ambiente di test del MapReduce, dove YARN ricopre, invece, il ruolo di un sistema operativo di­stri­bui­to per la gestione delle risorse per le ap­pli­ca­zio­ni per i Big Data. 

Le modifiche so­stan­zia­li dell’ar­chi­tet­tu­ra di Hadoop ri­guar­da­no so­prat­tut­to i due tracker del MapReduce Engine, che su Hadoop 2 non sono più dei com­po­nen­ti autonomi e il modulo YARN si basa perciò su tre nuovi elementi: il Re­sour­ce­Ma­na­ger, il No­de­Ma­na­ger e l’Ap­pli­ca­tion­Ma­ster.

  • Re­sour­ce­Ma­na­ger: il Re­sour­ce­Ma­na­ger globale ha la funzione di massima autorità nell’ar­chi­tet­tu­ra Hadoop (master), al quale sono su­bor­di­na­ti diversi No­de­Ma­na­ger (slave). A questo spetta il ruolo di con­trol­la­re il cluster, di or­che­stra­re la di­stri­bu­zio­ne delle risorse sul No­de­Ma­na­ger su­bor­di­na­to e di di­stri­bui­re le ap­pli­ca­zio­ni. Il Resource Manager sa dove si trovano i singoli sistemi slave nel cluster e quali risorse possono mettere a di­spo­si­zio­ne. Un com­po­nen­te im­por­tan­te del Re­sour­ce­Ma­na­ger è il Re­sour­ce­Sche­du­ler, che decide come di­stri­bui­re le risorse di­spo­ni­bi­li nel cluster.
  • No­de­Ma­na­ger: su ogni nodo del cluster è presente un No­de­Ma­na­ger, che assume la posizione di slave nell’in­fra­strut­tu­ra di Hadoop 2 e svolge anche la funzione di de­sti­na­ta­rio dei comandi del Re­sour­ce­Ma­na­ger. Se viene avviato un No­de­Ma­na­ger su un nodo nel cluster, questo si registra presso il Re­sour­ce­Ma­na­ger e invia un segno di vita periodico, l’Heartbeat. Ogni No­de­Ma­na­ger è re­spon­sa­bi­le per le risorse del proprio nodo e mette a di­spo­si­zio­ne del cluster una parte di queste. Come queste risorse devono essere uti­liz­za­te nel cluster, viene gestito dal Re­sour­ce­Sche­du­ler del Re­sour­ce­Ma­na­ger.
  • Ap­pli­ca­tion­Ma­ster: ogni nodo all’interno del sistema YARN comprende un Ap­pli­ca­tion­Ma­ster, che richiede le risorse dal Re­sour­ce­Ma­na­ger e dal No­de­Ma­na­ger e le assegna sotto forma di con­te­ni­to­ri. Su questi con­te­ni­to­ri vengono eseguite e con­trol­la­te le ap­pli­ca­zio­ni per i Big Data dell’Ap­pli­ca­tion­Ma­ster.

Se dovesse essere eseguita un’ap­pli­ca­zio­ne per i Big Data su Hadoop 2, sono es­sen­zial­men­te coinvolti nel processo 3 agenti prin­ci­pa­li:

  • un client,
  • un Re­sour­ce­Ma­na­ger e
  • uno o più No­de­Ma­na­ger.

Nel primo passaggio il client trasmette l’ordine al Re­sour­ce­Ma­na­ger che deve essere avviata un’ap­pli­ca­zio­ne per i Big Data nel cluster e viene perciò allocato un con­te­ni­to­re. Detto in altre parole, il Resource Manager prenota le risorse del cluster per l’ap­pli­ca­zio­ne e contatta un No­de­Ma­na­ger. Il No­de­Ma­na­ger in­ter­pel­la­to avvia il con­te­ni­to­re ed esegue qui un Ap­pli­ca­tion­Ma­ster, che è a sua volta re­spon­sa­bi­le dell’ese­cu­zio­ne e del controllo dell’ap­pli­ca­zio­ne.

L’eco­si­ste­ma di Hadoop: com­po­nen­ti ag­giun­ti­vi

Oltre ai com­po­nen­ti del core, l’eco­si­ste­ma di Hadoop comprende diverse esten­sio­ni, portate avanti da progetti software separati e che con­tri­bui­sco­no alla fun­zio­na­li­tà e alla fles­si­bi­li­tà del framework. Per via del codice sorgente aperto e delle mol­tis­si­me in­ter­fac­ce si possono combinare questi com­po­nen­ti ag­giun­ti­vi a pia­ci­men­to con le funzioni prin­ci­pa­li. La seguente lista indica una selezione dei progetti più co­no­sciu­ti nell’eco­si­ste­ma di Hadoop:

  • Ambari: Ambari, un progetto di Apache, è stato iniziato dal di­stri­bu­to­re di Hadoop Hor­to­n­works e integra l’eco­si­ste­ma con uno strumento di in­stal­la­zio­ne e di gestione, che agevola con­si­de­re­vol­men­te l’ap­prov­vi­gio­na­men­to (messa a di­spo­si­zio­ne delle risorse IT), oltre che la gestione e il mo­ni­to­ring dei com­po­nen­ti di Hadoop. Inoltre è presente un wizard che vi guiderà passo passo nell’in­stal­la­zio­ne dei servizi di Hadoop su qualsiasi computer nel cluster, oltre che una funzione di gestione con la quale si possono avviare i servizi cen­tral­men­te, in­ter­rom­per­li o con­fi­gu­rar­li. Un’in­ter­fac­cia grafica informa gli utenti sullo stato del sistema, mentre è possibile rilevare i parametri e con­fi­gu­ra­re i livelli di allarme con Ambari Metrics System e Ambari Alert Framework.
  • Avro: Apache Avro è un sistema per la se­ria­liz­za­zio­ne dei dati, basato su JSON per definire i tipi di dati e i pro­to­col­li. Invece, i dati veri e propri vengono se­ria­liz­za­ti in un formato binario compatto, che serve come formato di tra­smis­sio­ne dati per la co­mu­ni­ca­zio­ne 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 di­stri­bu­zio­ne di grandi quantità di dati, scritto in Java, che segue un approccio non re­la­zio­na­le e perciò si parla anche di database NoSQL. L’obiettivo del sistema open source, ori­gi­na­ria­men­te svi­lup­pa­to da Facebook, è quello di garantire un’alta sca­la­bi­li­tà e stabilità nelle grandi ar­chi­tet­tu­re di­stri­bui­te. L’ar­chi­via­zio­ne 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 pre­sta­zio­ni svi­lup­pa­to da Google. Rispetto ad altri database NoSQL, HBase si con­trad­di­stin­gue per un’alta con­si­sten­za dei dati.
  • Chukwa: si tratta di un sistema di analisi e di ela­bo­ra­zio­ne dei dati, che si basa su HDFS e sul MapReduce del framework di Hadoop e consente un mo­ni­to­ring in tempo reale così come analisi dei dati nei grandi sistemi di­stri­bui­ti. Per questo Chukwa si basa su agent, che fun­zio­na­no su ogni nodo da con­trol­la­re e rac­col­go­no i file di log eseguiti nei nodi dalle ap­pli­ca­zio­ni, poi questi file vengono trasmessi ai co­sid­det­ti Col­lec­tors e salvati nel HDFS.
  • Flume: anche Apache Flume è un servizio, che è stato concepito per la raccolta, l’ag­gre­ga­zio­ne e lo spo­sta­men­to dei file di log. Per ef­fet­tua­re lo streaming dei dati per scopi di analisi e di ar­chi­via­zio­ne da diverse fonti a HDFS, Flume si basa sui formati di trasporto come Apache Thrift o Avro.
  • Pig: Apache Pig è una piat­ta­for­ma per l’analisi di grandi quantità di dati che mette a di­spo­si­zio­ne degli utenti di Hadoop il lin­guag­gio di pro­gram­ma­zio­ne di alto livello Pig Latin, con­sen­ten­do così di de­scri­ve­re il flusso di dati dei MapReduce jobs ad un livello astratto. Le richieste MapReduce non vengono così più create in Java, ma vengono pro­gram­ma­te nella molto più ef­fi­cien­te lingua Pig Latin, cosa che agevola no­te­vol­men­te la gestione dei MapReduce jobs. Così si può ad esempio com­pren­de­re meglio l’ese­cu­zio­ne parallela delle analisi complesse. Pig Latin è stato ori­gi­na­ria­men­te svi­lup­pa­to da Yahoo; il nome si rifà alle in­ten­zio­ni con cui è stato svi­lup­pa­to il software, infatti Pig è stato concepito per elaborare tutti i tipi di dati (strut­tu­ra­ti, non strut­tu­ra­ti o re­la­zio­na­li).
  • Hive: con Apache Hive, Hadoop si può ampliare con un database centrale ot­ti­miz­za­to per scopi di analisi, chiamato Data Warehouse. Il software è stato pro­get­ta­to da Facebook e si basa sul framework di MapReduce. Con HiveQL, Hive dispone di una sintassi simile a SQL, che consente di in­ter­ro­ga­re i dati salvati in HDFS, con­den­sar­li o ana­liz­zar­li. In più le richieste simili a SQL vengono con­ver­ti­te au­to­ma­ti­ca­men­te in MapReduce Jobs.
  • HCatalog: un com­po­nen­te prin­ci­pa­le di Apache Hive è HCatalog, un sistema di gestione di metadati e tabelle che consente di elaborare e salvare i dati, in­di­pen­den­te­men­te 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’eco­si­ste­ma di Hadoop con librerie di Java, fa­cil­men­te am­plia­bi­li, per ap­pli­ca­zio­ni di Data Mining e quelle ma­te­ma­ti­che per l’ap­pren­di­men­to meccanico. Gli algoritmi che si possono im­ple­men­ta­re con Mahout su Hadoop con­sen­to­no ope­ra­zio­ni come clas­si­fi­ca­zio­ne, clu­ste­ring e im­po­sta­zio­ne di filtri col­la­bo­ra­ti­vi. In genere Mahout viene usato ad esempio nello sviluppo di servizi per dare sug­ge­ri­men­ti (del tipo “I clienti che hanno comprato questo articolo, hanno anche comprato…”).
  • Oozie: Oozie è un com­po­nen­te opzionale per il workflow che consente di strut­tu­ra­re una catena di processi, di au­to­ma­tiz­zar­li e di eseguirli per un de­ter­mi­na­to periodo di tempo. Così Oozie compensa il deficit del MapReduce Engine di Hadoop 1, dove nella con­fi­gu­ra­zio­ne di base non si possono generare delle relazioni tra i MapReduce Job.
  • Sqoop: Apache Sqoop è un com­po­nen­te software che facilita l’im­por­ta­zio­ne e l’espor­ta­zio­ne di grandi quantità di dati tra il framework Hadoop per i Big Data e la me­mo­riz­za­zio­ne dei dati strut­tu­ra­ti. Og­gi­gior­no, nelle aziende i dati vengono so­li­ta­men­te salvati in database re­la­zio­na­li, quindi Sqoop consente uno scambio ef­fi­cien­te tra questi sistemi di ar­chi­via­zio­ne e il cluster.
  • ZooKeeper: infine, Apache ZooKeeper offre servizi per coor­di­na­re i processi nel cluster, mettendo a di­spo­si­zio­ne le funzioni per la me­mo­riz­za­zio­ne, la di­stri­bu­zio­ne e l’ag­gior­na­men­to delle in­for­ma­zio­ni di con­fi­gu­ra­zio­ne.

L’uso di Hadoop nelle aziende

Il framework per i Big Data gode di una grande po­po­la­ri­tà in mol­tis­si­me aziende, visto che un cluster per Hadoop per l’ela­bo­ra­zio­ne di grandi quantità di dati si può rea­liz­za­re grazie a computer standard. Tra le aziende più pre­sti­gio­se che uti­liz­za­no Hadoop si contano Adobe, AOL, eBay, Facebook, Google, IBM, LinkedIn, Twitter e Yahoo. Oltre alla pos­si­bi­li­tà di poter salvare ed elaborare pa­ral­le­la­men­te i dati su ar­chi­tet­tu­re di­stri­bui­te in modo facile, il software open source si con­trad­di­stin­gue so­prat­tut­to per la sua stabilità, am­plia­bi­li­tà e per una grande varietà di funzioni.

Vai al menu prin­ci­pa­le