MapReduce: Simplified Data Processing on Large Clusters
1. MapReduce: Simplified Data Processing on Large
Clusters
Jeffrey Dean and Sanjay Ghemawat
Giovanni Grano Gino Farisano
Universit`a degli Studi di Salerno
A.A. 2014/2015
Corso di Sistemi Operativi Avanzati
G.G, G.F. MapReduce A.A. 2014/2015 1 / 42
3. Obiettivi
Obiettivi (1)
Negli anni, diversi autori hanno implementato centinaia di modelli di
computazione special-purpose per grosse moli di dati
Caratteristiche:
Computazione lineare che ha bisogno di essere distribuita su centinaia
di macchine
Grossa mole di raw data
Sfida: parallelizzare la computazione, distribuire i dati, gestire le
failure nascondendo la complessit`a del codice per rispondere a questi
problemi!
G.G, G.F. MapReduce A.A. 2014/2015 3 / 42
4. Obiettivi
Obiettivi (2)
Approccio: Astrazione che permette di gestire computazioni semplici
nascondendo i dettagli confusionari su parallelizzazione,
fault-tollerance, distribuzione dei dati e load balancing!
Primitive map e reduce presenti in Lisp e in altri linguaggi funzionali
Interfaccia semplice e potente che ci fornisce:
parallelizzazione automatica
computazione distribuita su larga scala
alte performance su grossi cluster di commodity PC
G.G, G.F. MapReduce A.A. 2014/2015 4 / 42
6. Implementazione
Environment
Google Environment: grandi cluster di commodity PC connessi con
switch Ethernet
Macchine Linux dual x86 processor, con 2-4 GB di memoria
Commodity networking hardware: 100 megabits/s
Cluster composti da centinaia o migliaia di macchine! Failure comuni
Storage con dischi IDE economici sulle singole macchine. File system
distribuito (GFS) sviluppato direttamente in-house
G.G, G.F. MapReduce A.A. 2014/2015 6 / 42
7. Implementazione
Esecuzione (1)
1 La libreria di MapReduce
splitta i files di input in
M pezzi, (16-64MB per
pezzo). Avvia le diverse
copie del programma
sulle macchine del
cluster
G.G, G.F. MapReduce A.A. 2014/2015 7 / 42
8. Implementazione
Esecuzione (2)
2 Una copia del
programma `e il master.
Le restanti sono workers
a cui viene assegnato il
lavoro dal master. Ci
sono M map task e R
reduce task da
assegnare.Il master
prende gli idle workers e
assegna loro un map e/o
un reduce task
G.G, G.F. MapReduce A.A. 2014/2015 8 / 42
9. Implementazione
Esecuzione (3)
3 Un worker con un map
task legge il contenuto
dell’input split
corrispondente. Prende
le coppie chiave/valore
degli input data e li
passa alla funzione di
map. Le coppie
intermedie prodotte sono
bufferizzate in memoria
G.G, G.F. MapReduce A.A. 2014/2015 9 / 42
10. Implementazione
Esecuzione (4)
4 Periodicamente le coppie
intermedie sono scritte
sui dischi locali. Queste
locazioni sono passate al
master che `e
responsabile del forward
verso i reduce workers
G.G, G.F. MapReduce A.A. 2014/2015 10 / 42
11. Implementazione
Esecuzione (5)
5 Quando notificato dal
master, il reduce worker
legge tramite RPC i dati
dai dischi locali dei map
workers. Ordina i dati
sulla chiave intermedia,
in modo che tutte le
occorrenze della stessa
chiave siano raggruppate
G.G, G.F. MapReduce A.A. 2014/2015 11 / 42
12. Implementazione
Esecuzione (6)
6 Il reduce worker itera sui
dati intermedi e per ogni
chiave univoca passa i
corrispondenti valori alla
funzione di reduce.
L’output `e concatenato
al file di output finale
per quel reduce
G.G, G.F. MapReduce A.A. 2014/2015 12 / 42
13. Implementazione
Master Data Structures
Il master mantiene una serie di strutture dati
Per ogni map task e reduce task conserva lo stato (idle, in-progess,
completed) e l’ID della macchina worker
Per ogni map task completo, conserva la locazione e la dimensione
dei file intermedi prodotti dal map task
Queste informazioni sono fornite in maniera incrementale ai workers
che hanno reduce task in-progress
G.G, G.F. MapReduce A.A. 2014/2015 13 / 42
14. Implementazione
Fault Tolerance
Worker Failure
Il master pinga ogni worker periodicamente. Se non ottiene risposta
dopo un tot di tempo marca il worker come failed
Ogni map task completato `e resettato allo stato iniziale di idle ed `e
schedulabile sugli altri workers
Output salvato sui dischi locali che potrebbero essere non accessibili.
Anche i map e reduce task in progress vengono resettati allo stato di
idle
I reduce task completati non hanno bisogno di essere ri-schedulati in
quanto l’output `e salvato nel global file system
G.G, G.F. MapReduce A.A. 2014/2015 14 / 42
15. Implementazione
Fault Tolerance
Master Failure
Il master salva dei checkpoints periodici delle strutture dati descritte
Se il master muore, una nuova copia viene eseguita a partire
dall’ultimo checkpoint
Failure del master improbabile
Questa implementazione prevede l’abort della computazione se il
master muore
G.G, G.F. MapReduce A.A. 2014/2015 15 / 42
16. Implementazione
Localit`a
La larghezza di banda `e una risorsa relativamente scarsa
Per preservarla si `e pensato di avvantaggiarsi del fatto che i dati di
input sono conservati sui dischi locali delle macchine del cluster
Il master, che possiede le informazioni sulla locazione dei files di input,
cerca di schedulare i map task sulle macchine che hanno una replica
dei file di input corrispondenti (o su macchine sullo stesso switch)
Con grosse operazioni di MapReduce, gran parte dei dati sono letti
localmente e non consumano larghezza di banda
G.G, G.F. MapReduce A.A. 2014/2015 16 / 42
17. Implementazione
Granularit`a
Dobbiamo suddividere la fase di map in M pezzi e quella di reduce in
R pezzi
Idealmente, M e R dovrebbero essere molto pi`u grandi del numero di
macchine workers
Avere ogni worker che esegue diversi task migliora il bilanciamento del
carico e velocizza il recovery quando un worker fallisce
M scelto in modo che ogni task individuale processi dai 16 ai 64 MB
di dati
R scelto come multiplo piccolo del numero di macchine workers
G.G, G.F. MapReduce A.A. 2014/2015 17 / 42
18. Implementazione
Backup Task
Alcune cause comuni possono influenzare la lunghezza dell’operazione
di MapReduce:
es: una macchina ci mette un tempo inusuale per completare un task
Soluzione: il master schedule l’esecuzione di backup sui task
in-progress
Il task `e segnato come completo quando l’esecuzione primaria o di
backup termina
Il tempo totale di risoluzione di grosse operazioni di MapReduce `e
sensibilmente ridotto a fronte di un piccolo aumento di risorse
computazionali richieste
G.G, G.F. MapReduce A.A. 2014/2015 18 / 42
20. Raffinamenti
Raffinamenti
Funzione di partizionamento
L’utente specifica il numero di reduce task desiderato R
I dati vengono partizionati su questi task utilizzando una funzione di
partizione sulle chiavi intermedie
hash(key) mod R
Potremmo voler partizionare i dati utilizzando un altro tipo di
funzione sulla chiave
hash(hostname(urlKey)) mod R
G.G, G.F. MapReduce A.A. 2014/2015 20 / 42
21. Raffinamenti
Raffinamenti
Garanzia di ordinamento
La libreria garantisce che, in una data partizione, le coppie
chiave/valore vengono processate in ordine di chiave incrementale
Questo ordinamento rende facile generare un output file ordinato
Utile per supportare in maniera efficiente accesso casuale alle chiavi
G.G, G.F. MapReduce A.A. 2014/2015 21 / 42
22. Raffinamenti
Raffinamenti
Combiner
In alcuni casi abbiamo una significativa ripetizione delle chiavi
intermedie prodotte da ogni map task
All’utente `e permesso specificare una funzione Combiner opzionale
che fa un merge parziale dai dati prima di propagarli sulla rete
Il Combiner `e eseguito su ogni macchina che esegue un map task
Tipicamente lo stesso codice `e utilizzato per le funzioni di combiner e
reduce
MapReduceOutput* out = spec.output();
out->set_reducer_class("Adder");
out->set_combiner_class("Adder");
G.G, G.F. MapReduce A.A. 2014/2015 22 / 42
23. Raffinamenti
Raffinamenti
Bad Records
A volte ci sono dei bug che causano il crash delle funzioni di
map/reduce su alcuni record; fixare il bug non `e sempre possibile
libreria di terze parti
Pu`o essere accettabile ignorare alcuni record
analisi statistiche su un grosso data set
Si fornisce una modalit`a di esecuzione opzionale nella quale la libreria
di MapReduce identifica i record che causano un crash e li salta per
progredire l’esecuzione
G.G, G.F. MapReduce A.A. 2014/2015 23 / 42
24. Raffinamenti
Raffinamenti
Bad Records (2)
Ogni processo worker installa un signal handler che cattura gli
eventuali errori
Prima di invocare un’operazione di Map o Reduce, si conserva un
sequence number in una variabile globale
Se il codice genera un segnale, l’handler invia un pacchetto UDP con
il sequence number al master
Quando il master osserva pi`u di una failure su un determinato record,
indica che tale record dovr`a essere skippato nella successiva
ri-esecuzione del task corrispondente
G.G, G.F. MapReduce A.A. 2014/2015 24 / 42
25. Raffinamenti
Raffinamenti
Esecuzione locale
Il debugging su questi sistemi pu`o essere difficile
la computazione avviene in maniera distribuita su centinaia di macchine
con un carico assegnato dinamicamente dal master
Per facilitare il debugging, il profiling e il testing su piccola scala `e
possibile utilizzare una modalit`a di esecuzione del MapReduce che
esegue in maniera sequenziale tutta la computazione su una singola
macchina locale
Facile utilizzo di tool di debugging e testing
G.G, G.F. MapReduce A.A. 2014/2015 25 / 42
26. Raffinamenti
Raffinamenti
Status Information
Il master avvia un server HTTP interno ed esporta un set di pagine
progresso della computazione, task completati e in progresso, byte in
input e in output, workers che hanno fallito e in quali map/reduce task
Tali informazioni sono utili per rilevare eventuali bug
L’utente pu`o fare previsioni sulla lunghezza della computazione o sulle
risorse da aggiungere
G.G, G.F. MapReduce A.A. 2014/2015 26 / 42
27. Raffinamenti
Raffinamenti
Contatori (1)
La libreria fornisce una struttura contatore per facilitare il conteggio
delle occorrenze di vari eventi
Counter* uppercase;
uppercase = GetCounter("uppercase");
map(String name, String contents):
for each word w in contents:
if (IsCapitalized(w)):
uppercase->Increment();
EmitIntermediate(w, "1");
G.G, G.F. MapReduce A.A. 2014/2015 27 / 42
28. Raffinamenti
Raffinamenti
Contatori (2)
Il valore del contatore `e propagato periodicamente dalle worker
machine verso il master
Il master aggrega i valori del contatore dai map/reduce task conclusi
con successo
Elimina gli effetti di esecuzioni duplicate
backup task o ri-esecuzioni dovute a failure
Alcuni contatori sono mantenuti in automatico
numero di coppie chiave/valore processate e numero di coppie prodotte
in output
Utile per facilitare sanity checking
G.G, G.F. MapReduce A.A. 2014/2015 28 / 42
30. Performance
Configurazione del cluster
1800 macchine
dual core 2GHz Intel Xeon con Hyperthreading
4GB memoria
2x 160GB dischi IDE
link gigabit Ethernet
G.G, G.F. MapReduce A.A. 2014/2015 30 / 42
31. Performance
Computazione 1 - Grep
Ricerca di un particolare pattern su 1 terabyte di dati
Pattern di 3 caratteri particolarmente raro (92.337 record)
1010 record da 100 byte
M = 15000: input splittato in blocchi da 64MB
R = 1: un solo file di output
G.G, G.F. MapReduce A.A. 2014/2015 31 / 42
33. Performance
Computazione 2 - Sort
Sort su 1010 record da 100 bytes (1 terabyte)
M = 15000: input splittato in blocchi da 64MB
R = 4000: funzione di ripartizione con byte iniziali della chiave
Meno di 50 LOC di user code:
3 LOC Map function
Identity function come operatore di Reduce
Fattore di replica 2 per l’output
G.G, G.F. MapReduce A.A. 2014/2015 33 / 42
34. Performance
Computazione 2 - Sort
Normal execution
input rate minore che per grep
lo shuffle parte subito
localit`a: input rate pi`u alto dello
shuffle rate
replica: shuffle rate pi`u alto
dell’output rate
G.G, G.F. MapReduce A.A. 2014/2015 34 / 42
35. Performance
Computazione 2 - Sort
Senza task di backup
lunga coda delle attivit`a di
scrittura
1283 secondi: + 44%
G.G, G.F. MapReduce A.A. 2014/2015 35 / 42
39. Conclusioni
Successo del modello MapReduce
Ragioni
Facilit`a di utilizzo, anche per programmatori senza esperienza con
sistemi distribuiti e paralleli
nasconde i dettagli di parallelizzazione, fault-tolerance, ottimizzazione
locale e bilanciamento del carico
Vasta classe di problemi facilmente esprimibile come computazione
MapReduce
indicizzazione per web search, sorting, data mining, machine learning
Implementazione scalabile su un grande cluster
uso efficiente delle risorse
utilizzabile per i grandi problemi computazionali affrontati da Google
G.G, G.F. MapReduce A.A. 2014/2015 39 / 42
40. Conclusioni
Lesson learned
Limitare il programming model rende pi`u semplice parallelizzare,
distribuire la computazione e renderla fault-tolerant
La larghezza di banda della rete `e una risorsa scarsa
ottimizzazioni per ridurre i dati inviati attraverso la rete: localit`a
La ridondanza nell’esecuzione pu`o essere usata per ridurre l’impatto
di macchine lente, gestendone il fallimento e la perdita dei dati
G.G, G.F. MapReduce A.A. 2014/2015 40 / 42