Amazon EMR per elaborare grosse quantità di dati
da Massimo Della Rovere · pubblicato il 12 agosto, 2014 · modificato il 5 giugno, 2017

Amazon Elastic MapReduce (Amazon EMR) è un servizio web che rende semplice e veloce processare grandi quantità di dati. Amazon EMR utilizza Hadoop, un framework open source, per distribuire e processare i dati attraverso un cluster formato da istanze di Amazon EC2. Amazon EMR trova largo impiego in svariate applicazioni, come ad esempio: analisi dei log, indicizzazione del web, data warehousing, analisi finanziarie, simulazioni scientifiche e bioinformatica per le analisi (DNA).

Hadoop utilizza un’architettura di elaborazione distribuita chiamata MapReduce, ideata inizialmente da Google per processare l’enorme quantità di dati raccolti da internet, in cui un’attività viene mappata ad un insieme di server per essere elaborata. Il risultato eseguito da tali server viene ridotto ad un singolo output. Un nodo, designato come master, controlla la distribuzione dei compiti tra i vari server slave.

Cosa significa e come funziona

MapReduce è un framework introdotto da Google per semplificare la computazione distribuita su grandi quantità di dati in cluster di computer. La soluzione è indicata per elaborare grandi database, elevate quantità di file e risorse di diverso genere, parliamo normalmente di diversi Terabytes da analizzare e su cui bisogna generare un risultato, quest’ultimo potrebbe a sua volta essere la sorgente di un altro processo MapReduce.

Il nome MapReduce è inspirato a due funzioni dei linguaggi di programmazione funzionale, che sono chiamate map() e reduce(). Un programma sviluppato con la tecnica di MapReduce si compone di due passi fondamentali (preso da wikipedia):

MapReduce

Map: Il nodo principale prende l’input, lo partiziona in sotto-problemi più piccoli, e li distribuisce ai nodi operativi. Un nodo operativo potrebbe fare questo nuovamente, portando a una struttura ad albero multi-livello. Il nodo operativo processa i problemi più piccoli e restituisce la risposta al suo nodo principale.

Reduce: Il nodo principale una volta prese le risposte di tutti i sotto-problemi le combina per ottenere una risposta, la risposta al problema che si tenta di risolvere. I dati di output, memorizzati su files, possono diventare l’input per una nuova fase di map() e reduce() concatenando tra di loro più elaborazioni consecutive di MapReduce.

Introduzione

Il servizio ha apportato varie modifiche ad Hadoop e ad altre applicazioni open source per potersi integrare senza problemi con i servizi AWS. Ad esempio, un Hadoop cluster in esecuzione su Amazon EMR utilizza: le istanze EC2 come dei server linux virtuali per la creazione di nodi master e slave, Amazon S3 per la memorizzazione dei dati in entrata e in uscita e CloudWatch per monitorare le prestazioni e lanciare allarmi.

È possibile spostare i dati dentro e fuori una tabella definita in DynamoDB utilizzando Amazon Elastic MapReduce e Hive. Tutto questo viene gestito dal software di controllo di Amazon EMR che avvia e gestisce il cluster Hadoop. Il seguente schema illustra come il servizio Elastic MapReduce può interagire con gli altri servizi AWS.

MapReduce

Amazon EMR non si limita al solo framework Hadoop, i vari progetti open source che girano all’interno dell’architettura Hadoop possono funzionare anche in EMR. Infatti le applicazioni più conosciute: Hive, Pig, HBase, DistCp e Ganglia sono state integrate all’interno del servizio. Eseguire Hadoop all’interno di Amazon EMR ci da la possibilità di usufruire a pieno di tutti i vantaggi che un’infrastruttura cloud ci può offrire:

  • La possibilità di creare un cluster di server virtuali nel giro di pochi minuti.
  • La possibilità di scalare il numero di server virtuali nel cluster per venire incontro alle esigenze di potenza computazionale, pagando solo quello che si utilizza.
  • Integrazione con gli altri servizi AWS, per poter eseguire operazioni integrative all’elaborazione, rimanendo all’interno di un contesto cloud.

Caratteristiche

È molto difficile riportare le possibilità applicative di un servizio così complesso in un solo articolo, nei prossimi articoli cercheremo sicuramente di fare un getting started e qualche esempio più specifico, al momento vi riporto le caratteristiche generali del servizio che sono state rilasciate dalla documentazione ufficiale di Amazon AWS.

Facile da usare: grazie al servizio Amazon EMR è possibile lanciare un cluster in pochi minuti. Non vi dovrete preoccupare della creazione dei nodi, della configurazione del cluster o di Hadoop e degli aspetti di ottimizzazione del cluster. Amazon EMR si prende cura di tutti questi aspetti e voi potete concentrarvi solo sull’analisi dei risultati.

Flessibile: il servizio garantisce il controllo completo sul cluster. E’ possibile accedere con diritti di root su ogni singola istanza, è possibile installare applicazioni aggiuntive e personalizzare ogni cluster. Amazon Elastic MapReduce (EMR) supporta anche diverse distribuzioni e applicazioni che sono state sviluppate per Hadoop.

Elastico: è possibile passare da una a centinaia o migliaia di istanze di calcolo e poter processare i dati di qualsiasi ordine di grandezza. Si può facilmente aumentare o diminuire il numero di istanze necessarie e si paga solo per quello che si utilizza.

Costi

Il servizio di Amazon EMR è stato progettato per ridurre i costi di elaborazione su grandi quantità di dati. Il costo del servizio è su base oraria e i prezzi sono molto bassi. Oltre al costo del servizio bisogna aggiungere anche il costo delle istanze EC2, ma in questo caso si può risparmiare con le istanze Spot e Reserved. Altri fattori che lo rendono un servizio a basso costo sono l’elasticità e la possibilità di integrarsi con S3.

Istanze EC2 Spot: questa opzione ci consente di scegliere il prezzo delle istanze EC2. È sufficiente specificare il prezzo massimo su base oraria che sei disposto a pagare per eseguire un particolare tipo di istanza. Finché il prezzo di mercato è inferiore alla soglia che noi abbiamo stabilito le istanze vengono attivate e rimangono attive, nel momento in cui il prezzo di mercato supera la nostra soglia le istanze vengono terminate.

Istanze EC2 Reserved: queste istanze offrono la possibilità di effettuare un pagamento una tantum per ogni istanza che si desidera riservare e poter a nostra volta ricevere uno sconto significativo sul costo orario dell’istanza. Ci sono tre tipi di istanze riservate che si possono utilizzare per bilanciare l’importo da pagare in anticipo con il prezzo orario effettivo e sono chiamate: Light, Medium, and Heavy Utilization.

Elasticità: dato che è semplice aggiungere o togliere capacità di calcolo all’interno di un cluster, non siamo obbligati ad attivare istanze in eccesso per prevedere eventuali picchi di elaborazione, ma possiamo semplicemente aumentare il numero di istanze quando ne abbiamo bisogno e diminuirle quando sono in eccesso, risparmiando sui costi.

Integrazione con Amazon S3: il servizio consente di integrarsi in modo efficiente con lo storage di Amazon S3, così da poter memorizzare i dati all’interno di un bucket S3 ed utilizzare anche più cluster Amazon EMR per elaborare lo stesso insieme di dati.

Flessibilità dei data store

Una delle caratteristiche più importanti del servizio è la possibilità di sfruttare vari supporti di archiviazione dati tra cui: Amazon S3, Hadoop Distributed File System (HDFS), Amazon DynamoDB, Amazon Redshift, Amazon Glacier etc.

MapReduce

Amazon S3: è il servizio di archiviazione ad alte performance. Amazon EMR ha fatto numerosi miglioramenti su Hadoop in modo da rendere possibile l’elaborazione di grandi quantità di dati archiviati in Amazon S3. Uno dei grossi vantaggi nell’utilizzare Amazon S3 per i dati è il fatto di poter eseguire più cluster EMR con un’unica sorgente dati, così facendo è possibile eseguire differenti elaborazioni contemporanee.

Hadoop Distributed File System (HDFS): è il file system di Hadoop e viene memorizzato sui dischi locali delle istanze, a seconda del tipo di istanza questi possono essere dischi normali o allo stato solido (SSD). Ogni istanza all’interno del cluster possiede un disco locale, ma siete voi a decidere quale istanza deve eseguire HDFS. Le istanze con HDFS sono chiamate “core nodes” mentre le istanze senza HDFS sono chiamate “task nodes”.

Amazon DynamoDB: è un servizio di database NoSQL completamente gestito. Amazon EMR ha un’integrazione diretta con Amazon DynamoDB in modo da poter elaborare in maniera rapida ed efficiente i dati memorizzati al suo interno. Questa integrazione permette anche il trasferimento dei dati tra DynamoDB, Amazon S3 e HDFS.

Strumenti di Hadoop

Amazon EMR supporta anche parecchi strumenti di Hadoop come: Hive, Pig, HBase, Impala e molti altri. In questa sezione vedremo una breve descrizione degli strumenti più utilizzati e che sono stati migliorati per potersi integrare con Amazon EMR.

Hive: è un pacchetto open source di data warehouse che gira su Hadoop. Hive è gestito da Hive QL, un linguaggio basato su SQL che permette di strutturare, sintetizzare ed eseguire query sui dati. Hive QL va al di là dei normali standard SQL e grazie a queste caratteristiche è molto indicato per l’elaborazione di sorgenti dati non strutturati come possono essere file di testo o log. Amazon EMR ha eseguito parecchi miglioramenti ad Hive per poterlo integrare con i servizi DynamoDB e Amazon S3.

Pig: è un pacchetto open source di analitica che gira su Hadoop. Pig è gestito da Pig Latin, un linguaggio SQL-like che permette agli utenti di strutturare, sintetizzare ed eseguire query sui dati. Amazon EMR ha eseguito parecchi miglioramenti del pacchetto, tra cui la possibilità di utilizzare file system multipli, caricare script jar personalizzati direttamente da Amazon S3 e altre funzionalità aggiuntive di elaborazione.

HBase: è un database distribuito, non relazionale, open source, creato sul modello di Google BigTable. Fu sviluppato come parte del progetto Hadoop dell’Apache Software Foundation ed eseguito su HDFS, fornendo capacità simili a quelle di BigTable. HBase offre un modo efficiente di immagazzinare grandi quantità di dati sparsi utilizzando la compressione e archiviazione basata su colonne. Inoltre, HBase fornisce una veloce ricerca dei dati in quanto vengono memorizzati in memoria invece che su disco.

Impala: è uno strumento open source per l’esecuzione di query ad hoc, utilizzando la sintassi SQL. Invece di usare MapReduce, sfrutta una motore simile a quello presente nei sistemi dei database relazionali. Con questa architettura, è possibile interrogare i dati presenti in HDFS o le tabelle HBase molto velocemente sfruttando la capacità di Hadoop di elaborare tipi differenti di dati e fornendo lo schema in fase di runtime.

Guida completa su AWS

Questo articolo appartiene ad una serie di pubblicazioni che costituiscono una guida completa dedicata agli Amazon Web Services.  Molti servizi che trattiamo in questo blog vengono anche spiegati con dei video che trovate nel nostro canale youtube. Se volete seguire questo percorso didattico iscrivetevi alla community Cloud AWS.

condividi