ݺߣ

ݺߣShare a Scribd company logo
MapReduce Davide Carboni Corso di  Computazione su Rete Laurea specialistica in Tecnologie Informatiche Facoltà Scienze MM.FF.NN Università di Cagliari AA 2007/2008
MapReduce MapReduce  è un nuovo approccio alla programmazione parallela sviluppato ed utilizzato da  Google E' basato sulle primitive funzionali  map  e  reduce  che vengono dal mondo dei linguaggi funzionali Ci sono varie implementazioni del concetto, ad esempio  Hadoop  (in Java e usata da Yahoo!)
Motivazione E' utilizzato in elaborazioni di grandi quantità di dati grandi volumi di input grandi volumi di output gran numero di processori (es. cluster) utilizzati parallelamente
Fornisce MapReduce fornisce parallelizzazione distribuzione tolleranza ai guasti scheduling I/O monitoraggio del calcolo e delle prestazioni
Cluster Un cluster è un insieme di computer collegati attraverso una rete e coordinati in modo da distribuire e parallelizzare un calcolo complesso Occorre dunque: Hardware di rete ad alte prestazioni Un sistema operativo adattato al clustering Un algoritmo parallelizzabile
Primitive funzionali 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 o = map (f, i) es. se  i = {1,2,3,4,5,6,7,8}  e  f(x) := 2*x  allora o = {2,4,6,8,10,12,14,16}
Primitive funzionali 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 Per esempio:  o = reduce (f,i)  con f(x,y) := x + y i := {1,2,3,4} produce  o = ((1+2)+3)+4
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] >>>
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 >>>
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)
MapReduce 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) Il comportamento è mediato da una libreria (middleware)
Modello di programmazione map ( in_key, in_value ) ->  list(out_key,intermediate_value) elabora una coppia chiave/valore  produce una lista di coppie chiave/valore (diverse)
Modello di programmazione reduce  ( out_key ,  list ( intermediate_value )) ->  list(out_value)  combina tutte le coppie chiave/valore per una certa chiave produce un set di valori (o un solo valore)
Esecuzione L'input viene diviso in blocchi (es. di 16MB) Vengono attivate varie istanze del programma su un  cluster  di macchine Una delle istanze detta  master  assegna i task alle altre dette  worker 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)
Esecuzione(...continua) La funzione  map  produce delle coppie intermedie  key',value'  che vengono bufferizzate in memoria La funzione  partitioning  legge il buffer e copia le coppie  key',value'  in  R  regioni del disco note al  master Il  master  assegna ad un  worker  un task di tipo  reduce  indicandogli una regione in  R  da ridurre
Esecuzione(...continua) Il  reduce  task consiste nel prendere tutte le coppie  key',value'  e raggrupparle in modo che le chiavi siano uniche (k' 1 ,v' 1 ,v' 2 ,...,v' n ) (k' 2 ,w' 1 ,w' 2 ,...,w' m ) Dove le  k' i sono chiavi intermedie e  v' j   e  w' k  sono valori intermedi emessi da  map () 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
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)
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)
Uso del modello  MapReduce programs nel Google Source Tree
Referenze "MapReduce: Simplified Data Processing on Large Clusters" paper by Jeffrey Dean and Sanjay Ghemawat; from Google Labs Free Java Framework for MapReduce http://hadoop.apache.org/

More Related Content

What's hot (11)

PDF
JavaScript Object Oriented
Manuel Scapolan
PDF
12 - Programmazione: Array dinamici e puntatori
Majong DevJfu
PDF
Linguaggio R, principi e concetti
Vincenzo De Maio
PDF
Introduzione a R
MCalderisi
PDF
Eserc v del 26 marzo 2012
STELITANO
PDF
Introduzione a JavaScript
Giovanni Buffa
PDF
Gestione della memoria in C++
Ilio Catallo
PDF
Trasformare un ip in numero e viceversa [vb6][sc]
santi caltabiano
PDF
Algoritmi e Programmazione Avanzata - Liste, pile, code
Sergio Porcu
PPT
Java lezione 7
Sergio Ronchi
JavaScript Object Oriented
Manuel Scapolan
12 - Programmazione: Array dinamici e puntatori
Majong DevJfu
Linguaggio R, principi e concetti
Vincenzo De Maio
Introduzione a R
MCalderisi
Eserc v del 26 marzo 2012
STELITANO
Introduzione a JavaScript
Giovanni Buffa
Gestione della memoria in C++
Ilio Catallo
Trasformare un ip in numero e viceversa [vb6][sc]
santi caltabiano
Algoritmi e Programmazione Avanzata - Liste, pile, code
Sergio Porcu
Java lezione 7
Sergio Ronchi

Viewers also liked (12)

ODP
Open al bivio fra software e webware (al javaday 2006)
Davide Carboni
ODP
Open al bivio fra software e webware
Davide Carboni
ODP
Kickoff del Progetto Cluster Mashup e Geoweb
Davide Carboni
PDF
Internet of Things al Festivalscienza 2010
Davide Carboni
PDF
The Bitcoin blockchain (en)
Davide Carboni
PDF
Programmazione concorrente in Java (vecchio modello)
Davide Carboni
PDF
Pysense: wireless sensor computing in Python?
Davide Carboni
PDF
04 bloom
Davide Carboni
PDF
The world is the computer and the programmer is you
Davide Carboni
ODP
Web 2.0, mashup e GeoWeb
Davide Carboni
PDF
Internet-of-things, sicurezza, privacy, trust
Davide Carboni
PDF
Blockchain - crittomonete, Bitcoin e altre applicazioni
Davide Carboni
Open al bivio fra software e webware (al javaday 2006)
Davide Carboni
Open al bivio fra software e webware
Davide Carboni
Kickoff del Progetto Cluster Mashup e Geoweb
Davide Carboni
Internet of Things al Festivalscienza 2010
Davide Carboni
The Bitcoin blockchain (en)
Davide Carboni
Programmazione concorrente in Java (vecchio modello)
Davide Carboni
Pysense: wireless sensor computing in Python?
Davide Carboni
The world is the computer and the programmer is you
Davide Carboni
Web 2.0, mashup e GeoWeb
Davide Carboni
Internet-of-things, sicurezza, privacy, trust
Davide Carboni
Blockchain - crittomonete, Bitcoin e altre applicazioni
Davide Carboni
Ad

Similar to 08 mapreduce (20)

PPT
Riepilogo Java C/C++
Pasquale Paola
PDF
ݺߣs introduttive alla programmazione del linguaggio Python
gnike62
PPT
7 Sottoprogrammi
guest60e9511
PPTX
What is new in C# 2018
Marco Parenzan
PPT
Tutorial Matlab 2009
Andrea Della Corte
PDF
Vogliamo programmatori stupidi e pigri!
Marcello Missiroli
ODP
Be groovy with JGrass
Andrea Antonello
PDF
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
PasqualeRuocco5
PDF
OpenStreetMap per il web
Stefano Sabatini
PDF
Esercitazione 1 (27 febbraio 2012)
STELITANO
PPT
9 Altre Istruzioni Di I O
guest60e9511
PDF
Introduzione a Matlab
Marco Suma
PPTX
Reactive programming principles
Riccardo Cardin
PDF
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Sergio Porcu
KEY
Pycrashcourse
rik0
PPTX
FANTIN BIG DATA (2)
fantin stefano
PDF
EcmaScript 6 & 7
BENTOSA
PDF
Functional Programming per tutti
Giancarlo Valente
PDF
KDE Plasma widgets
Pietro Lerro
PDF
Let's give it a GO!
MarioTraetta
Riepilogo Java C/C++
Pasquale Paola
ݺߣs introduttive alla programmazione del linguaggio Python
gnike62
7 Sottoprogrammi
guest60e9511
What is new in C# 2018
Marco Parenzan
Tutorial Matlab 2009
Andrea Della Corte
Vogliamo programmatori stupidi e pigri!
Marcello Missiroli
Be groovy with JGrass
Andrea Antonello
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
PasqualeRuocco5
OpenStreetMap per il web
Stefano Sabatini
Esercitazione 1 (27 febbraio 2012)
STELITANO
9 Altre Istruzioni Di I O
guest60e9511
Introduzione a Matlab
Marco Suma
Reactive programming principles
Riccardo Cardin
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Sergio Porcu
Pycrashcourse
rik0
FANTIN BIG DATA (2)
fantin stefano
EcmaScript 6 & 7
BENTOSA
Functional Programming per tutti
Giancarlo Valente
KDE Plasma widgets
Pietro Lerro
Let's give it a GO!
MarioTraetta
Ad

More from Davide Carboni (10)

PDF
Facts & Figures about Web3 Security in 2024
Davide Carboni
PPTX
PPT-CyberJourney-June-2023-Carboni.pptx
Davide Carboni
PDF
From Smart Contracts to NFT
Davide Carboni
PDF
Blockchain School 2019 - Security of Smart Contracts.pdf
Davide Carboni
PDF
2 phase-commit
Davide Carboni
PDF
Introduzione ai Design Patterns nella Programmazione a Oggetti
Davide Carboni
PDF
Browsing Large Collections of Geo-Tagged Pictures
Davide Carboni
PPT
NAT Traversal
Davide Carboni
PPT
Introduction P2p
Davide Carboni
PDF
Spoleto07
Davide Carboni
Facts & Figures about Web3 Security in 2024
Davide Carboni
PPT-CyberJourney-June-2023-Carboni.pptx
Davide Carboni
From Smart Contracts to NFT
Davide Carboni
Blockchain School 2019 - Security of Smart Contracts.pdf
Davide Carboni
2 phase-commit
Davide Carboni
Introduzione ai Design Patterns nella Programmazione a Oggetti
Davide Carboni
Browsing Large Collections of Geo-Tagged Pictures
Davide Carboni
NAT Traversal
Davide Carboni
Introduction P2p
Davide Carboni

Recently uploaded (8)

PDF
AIXMOOC 6.1 - Non sono un robot (Dom Holdaway)
Alessandro Bogliolo
PDF
AIXMOOC 5.3 - L'essere umano di fronte all'I.A. (Cristiano Maria Bellei)
Alessandro Bogliolo
PDF
AIXMOOC 3.3 - Linguaggio e capacità cognitive (Gabriella Bottini)
Alessandro Bogliolo
PDF
AIXMOOC 2.6 - Come funzionano i Large Language Models
Alessandro Bogliolo
PDF
Accessibilità ed equità digitale: un impegno, non una scelta
Commit University
PDF
Sotto il letto, sopra il cloud: costruirsi un’infrastruttura da zero
Speck&Tech
PDF
AIXMOOC 4.3 - Geopolitica dell'intelligenza artificiale (Alessandro Aresu)
Alessandro Bogliolo
PDF
AIXMOOC 3.2 - Linguaggio e memoria (Manuela Berlingeri)
Alessandro Bogliolo
AIXMOOC 6.1 - Non sono un robot (Dom Holdaway)
Alessandro Bogliolo
AIXMOOC 5.3 - L'essere umano di fronte all'I.A. (Cristiano Maria Bellei)
Alessandro Bogliolo
AIXMOOC 3.3 - Linguaggio e capacità cognitive (Gabriella Bottini)
Alessandro Bogliolo
AIXMOOC 2.6 - Come funzionano i Large Language Models
Alessandro Bogliolo
Accessibilità ed equità digitale: un impegno, non una scelta
Commit University
Sotto il letto, sopra il cloud: costruirsi un’infrastruttura da zero
Speck&Tech
AIXMOOC 4.3 - Geopolitica dell'intelligenza artificiale (Alessandro Aresu)
Alessandro Bogliolo
AIXMOOC 3.2 - Linguaggio e memoria (Manuela Berlingeri)
Alessandro Bogliolo

08 mapreduce

  • 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. MapReduce MapReduce è un nuovo approccio alla programmazione parallela sviluppato ed utilizzato da Google E' basato sulle primitive funzionali map e reduce che vengono dal mondo dei linguaggi funzionali Ci sono varie implementazioni del concetto, ad esempio Hadoop (in Java e usata da Yahoo!)
  • 3. Motivazione E' utilizzato in elaborazioni di grandi quantità di dati grandi volumi di input grandi volumi di output gran numero di processori (es. cluster) utilizzati parallelamente
  • 4. Fornisce MapReduce fornisce parallelizzazione distribuzione tolleranza ai guasti scheduling I/O monitoraggio del calcolo e delle prestazioni
  • 5. Cluster Un cluster è un insieme di computer collegati attraverso una rete e coordinati in modo da distribuire e parallelizzare un calcolo complesso Occorre dunque: Hardware di rete ad alte prestazioni Un sistema operativo adattato al clustering Un algoritmo parallelizzabile
  • 6. Primitive funzionali 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 o = map (f, i) es. se i = {1,2,3,4,5,6,7,8} e f(x) := 2*x allora o = {2,4,6,8,10,12,14,16}
  • 7. Primitive funzionali 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 Per esempio: o = reduce (f,i) con f(x,y) := x + y i := {1,2,3,4} produce o = ((1+2)+3)+4
  • 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. 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. 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. MapReduce 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) Il comportamento è mediato da una libreria (middleware)
  • 12. Modello di programmazione map ( in_key, in_value ) -> list(out_key,intermediate_value) elabora una coppia chiave/valore produce una lista di coppie chiave/valore (diverse)
  • 13. Modello di programmazione reduce ( out_key , list ( intermediate_value )) -> list(out_value) combina tutte le coppie chiave/valore per una certa chiave produce un set di valori (o un solo valore)
  • 14.
  • 15. Esecuzione L'input viene diviso in blocchi (es. di 16MB) Vengono attivate varie istanze del programma su un cluster di macchine Una delle istanze detta master assegna i task alle altre dette worker 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)
  • 16. Esecuzione(...continua) La funzione map produce delle coppie intermedie key',value' che vengono bufferizzate in memoria La funzione partitioning legge il buffer e copia le coppie key',value' in R regioni del disco note al master Il master assegna ad un worker un task di tipo reduce indicandogli una regione in R da ridurre
  • 17. Esecuzione(...continua) Il reduce task consiste nel prendere tutte le coppie key',value' e raggrupparle in modo che le chiavi siano uniche (k' 1 ,v' 1 ,v' 2 ,...,v' n ) (k' 2 ,w' 1 ,w' 2 ,...,w' m ) Dove le k' i sono chiavi intermedie e v' j e w' k sono valori intermedi emessi da map () 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
  • 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)
  • 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)
  • 20. Uso del modello MapReduce programs nel Google Source Tree
  • 21. Referenze "MapReduce: Simplified Data Processing on Large Clusters" paper by Jeffrey Dean and Sanjay Ghemawat; from Google Labs Free Java Framework for MapReduce http://hadoop.apache.org/