You are on page 1of 29

Introducere n MapReduce

MapReduce
Model de programare pentru exprimarea calculelor distribuite pe scar mare Framework de execuie pentru organizarea i execuia unor astfel de calcule O implementare i l t open-source numit it Hadoop H d

De ce date mari?

Source: Wikipedia (Everest)

Ct de mari sunt datele ?


Google procesa 20 PB zilnic (la nivelul anului 2008) Wayback Machine are 3 PB + 100 TB/lun (3/2009) Facebook F b k are 2.5 2 5 PB de d d date t ale l utilizatorilor tili t il + 15 TB/zi (4/2009) eBay eBa are 6.5 6 5 PB de date ale utilizatorilor tili atorilor + 50 TB/zi (5/2009) CERN CERNs s LHC genereaz 15 PB pe an

Maximilien Brice, CERN

Maximilien Brice, CERN

Cum putem scala la acest nivel ?

Source: Wikipedia (IBM Roadrunner)

Divide et Impera
Work Work Partiionare w3
worker

w1
worker

w2
worker

r1

r2

r3

Result

Combinare

Probleme cu paralelizarea
Cum asignm task-uri workerilor? Ce se ntmpl dac avem mai multe task-uri d t workeri? dect k i? Ce se ntmpl dac workerii trebuie s partajeze t j rezultate lt t pari iale? l ? Cum se pot agrega rezultatele pariale? Cum C ti tim c to t i workerii k ii au t terminat? i t? Ce se ntmpl dac un worker moare?
Care e elementul comun tuturor acestor probleme?

O tem comun?
Problemele de paralelizare au la baz:
Comunicaia ntre workeri (ex., pentru schimbul strilor curente) Acces la resurse partajate (ex., date)

Aadar avem nevoie de un mecanism de sincronizare

Source: Ricardo Guimares Herrmann

Gestiunea mai multor Workeri


Dificult i cauzate de:
Nu tim ordinea n care se execut workerii Nu tim cnd apar ntreruperi n funcionarea workerilor Nu N ti tim ordinea di n care workerii k ii acceseaz d datele t l partajate t j t

Avem nevoie de :
Semafoare ( (lock, , unlock) ) Variabile de condiie (wait, notify, broadcast) Bariere

Alte probleme:
Deadlock, livelock, race condition... Problema filozofilor, problema brbierului...

Morala: atenie sporit la problemele de gestiune!

Instrumente curente
Modele de programare
Shared memory (pthreads) Message passing (MPI)
Shared Memory Memory Message Passing

Design D i Patterns P tt
Master-slaves Producer-consumer flows Shared work queues
master producer consumer

P1 P2 P3 P4 P5

P1 P2 P3 P4 P5

work queue slaves l producer consumer

Probleme
Concurena dificil de gestionat
La nivelul unor datacentre (mai ales la nivelul mai multor datacentre) n prezena defectelor n termenii interaciunilor multiple ale serviciilor

Realitatea: R lit t
Multe soluii create ad-hoc, in-house, cod custom Dezvoltatorii scriu propriile biblioteci i cod dedicat Accentul cade pe programator are sarcina (dificil) s gestioneze toate aceste aspecte

MapReduce

Problem Large-Data tipic


Iterm peste un numr mare de nregistrri Extragem ceva de interes din fiecare nregistrare Amestecm i sortm rezultatele intermediare Agregm rezultatele intermediare Generm rezultatele finale
Ideea de baz: furnizarea unei abstractizri funcionale pentru aceste dou operaii

(Dean and Ghemawat, OSDI 2004)

Rdcini n Programarea Funcional

Map

Fold

MapReduce
Programatorul specific dou funcii:
map (k, v) <k, v>* reduce (k, v) <k, v>* oate valorile ao ea avnd d aceeai cheie c e e su sunt t Toate trimite aceluiai reducer

Framework-ul Framework ul de execuie se ocup de toate celelalte detalii

MapReduce
Programatorul specific dou funcii:
map (k, v) <k, v>* reduce (k, v) <k, v>* oate valorile ao ea avnd d aceeai cheie c e e su sunt t Toate trimite aceluiai reducer

Framework-ul Framework ul de execuie se ocup de toate celelalte detalii


Ce reprezint celelalte detalii? detalii ?

Mediul de execuie MapReduce


Gestiunea planificrii
Asigneaz workeri pentru task-urile de map i reduce

Gestiunea distribuiei de date


Mut procesele lng datele de procesat

Gestiunea sincronizrii
G Gestioneaz ti strngerea, t sortarea t i amestecarea t datelor intermediare

Gestiunea erorilor
Detecteaz defectarea workerilor i repornirea acestora

Totul are loc peste un FS distribuit

MapReduce
Programatorul specific dou funcii:
map (k, v) <k, v>* reduce (k, v) <k, v>* Toate valorile avnd aceeai cheie sunt trimite aceluiai reducer

Framework-ul de execuie se ocup de toate celelalte detalii n realitate tot programatorii specific:
partition (k, number of partitions) partiia pentru k ( ) mod n Adesea un simplu hash al cheii, ex. hash(k) Divizarea spaiului cheilor pentru operaiile paralele de reduce combine (k, v) <k, v>* Mini-reduceri reduceri ce ruleaz n memorie dup faza de map Mini Folosit ca optimizare pentru reducerea traficului peste reea

Hello World: Word Count


Map(String docid, String text): for each word w in text: Emit(w 1); Emit(w, Reduce(String term, Iterator<Int> values): int sum = 0; for each v in values: ; sum += v; Emit(term, value);

MapReduce nseamn
Modelul de programare Framework de execuie Implementare specific

Implementri MapReduce
Google has a proprietary implementation in C++
Bindings in Java, Java Python

Hadoop is an open-source implementation in Java


Development led by Yahoo, used in production Now an Apache p p project j Rapidly expanding software ecosystem

Lots of custom research implementations p


For GPUs, cell processors, etc.

Implementri MapReduce
G Google l are o implementare i l t proprietar i t n C++
Cu suport pentru Java, Java Python

Hadoop este o implementare open-source pentru Java


Dezvoltarea condus de Yahoo Astzi p proiect Apache p

Diverse alte implementri (unele orientate spre cercetare)


Pentru GPU-uri, procesoare CELL, etc.

Adapted from (Dean and Ghemawat, OSDI 2004)

You might also like