08 mapreduce

1,292 views

Published on

A quick MapReduce intro

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,292
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

08 mapreduce

  1. 1. MapReduce Davide Carboni Corso di Computazione su Rete Laurea specialistica in Tecnologie Informatiche Facoltà Scienze MM.FF.NN Università di Cagliari AA 2007/2008
  2. 2. MapReduce <ul><li>MapReduce è un nuovo approccio alla programmazione parallela sviluppato ed utilizzato da Google </li></ul><ul><li>E' basato sulle primitive funzionali map e reduce che vengono dal mondo dei linguaggi funzionali </li></ul><ul><li>Ci sono varie implementazioni del concetto, ad esempio Hadoop (in Java e usata da Yahoo!) </li></ul>
  3. 3. Motivazione <ul><li>E' utilizzato in elaborazioni di grandi quantità di dati </li></ul><ul><ul><li>grandi volumi di input </li></ul></ul><ul><ul><li>grandi volumi di output </li></ul></ul><ul><ul><li>gran numero di processori (es. cluster) utilizzati parallelamente </li></ul></ul>
  4. 4. Fornisce <ul><li>MapReduce fornisce </li></ul><ul><ul><li>parallelizzazione </li></ul></ul><ul><ul><li>distribuzione </li></ul></ul><ul><ul><li>tolleranza ai guasti </li></ul></ul><ul><ul><li>scheduling I/O </li></ul></ul><ul><ul><li>monitoraggio del calcolo e delle prestazioni </li></ul></ul>
  5. 5. Cluster <ul><li>Un cluster è un insieme di computer collegati attraverso una rete e coordinati in modo da distribuire e parallelizzare un calcolo complesso </li></ul><ul><li>Occorre dunque: </li></ul><ul><ul><li>Hardware di rete ad alte prestazioni </li></ul></ul><ul><ul><li>Un sistema operativo adattato al clustering </li></ul></ul><ul><ul><li>Un algoritmo parallelizzabile </li></ul></ul>
  6. 6. Primitive funzionali <ul><li>Nei linguaggi funzionali la primitiva map serve a mappare una sequenza di dati in ingresso i su una sequenza di dati in uscita o con una funzione f in modo che </li></ul><ul><ul><li>o = map (f, i) </li></ul></ul><ul><ul><li>es. se i = {1,2,3,4,5,6,7,8} e f(x) := 2*x allora </li></ul></ul><ul><ul><li>o = {2,4,6,8,10,12,14,16} </li></ul></ul>
  7. 7. Primitive funzionali <ul><li>La reduce, data una sequenza di input i ed una funzione a due parametri (operatore binario) f produce un unico dato (atomo) o a partire dalla sequenza i </li></ul><ul><li>Per esempio: o = reduce (f,i) con </li></ul><ul><ul><li>f(x,y) := x + y </li></ul></ul><ul><ul><li>i := {1,2,3,4} </li></ul></ul><ul><ul><li>produce o = ((1+2)+3)+4 </li></ul></ul>
  8. 8. Esempio di map in Python >>> def f(x): ... return 2*x ... >>> i=[1,2,3,4] >>> o=map(f,i) >>> o [2, 4, 6, 8] >>>
  9. 9. Esempio reduce in Python >>> def f(x,y): ... return x+y ... >>> f(3,4) 7 >>> i=[1,2,3,4] >>> o=reduce(f,i) >>> o 10 >>>
  10. 10. Esempio reduce e lambda in Python >>> reduce (lambda x,y:x+y,[1,2,3,4]) 10 in questa espressione si usano espressioni literal al posto di f, i ed o: notare che il literal di una funzione si costruisce tramite l'operatore lambda (funzioni anonime)
  11. 11. MapReduce <ul><li>Le primitive map, reduce che abbiamo visto sono parte dei linguaggi funzionali. E' possibile riprendere questi concetti in un ambiente distribuito (e implementarle con qualsiasi linguaggio anche non funzionale) </li></ul><ul><li>Il comportamento è mediato da una libreria (middleware) </li></ul>
  12. 12. Modello di programmazione <ul><li>map ( in_key, in_value ) -> list(out_key,intermediate_value) </li></ul><ul><ul><li>elabora una coppia chiave/valore </li></ul></ul><ul><ul><li>produce una lista di coppie chiave/valore (diverse) </li></ul></ul>
  13. 13. Modello di programmazione <ul><li>reduce ( out_key , list ( intermediate_value )) -> list(out_value) </li></ul><ul><ul><li>combina tutte le coppie chiave/valore per una certa chiave </li></ul></ul><ul><ul><li>produce un set di valori (o un solo valore) </li></ul></ul>
  14. 15. Esecuzione <ul><li>L'input viene diviso in blocchi (es. di 16MB) </li></ul><ul><li>Vengono attivate varie istanze del programma su un cluster di macchine </li></ul><ul><li>Una delle istanze detta master assegna i task alle altre dette worker </li></ul><ul><li>Un worker che svolge un task map legge il blocco di input, estrae le coppie key,value e le passa alla funzione map ( user-defined) </li></ul>
  15. 16. Esecuzione(...continua) <ul><li>La funzione map produce delle coppie intermedie key',value' che vengono bufferizzate in memoria </li></ul><ul><li>La funzione partitioning legge il buffer e copia le coppie key',value' in R regioni del disco note al master </li></ul><ul><li>Il master assegna ad un worker un task di tipo reduce indicandogli una regione in R da ridurre </li></ul>
  16. 17. Esecuzione(...continua) <ul><li>Il reduce task consiste nel prendere tutte le coppie key',value' e raggrupparle in modo che le chiavi siano uniche </li></ul><ul><ul><li>(k' 1 ,v' 1 ,v' 2 ,...,v' n ) </li></ul></ul><ul><ul><li>(k' 2 ,w' 1 ,w' 2 ,...,w' m ) </li></ul></ul><ul><ul><li>Dove le k' i sono chiavi intermedie e v' j e w' k sono valori intermedi emessi da map () </li></ul></ul><ul><li>Ogni gruppo (k' i ,v' 1 ,v' 2 ,...,v' n ) viene passato alla funzione reduce () definita dall'utente e i risultati scritti in R file di uscita </li></ul>
  17. 18. Esempio (conta le parole) map (input_key, input_value): // input_key: document name // input_value: document contents for each word w in input_value: EmitIntermediate(w, 1) reduce (output_key, list_of_intermediate_values): // output_key: a word // list_of_intermediate_values: all '1's emitted for a given word result = 0 for each v in list_of_intermediate_values: result += v Emit(result)
  18. 19. Esempio (distributed grep) map (input_key, input_value): pattern = input_key text = input_value for each line l in text: if match(l,pattern): EmitIntermediate(pattern, l); reduce (output_key, list_of_intermediate_values): lines = list_of_intermediate_values Emit(lines)
  19. 20. Uso del modello MapReduce programs nel Google Source Tree
  20. 21. Referenze <ul><li>&quot;MapReduce: Simplified Data Processing on Large Clusters&quot; </li></ul><ul><ul><li>paper by Jeffrey Dean and Sanjay Ghemawat; from Google Labs </li></ul></ul><ul><li>Free Java Framework for MapReduce </li></ul><ul><ul><li>http://hadoop.apache.org/ </li></ul></ul>

×