Hadoop è un framework open source, basato su Java, utilizzato per l’archiviazione e l’elaborazione di grandi dati. I dati sono memorizzati su server economici che funzionano come cluster. Il suo file system distribuito permette l’elaborazione concorrente e la tolleranza agli errori. Sviluppato da Doug Cutting e Michael J. Cafarella, Hadoop utilizza il modello di programmazione MapReduce per una più veloce archiviazione e recupero dei dati dai suoi nodi. Il framework è gestito dalla Apache Software Foundation ed è concesso in licenza sotto la Apache License 2.0.
Per anni, mentre la potenza di elaborazione dei server applicativi è aumentata moltissimo, i database sono rimasti indietro a causa della loro limitata capacità e velocità. Tuttavia, oggi, poiché molte applicazioni stanno generando grandi dati da elaborare, Hadoop gioca un ruolo significativo nel fornire un rinnovamento necessario al mondo dei database.
Scarica Hadoop e i laghi di dati ora.
Leggi ora
Anche dal punto di vista del business, ci sono benefici diretti e indiretti. Usando la tecnologia open-source su server poco costosi che sono per lo più nel cloud (e talvolta on-premises), le organizzazioni ottengono risparmi significativi sui costi.
Inoltre, la capacità di raccogliere dati massicci, e le intuizioni derivate dall’analisi di questi dati, si traducono in migliori decisioni di business nel mondo reale – come la capacità di concentrarsi sul giusto segmento di consumatori, eliminare o correggere processi errati, ottimizzare le operazioni di piano, fornire risultati di ricerca pertinenti, eseguire analisi predittive, e così via.
- Come Hadoop migliora i database tradizionali
- Capacità: Hadoop memorizza grandi volumi di dati.
- Velocità: Hadoop memorizza e recupera i dati più velocemente.
- 5 benefici di Hadoop per i grandi dati
- L’ecosistema Hadoop: Componenti principali
- HDFS: Mantenimento del file system distribuito
- YARN: Yet Another Resource Negotiator
- MapReduce
- L’ecosistema Hadoop: Componenti supplementari
- Hive: Data Warehousing
- Pig: Reduce MapReduce Functions
- Hive contro Pig
- Flume: Big Data Ingestion
- Sqoop: Ingestione di dati per database relazionali
- Zookeeper: Coordinamento delle applicazioni distribuite
- Kafka: Trasferimenti di dati più veloci
- HBase: Database non relazionale
- Sfide di Hadoop
- Curva di apprendimento ripida
- Diversi dataset richiedono approcci diversi
- Limitazioni di MapReduce
- Sicurezza dei dati
- Hadoop vs Apache Spark
- Un futuro con molte possibilità
Come Hadoop migliora i database tradizionali
Hadoop risolve due sfide chiave con i database tradizionali:
Capacità: Hadoop memorizza grandi volumi di dati.
Utilizzando un file system distribuito chiamato HDFS (Hadoop Distributed File System), i dati sono divisi in blocchi e salvati su cluster di server comuni. Poiché questi server sono costruiti con configurazioni hardware semplici, sono economici e facilmente scalabili man mano che i dati crescono.
Velocità: Hadoop memorizza e recupera i dati più velocemente.
Hadoop usa il modello di programmazione funzionale MapReduce per eseguire l’elaborazione parallela attraverso i set di dati. Così, quando una query viene inviata al database, invece di gestire i dati in modo sequenziale, i compiti sono divisi ed eseguiti simultaneamente su server distribuiti. Infine, l’output di tutti i compiti viene raccolto e rimandato all’applicazione, migliorando drasticamente la velocità di elaborazione.
5 benefici di Hadoop per i grandi dati
Per i grandi dati e l’analisi, Hadoop è un salvavita. I dati raccolti su persone, processi, oggetti, strumenti, ecc. sono utili solo quando emergono modelli significativi che, a loro volta, portano a decisioni migliori. Hadoop aiuta a superare la sfida della vastità dei grandi dati:
- Resilienza – I dati memorizzati in qualsiasi nodo sono anche replicati in altri nodi del cluster. Questo assicura la tolleranza ai guasti. Se un nodo va giù, c’è sempre un backup dei dati disponibili nel cluster.
- Scalabilità – A differenza dei sistemi tradizionali che hanno una limitazione nella memorizzazione dei dati, Hadoop è scalabile perché opera in un ambiente distribuito. Quando si presenta la necessità, la configurazione può essere facilmente ampliata per includere più server che possono memorizzare fino a più petabyte di dati.
- Basso costo – Poiché Hadoop è un framework open-source, senza alcuna licenza da procurarsi, i costi sono significativamente inferiori rispetto ai sistemi di database relazionali. Anche l’uso di hardware poco costoso lavora a suo favore per mantenere la soluzione economica.
- Velocità – Il file system distribuito di Hadoop, l’elaborazione concorrente e il modello MapReduce permettono di eseguire query complesse in pochi secondi.
- Diversità dei dati – HDFS ha la capacità di memorizzare diversi formati di dati come non strutturati (ad esempio video), semi-strutturati (ad esempio file XML) e strutturati. Durante l’archiviazione dei dati, non è richiesto di convalidare contro uno schema predefinito. Piuttosto, i dati possono essere scaricati in qualsiasi formato. Più tardi, quando vengono recuperati, i dati vengono analizzati e inseriti in qualsiasi schema, come necessario. Questo dà la flessibilità di derivare diverse intuizioni utilizzando gli stessi dati.
Scarica O’Reilly Report: Moving Hadoop to the Cloud ora.
Leggi ora
L’ecosistema Hadoop: Componenti principali
Hadoop non è solo un’applicazione, piuttosto è una piattaforma con vari componenti integrali che permettono l’archiviazione e l’elaborazione distribuita dei dati. Questi componenti insieme formano l’ecosistema Hadoop.
Alcuni di questi sono componenti fondamentali, che formano le fondamenta del framework, mentre alcuni sono componenti supplementari che portano funzionalità aggiuntive nel mondo Hadoop.
I componenti fondamentali di Hadoop sono:
HDFS: Mantenimento del file system distribuito
HDFS è il pilastro di Hadoop che mantiene il file system distribuito. Rende possibile l’archiviazione e la replica dei dati su più server.
HDFS ha un NameNode e un DataNode. I DataNode sono i server commodity dove i dati vengono effettivamente memorizzati. Il NameNode, invece, contiene metadati con informazioni sui dati memorizzati nei diversi nodi. L’applicazione interagisce solo con il NameNode, che comunica con i nodi dati come richiesto.
YARN: Yet Another Resource Negotiator
YARN sta per Yet Another Resource Negotiator. Gestisce e programma le risorse, e decide cosa dovrebbe accadere in ogni nodo di dati. Il nodo master centrale che gestisce tutte le richieste di elaborazione è chiamato Resource Manager. Il Resource Manager interagisce con i Node Manager; ogni datanode slave ha il proprio Node Manager per eseguire i compiti.
MapReduce
MapReduce è un modello di programmazione che è stato usato per la prima volta da Google per indicizzare le sue operazioni di ricerca. È la logica usata per dividere i dati in insiemi più piccoli. Funziona sulla base di due funzioni – Map() e Reduce() – che analizzano i dati in modo rapido ed efficiente.
Prima, la funzione Map raggruppa, filtra e ordina più set di dati in parallelo per produrre tuple (coppie chiave-valore). Poi, la funzione Reduce aggrega i dati da queste tuple per produrre l’output desiderato.
L’ecosistema Hadoop: Componenti supplementari
Questi sono alcuni componenti supplementari che sono ampiamente usati nell’ecosistema Hadoop.
Hive: Data Warehousing
Hive è un sistema di data warehousing che aiuta a interrogare grandi serie di dati nell’HDFS. Prima di Hive, gli sviluppatori dovevano affrontare la sfida di creare complessi lavori MapReduce per interrogare i dati Hadoop. Hive usa HQL (Hive Query Language), che assomiglia alla sintassi di SQL. Poiché la maggior parte degli sviluppatori proviene da un background SQL, Hive è più facile da far salire a bordo.
Il vantaggio di Hive è che un driver JDBC/ODBC funge da interfaccia tra l’applicazione e l’HDFS. Espone il file system Hadoop come tabelle, converte HQL in lavori MapReduce e viceversa. Così, mentre gli sviluppatori e gli amministratori di database ottengono il beneficio dell’elaborazione in batch di grandi insiemi di dati, possono usare query semplici e familiari per ottenere questo risultato. Originariamente sviluppato dal team di Facebook, Hive è ora una tecnologia open source.
Pig: Reduce MapReduce Functions
Pig, inizialmente sviluppato da Yahoo!, è simile a Hive in quanto elimina la necessità di creare funzioni MapReduce per interrogare l’HDFS. Simile a HQL, il linguaggio utilizzato – qui chiamato “Pig Latin” – è più vicino a SQL. “Pig Latin” è un linguaggio di flusso di dati di alto livello sopra MapReduce.
Pig ha anche un ambiente runtime che si interfaccia con HDFS. Gli script in linguaggi come Java o Python possono anche essere incorporati in Pig.
Hive contro Pig
Anche se Pig e Hive hanno funzioni simili, uno può essere più efficace dell’altro in diversi scenari.
Pig è utile nella fase di preparazione dei dati, poiché può eseguire facilmente join e query complesse. Funziona bene anche con diversi formati di dati, compresi quelli semi-strutturati e non strutturati. Pig Latin è più vicino a SQL, ma varia anche da SQL abbastanza da avere una curva di apprendimento.
Hive, tuttavia, funziona bene con i dati strutturati ed è quindi più efficace durante il data warehousing. Viene usato nel lato server del cluster.
Ricercatori e programmatori tendono ad usare Pig sul lato client di un cluster, mentre gli utenti di business intelligence come gli analisti di dati trovano Hive come la giusta misura.
Flume: Big Data Ingestion
Flume è uno strumento di ingestione di big data che agisce come un servizio di corriere tra più fonti di dati e HDFS. Raccoglie, aggrega e invia enormi quantità di dati in streaming (ad esempio file di log, eventi) generati da applicazioni come siti di social media, app IoT e portali di e-commerce nell’HDFS.
Flume è ricco di funzionalità:
- Ha un’architettura distribuita.
- Assicura un trasferimento dati affidabile.
- E’ fault-tolerant.
- Ha la flessibilità di raccogliere dati in batch o in tempo reale.
- Può essere scalato orizzontalmente per gestire più traffico, se necessario.
Le fonti dei dati comunicano con gli agenti Flume – ogni agente ha una fonte, un canale e un sink. La fonte raccoglie i dati dal mittente, il canale memorizza temporaneamente i dati, e infine, il sink trasferisce i dati alla destinazione, che è un server Hadoop.
Sqoop: Ingestione di dati per database relazionali
Sqoop (“SQL”, per Hadoop) è un altro strumento di ingestione di dati come Flume. Mentre Flume lavora su dati non strutturati o semi-strutturati, Sqoop è usato per esportare dati da e importare dati in database relazionali. Dato che la maggior parte dei dati aziendali sono memorizzati in database relazionali, Sqoop è usato per importare quei dati in Hadoop per essere esaminati dagli analisti.
Gli amministratori di database e gli sviluppatori possono utilizzare una semplice interfaccia a riga di comando per esportare e importare i dati. Sqoop converte questi comandi in formato MapReduce e li invia all’HDFS usando YARN. Sqoop è anche fault-tolerant ed esegue operazioni concorrenti come Flume.
Zookeeper: Coordinamento delle applicazioni distribuite
Zookeeper è un servizio che coordina le applicazioni distribuite. Nel framework Hadoop, agisce come uno strumento di amministrazione con un registro centralizzato che ha informazioni sul cluster di server distribuiti che gestisce. Alcune delle sue funzioni chiave sono:
- Mantenimento delle informazioni di configurazione (stato condiviso dei dati di configurazione)
- Servizio di denominazione (assegnazione del nome ad ogni server)
- Servizio di sincronizzazione (gestisce i deadlock, le condizioni di gara e l’inconsistenza dei dati)
- Elezione del leader (elegge un leader tra i server tramite consenso)
Il cluster di server su cui gira il servizio Zookeeper è chiamato “ensemble”. L’ensemble elegge un leader tra il gruppo, mentre gli altri si comportano come seguaci. Tutte le operazioni di scrittura dai client devono essere indirizzate attraverso il leader, mentre le operazioni di lettura possono andare direttamente a qualsiasi server.
Zookeeper fornisce alta affidabilità e resilienza attraverso la sincronizzazione fail-safe, l’atomicità e la serializzazione dei messaggi.
Kafka: Trasferimenti di dati più veloci
Kafka è un sistema di messaggistica distribuito publish-subscribe che è spesso usato con Hadoop per trasferimenti di dati più veloci. Un cluster Kafka consiste in un gruppo di server che fungono da intermediari tra produttori e consumatori.
Nel contesto dei big data, un esempio di produttore potrebbe essere un sensore che raccoglie dati sulla temperatura da ritrasmettere al server. I consumatori sono i server Hadoop. I produttori pubblicano messaggi su un argomento e i consumatori estraggono i messaggi ascoltando l’argomento.
Un singolo argomento può essere suddiviso ulteriormente in partizioni. Tutti i messaggi con la stessa chiave arrivano ad una specifica partizione. Un consumatore può ascoltare una o più partizioni.
Raggruppando i messaggi sotto una chiave e facendo in modo che un consumatore si rivolga a specifiche partizioni, molti consumatori possono ascoltare lo stesso argomento allo stesso tempo. Così, un argomento è parallelizzato, aumentando il throughput del sistema. Kafka è ampiamente adottato per la sua velocità, scalabilità e robusta replicazione.
HBase: Database non relazionale
HBase è un database non relazionale orientato alle colonne che si trova sopra HDFS. Una delle sfide di HDFS è che può fare solo elaborazioni in batch. Quindi, per le semplici query interattive, i dati devono ancora essere elaborati in batch, portando ad un’alta latenza.
HBase risolve questa sfida permettendo query per singole righe su tabelle enormi con bassa latenza. Raggiunge questo risultato usando internamente le tabelle hash. È modellato sulle linee di Google BigTable che aiuta ad accedere al Google File System (GFS).
HBase è scalabile, ha un supporto ai guasti quando un nodo va giù, ed è buono con dati non strutturati e semi-strutturati. Quindi, è ideale per l’interrogazione di grandi archivi di dati per scopi analitici.
Scarica O’Reilly Report: Moving Hadoop to the Cloud ora.
Leggi ora
Sfide di Hadoop
Anche se Hadoop è stato ampiamente visto come un fattore chiave per i big data, ci sono ancora alcune sfide da considerare. Queste sfide derivano dalla natura del suo complesso ecosistema e dalla necessità di conoscenze tecniche avanzate per eseguire le funzioni di Hadoop. Tuttavia, con la piattaforma di integrazione e gli strumenti giusti, la complessità si riduce significativamente e quindi, rende anche più facile lavorare con esso.
Curva di apprendimento ripida
Per interrogare il file system Hadoop, i programmatori devono scrivere funzioni MapReduce in Java. Questo non è semplice e comporta una ripida curva di apprendimento. Inoltre, ci sono troppi componenti che compongono l’ecosistema, e ci vuole tempo per familiarizzare con essi.
Diversi dataset richiedono approcci diversi
Non c’è una soluzione ‘one size fits all’ in Hadoop. La maggior parte dei componenti supplementari discussi sopra sono stati costruiti in risposta a una lacuna che doveva essere affrontata.
Per esempio, Hive e Pig forniscono un modo più semplice per interrogare i set di dati. Inoltre, gli strumenti di ingestione dei dati come Flume e Sqoop aiutano a raccogliere dati da fonti multiple. Ci sono anche numerosi altri componenti e ci vuole esperienza per fare la scelta giusta.
Limitazioni di MapReduce
MapReduce è un eccellente modello di programmazione per elaborare in batch set di grandi dati. Tuttavia, ha i suoi limiti.
Il suo approccio ad alta intensità di file, con letture e scritture multiple, non è adatto per l’analisi dei dati in tempo reale, interattiva o per compiti iterativi. Per tali operazioni, MapReduce non è abbastanza efficiente e porta ad alte latenze. (Ci sono soluzioni a questo problema. Apache è un’alternativa che sta riempiendo il vuoto di MapReduce.)
Sicurezza dei dati
Come i grandi dati vengono spostati nel cloud, i dati sensibili vengono scaricati nei server Hadoop, creando la necessità di garantire la sicurezza dei dati. Il vasto ecosistema ha così tanti strumenti che è importante assicurare che ogni strumento abbia i corretti diritti di accesso ai dati. Ci deve essere un’autenticazione appropriata, il provisioning, la crittografia dei dati e un controllo frequente. Hadoop ha la capacità di affrontare questa sfida, ma è una questione di avere l’esperienza e di essere meticolosi nell’esecuzione.
Anche se molti giganti della tecnologia hanno utilizzato i componenti di Hadoop qui discussi, è ancora relativamente nuovo nel settore. La maggior parte delle sfide deriva da questa nascita, ma una robusta piattaforma di integrazione dei big data può risolverle o facilitarle tutte.
Hadoop vs Apache Spark
Il modello MapReduce, nonostante i suoi molti vantaggi, non è efficiente per le query interattive e l’elaborazione dei dati in tempo reale, poiché si basa sulla scrittura su disco tra ogni fase di elaborazione.
Spark è un motore di elaborazione dati che risolve questa sfida utilizzando l’archiviazione dei dati in-memoria. Anche se è iniziato come un sottoprogetto di Hadoop, ha la sua propria tecnologia cluster.
Spesso, Spark è usato sopra HDFS per sfruttare solo l’aspetto dello storage di Hadoop. Per l’algoritmo di elaborazione, utilizza le proprie librerie che supportano le query SQL, lo streaming, l’apprendimento automatico e i grafici.
Gli scienziati dei dati usano Spark in modo estensivo per la sua velocità fulminea e per le eleganti API ricche di funzionalità che rendono facile lavorare con grandi insiemi di dati.
Mentre Spark può sembrare avere un vantaggio su Hadoop, entrambi possono lavorare in tandem. A seconda dei requisiti e del tipo di set di dati, Hadoop e Spark si completano a vicenda. Spark non ha un proprio file system, quindi deve dipendere da HDFS, o altre soluzioni simili, per il suo storage.
Il vero confronto è in realtà tra la logica di elaborazione di Spark e il modello MapReduce. Quando la RAM è un vincolo, e per i lavori notturni, MapReduce è una buona soluzione. Tuttavia, per lo streaming dei dati, l’accesso alle librerie di machine learning e per operazioni veloci in tempo reale, Spark è la scelta ideale.
Un futuro con molte possibilità
In appena un decennio, Hadoop ha fatto sentire la sua presenza in modo importante nell’industria informatica. Questo perché ha finalmente reso reale la possibilità di analisi dei dati. Dall’analisi delle visite ai siti, al rilevamento delle frodi, alle applicazioni bancarie, le sue applicazioni sono diverse.
Con Talend Open Studio for Big Data è facile integrare la vostra configurazione Hadoop in qualsiasi architettura di dati. Talend fornisce più connettori di dati integrati di qualsiasi altra soluzione di gestione dei dati, consentendo di costruire flussi di dati senza soluzione di continuità tra Hadoop e qualsiasi formato di file (CSV, XML, Excel, ecc.), sistema di database (Oracle, SQL Server, MySQL, ecc.), applicazione aziendale confezionata (SAP, SugarCRM, ecc.) e persino servizi di dati cloud come Salesforce e Force.