Apache Hadoop
Apache Hadoop software | |
---|---|
![]() | |
Genere | Calcolo distribuito |
Sviluppatore | Apache Software Foundation |
Data prima versione | 1º aprile 2006 |
Ultima versione | 3.4.0 (17 marzo 2024) |
Sistema operativo | Multipiattaforma |
Linguaggio | Java |
Licenza | Apache License 2.0 (licenza libera) |
Sito web | hadoop.apache.org |
Apache Hadoop è un framework sotto una licenza libera che supporta applicazioni distribuite con elevato accesso ai dati, permettendo alle applicazioni di lavorare con migliaia di nodi e petabyte di dati[1]. Ispirato dalla MapReduce di Google[2] e dal Google File System[3], è un progetto della fondazione Apache di alto livello costruito e usato da una comunità globale di contributori, che usano i linguaggi di programmazione Java e Scala.
Usato anche da AOL[4], Ebay[5], Facebook[6], IBM[7], Linkedin[8], Spotify[9], The New York Times[10] e Twitter[11], il più grande contributore a questo progetto è stato Yahoo![12], e ne fa fortemente uso[13]. Offre una grande quantità di librerie di semplice utilizzo ed ha per il momento tre versioni, la prima versione di Hadoop contiene Map Reduce e Hadoop Distributed File System (HDFS); dalla prima versione di Hadoop sono cambiate le necessità di prestazione, per questo motivo la seconda versione è stata quindi integrata con YARN[14].
Il nome del progetto è stato scelto dal suo creatore Doug Cutting, il quale ha scelto Hadoop, il nome dell'elefante di pezza di suo figlio[15]. In origine fu sviluppato per supportare la distribuzione per il progetto del motore di ricerca Nutch[16].
Struttura
[modifica | modifica wikitesto]![](http://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Big-data-concepts-20-638.jpg/260px-Big-data-concepts-20-638.jpg)
Hadoop, inteso in senso stretto, è composto da HDFS, MapReduce e YARN. Per ecosistema Hadoop si intendono tutti gli strumenti realizzati appositamente per integrarsi con questi, quali ad esempio Sqoop, Hive, Flume.
File System
[modifica | modifica wikitesto]L'Hadoop Distributed File System (in sigla HDFS) è un file system distribuito, portabile e scalabile scritto in Java per il framework Hadoop. Un cluster in Hadoop tipicamente possiede uno o più name node (su cui risiedono i metadati dei file) e un insieme di data node (su cui risiedono, in blocchi di dimensione fissa, i file dell'HDFS). I formati più usati per i file su HDFS sono Comma-separated values, Apache Avro, Apache ORC e Apache Parquet.
HDFS viene utilizzato per l'archiviazione dei dati e MapReduce viene utilizzato per l'elaborazione dei dati. HDFS ha cinque servizi.
I primi tre sono servizi master/demoni/nodi e gli ultimi due sono servizi slave. I servizi Master possono comunicare tra loro e allo stesso modo i servizi Slave possono comunicare tra loro. Name Node è un nodo master e Data node è il corrispondente nodo Slave e può comunicare tra loro.
Name Node: HDFS è costituito da un solo Name Node chiamato Master Node. Il nodo master può tenere traccia dei file, gestire il file system e ha i metadati di tutti i dati memorizzati al suo interno. In particolare, il nodo nome contiene i dettagli del numero di blocchi, le posizioni del nodo dati in cui sono archiviati i dati, dove sono archiviate le repliche e altri dettagli. Il nodo del nome ha un contatto diretto con il client.
Nodo dati: un nodo dati memorizza i dati in esso come blocchi. Questo è anche noto come nodo slave e memorizza i dati effettivi in HDFS che è responsabile della lettura e della scrittura da parte del client. Questi sono demoni schiavi. Ogni nodo Dati invia un messaggio Heartbeat al nodo Nome ogni 3 secondi e comunica che è vivo. In questo modo, quando Name Node non riceve un heartbeat da un nodo di dati per 2 minuti, considera quel nodo di dati come morto e avvia il processo di replica dei blocchi su un altro nodo di dati.
Nodo nome secondario: serve solo per prendersi cura dei punti di controllo dei metadati del file system che si trova nel nodo nome. Questo è anche noto come checkpoint Node. È il nodo di supporto per il nodo dei nomi. Il nodo del nome secondario indica al nodo del nome di creare e inviare il file fsimage e editlog, su cui il file fsimage compresso viene creato dal nodo del nome secondario.[17][18]
Job Tracker: Job Tracker riceve le richieste di esecuzione di Map Reduce dal client. Job tracker comunica con il Name Node per conoscere la posizione dei dati che verranno utilizzati nell'elaborazione. Il Nodo Nome risponde con i metadati dei dati di elaborazione richiesti.
Task Tracker: è il nodo slave per il Job Tracker e prenderà l'attività dal Job Tracker. Riceve anche il codice dal Job Tracker. Task Tracker prenderà il codice e lo applicherà al file. Il processo di applicazione di quel codice sul file è noto come Mapper.[19]
Hadoop supporta anche:
Hadoop può lavorare direttamente con qualsiasi file system distribuito che possa essere montato da un sistema operativo sottostante semplicemente usando un URL del tipo 'file://'.
Un componente che permette di integrare Hadoop con un grande quantitativo di filesystem, distribuiti e non, è Alluxio.
Applicazioni e librerie usate nei cluster Hadoop
[modifica | modifica wikitesto]- Elaborazione dati in modalità batch
Quando nacque Hadoop, l'unico modo di realizzare applicativi di elaborazione dati era MapReduce, che richiede di scrivere molto codice Java anche per le attività più semplici. Col passare degli anni, vennero inventate librerie come Cascading e Apache Crunch per rendere più agevole la realizzazione di questi programmi. A questi si è affiancato Pig, uno strumento che permetteva di usare un linguaggio ispirato ad SQL.
Un cambiamento consistente è avvenuto con l'introduzione di Apache Spark che usa in modo aggressivo la memoria RAM dei nodi del cluster per eseguire le elaborazioni con una velocità nettamente superiore a quella di MapReduce. Col tempo, Apache Spark si è evoluto, aggiungendo il supporto ad un linguaggio simile ad SQL e la possibilità di eseguire elaborazioni streaming di tipo microbatch.
- Elaborazione dati in modalità Streaming
Per l'elaborazione di dati in modalità streaming con bassa latenza è possibile usare:
Una libreria degna di nota è Akka. Questa permette di elaborare dati con delle prestazioni molto elevate sfruttando l'Actor Model. Le prime versioni di Apache Spark, precedenti alla 1.6, erano costruite proprio su Akka.
Sono stati creati anche degli strumenti che permettono di definire i flussi di elaborazione dati attraverso dei diagrammi. Tra questi troviamo Apache NiFi e StreamSets Data Collector.
- Strumenti per la gestione dei dati
- Apache Hive, che viene usato per interrogare il contenuto di HDFS usando un linguaggio molto simile all'SQL che si chiama Hive Query Language;
- Apache Impala, simile a Hive, ma avente una latenza inferiore a fronte di un throughput inferiore. A questo software mancano le funzionalità più avanzate di Hive, ad esempio la gestione degli indici e dei dati di dato più complessi. Usa Impala Query Language;
- Apache Drill, uno strumento simile ad Hive ed Impala;
- Presto uno strumento per interrogare dati su HDFS simile ad Hive ed Impala, sviluppato da Facebook;
- Apache Kafka che viene usato per trasmettere dei messaggi e per custodire nel tempo i messaggi che sono stati trasmessi;
- Sqoop, strumento da linea di comando che permette di importare dati da basi dati relazionali verso HDFS e vice versa;
- Apache Flume, un servizio distribuito affidabile e disponibile per la raccolta, l'aggregazione e il trasporto un grande quantitativo di dati di log in maniera efficiente.
- Console web
- Apache Ambari, che aiuta ad amministrare un cluster Hadoop con maggiore semplicità;
- Hue, una interfaccia grafica che permette di avere un punto di ingresso unico a tutti gli strumenti web per Hadoop;
- Basi dati non relazionali
- HBase, una base dati distribuita che usa HDFS per gestire i dati
- Apache Cassandra
- Apache Kudu
- Altri strumenti
- Apache ZooKeeper, un servizio di configurazione e sincronizzazione distribuito,
Architetture dei sistemi basati su Hadoop
[modifica | modifica wikitesto]Usando Hadoop è possibile realizzare architetture di tipo Lambda, descritte da Nathan Marz e James Warren. Questo tipo di architettura prevede dei flussi batch e dei flussi streaming in parallelo. Il limite di questo approccio è che bisogna scrivere il doppio del codice. Per provare a superare questo limite, è stata proposta l'architettura Kappa, nella quale viene fatto tutto in streaming.
Distribuzioni di Hadoop
[modifica | modifica wikitesto]Sebbene sia possibile scaricare ed installare autonomamente tutti i software necessari per far funzionare un cluster Hadoop, in molti casi è preferibile usare una distribuzione nella quale sono già presenti ed installati tutti questi software.
Tra le distribuzioni più note troviamo:
- Cloudera distribution, including Hadoop una distribuzione open source che include i principali pacchetti usati per Hadoop;
- Hortonworks Data Platform distribuzione Open Source, dismessa a seguito della fusione con Cloudera;
- The MapR Converged Data Platform Archiviato il 21 maggio 2018 in Internet Archive. una distribuzione commerciale, acquisita da HPE[22];
- Huawei FusionInsight Archiviato il 29 ottobre 2019 in Internet Archive. una distribuzione commerciale.
- Distribuzioni cloud
È possibile usufruire di cluster Hadoop già installati e configurati in cloud, tra le principali opzioni ci sono:
- Amazon Elastic Map Reduce in cui è possibile utilizzare Hive, Pig, Hue, Ganglia, Oozie e HBase ed eseguire Spark e Presto;
- Azure HDInsight che permette di eseguire Apache Hadoop, Spark, Hive, Kafka;
- Google cloud Dataproc permette l'utilizzo di vari componenti di Hadoop: Hive, HBase, Flink, Presto;
- Alibaba Cloud E-MapReduce permette l'uso di Apache Hive, Apache Kafka, Flink, Druid, e TensorFlow.
Differenza tra Hadoop 1 e Hadoop 2
[modifica | modifica wikitesto]La più grande differenza tra Hadoop 1 e Hadoop 2 è l'aggiunta di YARN (Yet Another Resource Negotiator), che ha sostituito il motore MapReduce nella prima versione di Hadoop. YARN si sforza di allocare le risorse a varie applicazioni in modo efficace. Esegue due demoni, che si occupano di due diverse attività: il gestore delle risorse, che esegue il monitoraggio dei lavori e l'allocazione delle risorse alle applicazioni, il master dell'applicazione, che monitora l'avanzamento dell'esecuzione.[23]
Differenza tra Hadoop 2 e Hadoop 3
[modifica | modifica wikitesto]Ci sono importanti funzionalità fornite da Hadoop 3. Ad esempio, mentre c'è un singolo namenode in Hadoop 2, Hadoop 3 consente di avere più name node, che risolve il problema del singolo punto di errore.
In Hadoop 3, ci sono contenitori che funzionano in linea di principio di Docker, il che riduce il tempo speso per lo sviluppo delle applicazioni. Uno dei maggiori cambiamenti è che Hadoop 3 riduce il sovraccarico di archiviazione con la codifica di cancellazione.
Inoltre, Hadoop 3 consente l'utilizzo dell'hardware GPU all'interno del cluster, il che rappresenta un vantaggio sostanziale per l'esecuzione di algoritmi di deep learning su un cluster Hadoop.[24]
Note
[modifica | modifica wikitesto]- ^ Google lands deal to host Twitter’s 300-petabyte Hadoop big-data clusters on its cloud
- ^ MapReduce:Simplified Data Processing on Large Clusters
- ^ The Google File System
- ^ Why Data Science is a Team Sport at AOL
- ^ Hadoop - The Power of the Elephant
- ^ Hadoop
- ^ Apache Hadoop
- ^ Recap: Improving Hadoop Performance by (up to) 1000x
- ^ Big Data Processing at Spotify: The Road to Scio (Part 1)
- ^ Announcing the Map/Reduce Toolkit
- ^ How Twitter Shrunk Its Hadoop Clusters and Their Energy Consumption
- ^ How Yahoo Spawned Hadoop, the Future of Big Data
- ^ Yahoo’s Massive Hadoop Scale on Display at Dataworks Summit
- ^ Hadoop 2.0 (YARN) Framework - The Gateway to Easier Programming for Hadoop Users
- ^ Hadoop: Toddler Talk Provides Big Data Name
- ^ Hadoop History or Evolution
- ^ Data Science from Scratch. First Principles with Python, O'Reilly, 2019, ISBN 9781492041139. URL consultato il 5 ottobre 2021 (archiviato dall'url originale il 17 agosto 2021).
- ^ (EN) Balram, Big Data Hadoop Tutorial for Beginners, su gyansetu.in. URL consultato l'11 marzo 2021.
- ^ Archived copy, su hadoop.apache.org. URL consultato il 19 giugno 2020 (archiviato dall'url originale il 23 ottobre 2019).
- ^ S3 Support in Apache Hadoop
- ^ Hadoop Azure Data Lake Support
- ^ HPE advances its intelligent data platform with acquisition of MapR business assets
- ^ Frank Kane, Taming Big Data with Apache Spark and Python, Packt, 2017, ISBN 978-1787287945.
- ^ Eric Sammer, Hadoop Operations, O'Reilly.
Bibliografia
[modifica | modifica wikitesto]- (EN) Jay Kreps, Questioning the Lambda Architecture, su oreilly.com. URL consultato il 9 aprile 2019.
- (EN) Nathan Marz e James Warren, Big Data. Principles and best practices of scalable realtime data systems, Manning, 2015.
- (EN) Tom White, Hadoop: The Definitive Guide, 4th Edition, O'Reilly, 2015.
- (EN) Sam R. Alapati, Expert Hadoop® Administration, Addison-Wesley, 2016.
- (EN) Sumit Pal, SQL on Big Data, Apress, 2016.
- (EN) Butch Quinto, Next-Generation Big Data, Apress, 2018.
- (EN) Tomasz Wiktorski, Data-intensive Systems: Principles and Fundamentals using Hadoop and Spark, Cham, Switzerland, Springer, 2019.
Voci correlate
[modifica | modifica wikitesto]Altri progetti
[modifica | modifica wikitesto]Wikimedia Commons contiene immagini o altri file su Apache Hadoop
Collegamenti esterni
[modifica | modifica wikitesto]- (EN) Sito ufficiale, su hadoop.apache.org.
- Repository sorgenti di Apache Hadoop, su git-wip-us.apache.org.
- Repository sorgenti di Apache Hadoop, su gitbox.apache.org.
- Repository sorgenti di Apache Hadoop, su github.com.
Controllo di autorità | GND (DE) 1022420135 |
---|