Professional Documents
Culture Documents
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?
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)
Avem nevoie de :
Semafoare ( (lock, , unlock) ) Variabile de condiie (wait, notify, broadcast) Bariere
Alte probleme:
Deadlock, livelock, race condition... Problema filozofilor, problema brbierului...
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
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
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
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
Gestiunea sincronizrii
G Gestioneaz ti strngerea, t sortarea t i amestecarea t datelor intermediare
Gestiunea erorilor
Detecteaz defectarea workerilor i repornirea acestora
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
MapReduce nseamn
Modelul de programare Framework de execuie Implementare specific
Implementri MapReduce
Google has a proprietary implementation in C++
Bindings in Java, Java Python
Implementri MapReduce
G Google l are o implementare i l t proprietar i t n C++
Cu suport pentru Java, Java Python