Sunteți pe pagina 1din 38

Baze de date non-SQL

1
Hadoop
* Proiect lansat de Apache la care au contribuit specialisti din intreaga
lume si un mare numar de companii printre care Yahoo, IBM,
Google.
* Principal realizator Doug Cutting
* Hadoop Distributed File System (HDFS) este un sistem de fisiere
distribuit destinat operarii pe structuri hardware obisnuite.
* Similar cu alte sisteme de fisiere distribuite cu facilitati care il disting
de alte implementari: toleranta la defectare si implementarea pe
hardware cu costuri scazute.
* Ideea HDFS este de a asigura acces rapid al aplicatiilor la date in
contextul aplicatiilor ce manipuleaza un volum mare de date.

2
Considerente initiale de dezvoltare
* Defecte hardware. O instanta HDFS e constituita din sute sau mii de masini
fiecare pastrand parti din fisiere de date. Detectarea defectarii si rapiditatea
refacerii automate este un obiectiv central pentru HDFS;
* Aplicatiile proceseaza fluxuri de date pentru care trebuie asigurata latenta
mica, viteza mare de acces;
* Seturi mari de date. HDFS este destiinat pentru seturi mari de date, fisiere
cu ordinul de marime de: gigabaiti, terabaiti. Milioane de fisiere intr-o
singura instanta cu o multime scalabila de noduri in acelasi cluster;
* Model de coerenta simplu. Pentru a simplifica coerenta datelor si a creste
viteza de acces modelul implementat este write-once-read-many.
* Mutarea aplicatiilor este mai ieftina decat mutarea datelor. Prelucrare
eficienta daca este executata aproape de locul unde datele sunt stocate
pentru a minimiza congestia.
* Portabilitatea pe platforme eterogene. HDFS este construit pentru
portabilitatea usoara de la o platforma la alta.

3
Metadate
Fiecare fişier intr-un sistem de fişiere are metadate, care pot conţine:

→ cum îl cheama / locaţia fişierului in ierarhia sistemului de fisiere

→ cine l-a creat, cui îi aparţine

→ când a fost creat

→ cine are drept de scriere in fişier, cine are drept de citire

→ când a fost accesat ultima data, când a fost modificat ultima dată

Pentru managementul unui sistem de fişiere este necesară stocarea de


metadate (ce fel de metadate sunt stocate diferă de la un sistem la altul)
Arhitectura HDFS
Metadata (nume, replici…):
Cale, 3,…….
NameNode
Metadata ops

Block ops
Client

Citire Noduri Date Noduri Date

Replicare

Rack 1 Scriere Rack 2

Client

4
Arhitectura
* Arhitectura HDFS este de tip master/slave.
* Un singur NameNode materializat printr-un server care gestioneaza spatiul
de nume fisiere si accesul clientilor la fisiere.
* Un cluster contine un numar de DataNode, uzual unul pe nod component al
cluster, care gestioneaza spatiul de stocare atasat nodului pe care ruleaza.
* Un fisier este impartit in unul sau mai multe blocuri ce sunt stocate intr-un
set de DataNode.
* NodeName executa operatii cu sistemul de fisiere ca deschidere, inchidere,
redenumire fisiere si directoare, maparea blocurilor la DataNode.
* DataNode sunt responsabile de servirea cererilor de citire si scriere de la
sistemul de fisiere al clientilor.
* DataNode realizeaza de asemenea crearea blocurilor, stergerea si
replicarea dupa instructiunile primite de la NameNode.
* DataNode si NameNode sunt componente software in sisteme de operare
Linux.

5
Namespace si replicare
* HDFS suporta organizarea traditionala ierarhica a fişierelor similar
cu sistemele de operare.
* NameNode gestioneaza file system namespace si orice schimbare
la file system namespace sau a proprietatilor fişierelor este inregistrata de
NameNode (date conţinute: proprietari, drepturi, factor de replicare, .. ).
* Metadata: in fişierele FsImage (un image als file-system-ului) şi EditLog
* Replicarea datelor: Fiecare fisier este stocat ca o secventa de
blocuri, toate blocurile cu exceptia ultimului bloc au aceeasi mărime.
Blocurile fisierului sunt replicate.
* Marimea blocurilor si factorul de replicare sunt configurabile pe fisier
si pot fi specificate la creare sau pot fi modificate.
* Deciziile de replicarea blocurilor sunt luate de NameNode care
primeste periodic de la fiecare DataNode din cluster informatii de tip
Heartbeat si raport de blocuri.

6
Plasare replici
Informatia despre un fisier are forma
* NameNode (Nume_fisier, Numar_replici, Id_blocuri, ...)
Exemplele:
* /cale/part-0,r:2,{1,3},...
* /cale/part-0,r:3,{2,4,5},...
Interpretare: part-0 are 2 replici pentru blocurile 1 si 3 si 3 replici pentru
blocurile 2,4,5.
Plasarea replicilor:
* Instantele HDFS se intind peste mai multe rack-uri(calculatoare legate la un switch)
Lărgimea de bandă este mai mare (pentru comunicarea) in rack.
* Plasarea pe un singur rack nu previne pierderea datelor la defectarea sa.
* Plasarea replicilor pe mai multe rack-uri creste costul comunicatiei.
* Politica: doua replici la masini din acelasi rack si o replica la un nod situat
pe alt rack. Aceasta politica limiteaza traficul de scriere intre rackuri si
sansa de defectare a intregului rack este mult mai mica fata de sansa de
defectare a unui nod.

7
Organizare
* Pentru minimizarea latenţei la citire, HDFS incearcă sa facă citirea datelor
de la replica cea mai apropiata, deci daca exista o replică gazduită de
acelasi rack aceasta va fi preferată. NameNode utilizează şi stochează un log al
tranzacţiilor pentru păstrarea persistentă a inregistrarilor la fiecare
schimbare in metadate (EditLog). EditLog e folosit şi pentru recovery
* Intregul file system namespace, incluzand si maparea blocurilor la fisiere si
proprietatile fisierelor se pastreaza in FsImage ca fisier local.
* O imagine a intreg file system namespace si block map este tinuta in
memorie, formatul este compact si in 4GB RAM se poate ţine un numar
mare de fisiere si directoare.
* La boot se citeste FsImage si EditLog, se aplica toate tranzactiile din EditLog si
creaza o noua versiune pentru FsImage.
* DataNode pastreaza datele HDFS in fisiere in sistemul de fisiere local, nu
are cunostinte despre fisierele HDFS. Fiecare bloc de date HDFS este
pastrat in fisiere distincte in sistemul de fisiere local. Distributia fisierelor in
directoare este importanta pentru optimizarea locala.

8
Creare fisiere
* Cererea clientului de creare a unui fisier nu necesita utilizare imediata a
NameNode.
* Initial clientul HDFS pastreaza datele intr-un fisier temporar local.
* Operatiile de scriere sunt transparent redirectate la acest fisier local
temporar.
* Cand nu mai incape intr-un bloc se contacteaza NameNode care insereaza
fisierul in ierarhia sistemului si aloca blocuri de date pentru el, raspunde
cererii clientului cu identitatea DataNode si clientul va trimite datele la
nodul de date specificat.

* La inchiderea fişierului in locaţia lui iniţială NameNode comite crearea


fişierului pe DataNode

* Cand un nod incepe sa receptioneze date, incepe cu o mica portiune pe


care o scrie pe disc si o transmite urmatorului nod la care se pastreaza
o replica.

9
Dilema SQL
* La un server de baze de date apelat de cateva servere web performantele
depind si de implementarea bazei de date.
* Experienta Google. Un mod foarte bun pentru vehiculare de volume mari de
date: BigTable cu baza de date semistructurata.
* Produse open source. Hbase, Casandra, Dinamo...
* Ceva similar cu BigTable a fost introdus prin anii 80 la sistemele de operare
cunoscuta ca “hierarchical file system”.
* SQL realizeaza sarcini foarte simple intr-o maniera foarte complexa.
* Este posibil ca Oracle sa piarda aplicatiile de top care sunt scalate de la zeci
pana la mii de servere.
* Modelul Hbase este mult mai atractiv si mai riguros decat modelul SQL cu
redundanta mult mai mica.
* Companiile mari utilizand SQL mizeaza pe hardware incercand in acest
mod sa ofere performantele dorite (exemplu, cumpararea Sun de catre
Oracle).

10
BigTable
* Ex: Pastrarea unei copii a unei mari colectii de pagini web si informatii
referitoare la modul cum pot fi utilizate in diverse proiecte, numita Webtable.
* Vom utiliza adresa url ca cheie de rand, o serie de aspecte ale paginii web
ca nume de coloane si coloana continut in care este stocata pagina web,
fiecare avand atasat momentul de timp la care a fost stocata.

Continut Ancora:url Ancora:url

<html> t3
Url pagina Link url Link url
t7 t8
t4

11
SSTable (“Sorted Strings Table”)
* Google foloseste formatul de fisier SSTable. SSTable realizeaza o
structura ordonata, persistenta in care cheile si valorile sunt siruri de byte.
Fizic SSTable contine o secventa de blocuri, tipic de 64 kb dar acest lucru
poate fi configurat. Un bloc index este plasat la sfarsitul SSTable si este
utilizat pentru localizarea blocurilor, indexul fiind incarcat in memorie cand
table este deschisă.

SSTable
Bloc Bloc Bloc Bloc
64k 64k 64k 64k Index

12
SSTable
* Table radacină conţine locaţiile tuturor table-or dintr-o table speciala,
metadata. Fiecare table metadata contine locatia unui set de tabele
utilizator. Table radacina este primul table in table metadata, si este
tratat in mod special, in sensul ca nu este niciodata impartita pentru a ne
asigura ca structura ierarhica nu are mai mult de 3 niveluri. Table-ul/-urile
metadata pastreaza locatia table-urilor utilizator sub o cheie rand (o codificare
a tabelei de table-uri).
Table-uri Tabela
metadata utilizator 1
Table
Fisier radacina

Tabela
utilizator N

13
Hbase
* Hbase: proiect open source Apache care urmareste sa furnizeze stocare
similara cu BigTable pentru mediul de calcul distribuit Hadoop.
* Datele sunt organizate in tabele, randuri si coloane.
* Fiecare coloana particulara poate avea multiple versiuni pentru aceeasi
cheie de rand.
* Modelul datelor utilizat de Hbase este similar cu cel utilizat de BigTable.
* Aplicatiile pastreaza randurile de date in tabele etichetate, randurile au
cheie de sortare si un numar arbitrar de coloane.
* Tabelele sunt stocate non dens asa ca randurile aceleiasi tabele pot avea
un numar variabil de coloane.
* Un nume de coloana este de forma "<family>:<label>" unde <family> si
<label> poate fi orice sir arbitrar de byte.
* Un tabel impune setul <family>, numit si "column families".
* Hbase stocheaza “column families” grupate fizic pe disc, asa ca elementele
dintr-o anumita coloana au acelesi caracteristici de citire/scriere.
* Numai un singur rand poate fi blocat implicit la un moment dat de timp.

14
Exemplu
Exemplu de tabela:

Row Key Time Stamp Column "contents:" Column "anchor:" Column "mime:"

"com.cnn.www"
t9 "anchor:cnnsi.com" "CNN"

t8 "anchor:my.look.ca" "CNN.com"

t6 "<html>..." "text/html"

t5 "<html>..."

t3 "<html>..."

15
Concept map
Termeni uzuali in Hbase.
* Map definit ca un tip de data abstract compus ca o colectie de chei si o
colectie de valori, unde fiecare cheie este asociata cu o valoare.
* Cu JavaScript Object Notation un exemplu simplu de map in care toate
valorile sunt de tip string este:
{
"zzzzz" : “root",
"xyz" : "hello",
"aaaab" : "world",
"1" : "x",
"aaaaa" : "y“
}
In Hbase si BigTable perechile cheie valoare sunt pastrate strict in ordine
alfabetica ca versiune sortata.

16
Rezulta:
{
"1" : "x",
"aaaaa" : "y",
"aaaab" : "world",
"xyz" : "hello",
"zzzzz" : “root“
}
Randurile cu cheile asemanatoare sunt grupate in aceasi zona.
Exemplu: tabela unde cheile sunt nume de domenii. Are sens sa fie listate in
ordine inversa, adica com.jim.www decat www.jim.com astfel ca gruparea
sa fie determinata de numele de domenii (nu de subdomenii). Astfel randul
pentru domeniul "mail.jim.com" va fi mai aproape de randul pentru
"www.jim.com" decat "mail.xyz.com" cum ar aparea daca cheia este notatia
obisnuita de domeniu.
Obs:
* Sortat nu inseamna ca “valorile” sunt sortate.
* Nu exista indexare automata pentru nimic altceva decat chei.
17
Map multidimensional
* map multidimensional -> map format din mai multe map.
Adaugarea unei noi dimensiuni la exemplul nostru obtine :
{
"1" : { In exemplu, se observa ca fiecare cheie
"A" : "x", indica un map cu exact doua chei: "A" si
"B" : "z" "B". Cu aceasta ne vom referi la
}, perechea de nivel top ca un rand, in
"aaaaa" : { terminologia Hbase maparea "A" si "B"
"A" : "y", fiind numite "Column Families".
"B" : "w" Column family poate avea orice numar
}, de coloane marcate printr-un "qualifier"
"aaaab" : {
sau "label". Similar column families pot fi
"A" : "world",
expandate utilizand “column qualifier”:
"B" : "ocean”
}
}

18
Dimensiunea timp
* Alta dimesiune reprezentata in modelul HBase/BigTable este timpul.
Toate datele sunt versionate fie utilizand un intreg timestamp ca
marca de timp fie un alt intreg la alegerea utilizatorului.
timestamp duce la:
{
"aaaaa" : {
"A" : { “unu" : {
15 : "y",
4 : "m"
},
"bar" : {
15 : "d“
}
}
}
19
* Fiecare column family poate avea propriile reguli referitoare la
numarul de versiuni pe care o celula data le pastreaza.
* De cele mai multe ori aplicatiile nu specifica timestamp, caz in care
va fi returnata cea mai recenta versiune, adica cea cu cel mai mare
timestamp intrucat sunt pastrate in ordine cronologica inversa.
* Daca aplicatia specifica un timestamp Hbase va returna data din
celula in care timestamp este maxim mai mic sau egal cu cel specificat.
Pentru exemplul dat cererea:
"aaaaa"/"A:unu" -> va returna "y”; → ultima valuare a lui “unu”
"aaaaa"/"A:unu"/10 -> va returna "m“; → valoarea lui “unu” la timpul 10
"aaaaa"/"A:unu"/2 -> va returna NULL.

20
Row Key Time Stamp Column "contents:"

"com.cnn.www"
t6 "<html>..."

t5 "<html>..."

t3 "<html>..."

Row Key Time Stamp Column "anchor:"

"com.cnn.www"
t9 "anchor:cnnsi.com" "CNN"

t8 "anchor:my.look.ca" "CNN.com"

Row Key Time Stamp Column "mime:"

"com.cnn.www" t6 "text/html"

21
* Este foarte important de retinut ca celulele goale nu sunt stocate
deoarece nu sunt in formatul de stocare orientat pe coloana.
* La o cerere pentru valoarea coloanei "contents:" la momentul de
timp exact t8 nu se va returna valoare. Similar, o cerere pentru valoarea
"anchor:my.look.ca" la momentul exact t9 nu va returna valoare
* La o aplicatie o tabela apare ca o lista de n-upluri sortata crescator
dupa cheia randului, numele coloanei crescator si timestamp
descrescator.
* Fizic, tabelele sunt sparte in mulţimi de randuri numite regiuni
(regions), termen echivalent cu tablet la BigTable.
* Fiecare regiune contine randurile de la cheia de start (inclusiv) pana
la cheia de stop (exclusiv).
* Un set de regiuni, sortate corespunzator, formeaza intreaga tabela.
Spre deosebire de BigTable care identifica o gama de randuri prin
numele tabelei si cheia de stop, Hbase identifica o gama de randuri
prin numele tabelei si cheia de start.

22
Arhitectura si implementare
In arhitectura HBase avem trei componente majore:
* HbaseMaster, analog cu Bigtable master server;
* HregionServer, analog cu Bigtable tablet server;
* Hbase client.
* HbaseMaster. HBaseMaster este responsabil de asignarea
regiunilor pentru HRegionServers. Prima regiune ce va fi asignata
este ROOT region care localizeaza toate META regiunile ce vor fi
asignate. Fiecare META region mapeaza un numar de regiuni
utilizator care cuprind tabele multiple pe care o instanta particulara
Hbase le serveste. De indata ce toate META regions au fost
asignate masterul va asigna regiunile utilizator la HRegionServers,
balansând numarul de regiuni servite de fiecare.

23
* HregionServer: fiecare pastreaza un pointer la HRegionServer care
gazuieste ROOT region. HBaseMaster monitorizeaza activitatea
fiecarui HregionServer.
* HbaseMaster este responsabil de manipularea functiilor
administrative cum sunt cele de schimbare schema: adaugare si
eliminare column families, activare-dezactivare copii de tabele.
* Spre deosebire de Bigtable cand HBaseMaster se defecteaza,
clusterul va fi oprit, la Bigtable, un Tabletserver poate inca servi
Tablets si dupa ce conexiunea cu masterul a fost intrerupta.
* Hbase utilizeaza numai un singur punct central pentru acces la toate
HregionServers, şi anume HBaseMaster.
* Rezultat:
 Un singur punct de defectare.
 Poate fi utilizata o conexiune Heartbeat pentru ca un server de backup sa poată
prelua sarcinile

24
* META Table. META table pastreaza informatia despre fiecare
regiune utilizator in HBase care include un obiect HRegionInfo
continand informatii ca cheia de start, cheia de stop, cand regiunea
este on-line sau off-line, adresa HRegionServer care serveste
regiunea. META table creste pe masura ce numarul regiunilor
utilizator creste.
* ROOT Table. ROOT table este limitat la o singura regiune si
mapeaza toate regiunile in META table. Similar cu META table, el
contine un obiect HRegionInfo pentru fiecare META region si locatia
HRegionServer care serveste acel META region. Un rand in ROOT
si META table are dimensiunea de aproximativ 1KB. Implicit
marimea unei regiuni este de 256 MB, asa ca ROOT region poate
mapa 2.6 x 105 META regions, care mapeaza in total 6.9 x 1010
regiuni utilizator, adica aproximativ 1.8 x 1019 (264) baiti de date.
* HRegionServer este responsabil de gestionarea cererilor de citire si
scriere. El comunica cu HBaseMaster pentru a da o lista a regiunilor
servite si pentru a spune masterului ca este functional.

25
Cereri
* Cereri de scriere. Cand o cerere de scriere este receptionata, mai intai
este inscrisa in jurnalul log numit si HLog. Toate cererile de scriere pentru
fiecare regiune sunt servite si scrise in acelasi log. De indata ce cererea a
fost scrisa in Hlog ea este stocata intr-o memorie cache numita Memcache.
Exista cate un Memcache for fiecare HStore.
* Cereri de citire. La citire este verificata mai intai Memcache si daca data
ceruta nu este gasita, MapFiles sunt cautate pentru rezultat.

* Gestionare cache. Cand Memcache atinge dimensiunea configurata el


este copiat pe disc creand un nou MapFile si un marker este scris in Hlog
asa ca atunci cand este reincarcat intrarile log dinainte de ultima salvare
pot fi sarite. Operatia poate fi concurenta cu un server care proceseaza
cereri de citire sau scriere si ca urmare inainte ca noul MapFile sa fie mutat
citirea si scrierea sunt suspendate pana cand MapFile este adaugat la lista
MapFiles active pentru HStore (= obiect care descrie operatia de scriere
pe disc/in memorie pentru o anumita regiune; constuctorul are ca
parametri: HRegion region,
ColumnFamilyDescriptor family,
org.apache.hadoop.conf.Configuration confParam )
26
Compactarea si separarea regiunilor
* Compactarea. Cand numarul MapFiles excede limita configurabila este
realizata o compactare minora care consolideaza cele mai recente
MapFiles scrise. O compactare majora este realizata periodic cand se
consolideaza toate MapFiles intr-un singur MapFile.
* Separarea regiunilor. Cand marimea fisierelor pentru un HStore atinge o
marime configurabila (obisnuit 256MB) o separare a regiunii este ceruta.
Separarea divide regiunea initiala in doua jumatati operatie foarte rapida
pentru ca regiunea copil citeste din MapFile a parintelui. Regiunea parinte
este facuta off-line, serverul de regiune inregistreaza noul copil in META
table si masterul este informat ca o separare a fost facuta si poate asigna
server de regiune pentru copil. Chiar daca mesajul de separare este
pierdut, masterul va descoperi ca separarea s-a produs deoarece se
scaneaza periodic META table pentru regiunile neasignate.

META table conţine locaţiile regiunilor in cluster

27
Hbase Client
* HBase Client. HBase client este responsabil de gasirea HregionServers
care servesc gama de randuri particulara de interes. La instalare HBase
client comunica cu HBaseMaster pentru a gasi ROOT region. Acesta este o
comunicatie doar intre client si master. Dupa ce ROOT region este localizat,
clientul contacteaza acel server de regiune si scaneaza ROOT region
pentru a gasi META region care va contine locatia pentru regiunea utilizator
ce contine gama de randuri dorita.
* Dupa localizarea regiunii utilizator clientul contacteaza serverul de regiune
servind acea regiune si furnizeaza cereri de citire sau scriere. Informatiile
sunt puse in cache de catre client asa ca urmatoarele cereri nu mai trebuie
sa parcurga intreg procesul.
* Cand o regiune este reasignata in urma defectarii serverului de regiune sau
pentru balansarea incaracrii clientul va rescana META table pentru a
determina noua locatie pentru regiunea utilizator. Daca META region a fost
reasignata clientul va rescana ROOT region pentru a determina noua
locatie pentru META region.

28
Tehnologia MapReduce
Functiile Map si Reduce sunt definite pe baza structurii de date sub
forma de pereche (cheie, valoare).
* Map(k1,v1) => Lista(k2,v2)
* Map se aplica in paralel fiecarui element din setul de date de intrare
si produce perechi (k2,v2) pentru fiecare apel.
* Functia Reduce este aplicata in paralel fiecarui grup format pe baza
cheilor produse de functia map si produce o colectie de valori in
acelasi domeniu
* Reduce(k2, lista(v2)) =>Lista(v2)
* Fiecare apel al functiei Reduce produce fie o singura valoare fie
returneaza vid (in programarea functionala), aici poate returna si o lista
de valori..
* In ansamblu MapReduce transforma o lista de perechi (key, value)
intr-o lista de valori.
29
Exemplu
* Determinare a numarului de aparitii ale fiecarui cuvant sau a unei secvenţe
de cuvinte intr-o multime de documente.
* Map: Intrare numele documentului (cheia1) si continutul acestuia (valoare1).
Rezultat: lista cu perechile cuvintul din document (cheie2) si numarul de
aparitii (valoare2) pentru fiecare apel.
* Reduce: Intrare cuvantul si numarul de aparitii ale acestuia in fiecare document.
Iesire: suma aparitiilor cuvantului in colectia de documente.
* MapReduce se bazeaza pe impartirea unui numar de operatii pe seturi de
date la fiecare nod dintr-o retea (cluster). Fiecare nod este asteptat sa
raspunda periodic cu rezultatul procesarii si actualizarea starii. Daca un nod
nu raspunde intr-un intervalul de timp specificat, nodul master inregistreaza
nodul ca fiind defect si trimite sarcinile de procesare ale alocate acestuia
catre alte noduri.

30
Componente
Din punct de vedere functional MapReduce asigura functionalitate
distribuita si principalele componente pentru implementarea
software sunt:
* Input reader
* Functia map
* Functia de comparatie
* Partition function (functia de partitionare)
* Functia reduce
* Output writer

Curs 10 31
Detaliere componente
* Input reader divide datele de intrare in felii (bucati) ce sunt asignate la
fiecarui nod care va executa map. Datele sunt formate din perechi
(cheie, valoare)
* Functia map. Preia o serie de perechi cheie/valoare, genereaza nici una
sau mai multe alte perechi cheie/valoare. (in general nu acelasi tip de valori)
* Partition function reprezinta o functionalitate a aplicatiei prin care iesirile
tuturor apelurilor functiei map sunt alocate la functii particulare Reduce.
Uzual aceasta este o functie hash de tip modulo numarul functiilor Reduce.
* Functia de sortare. Intrarea pentru fiecare functie Reduce este luata de
la toate masinile unde a u executat Map (găseşte rezultatele pt. fiecare cheie)
* Functia Reduce Functia integreaza valorile asociate cu acea cheie si
produce la iesire zero sau mai multe perechi (cheie, valoare).
* Output writer scrie rezultatul produs de functia Reduce intr-o structura de
stocare stabila, uzual un sistem de fisiere distribuit.

32
Executie
* Se impart mai intai fisierele de intrare in M componente, uzual cu dimensiuni
cuprinse intre 16 si 64 sau chiar 128 Mb, marimea ar trebuii controlata de
utilizator printr-un parametru optional.
* O copie a programului are functionalitati diferite si formeaza masina numita si
master. Toate celelalte masini sunt lucratori (worker) si au sarcinile de procesare
asignate de catre master. Masterul trebuie sa aloce M taskuri Map si R
taskuri Reduce. Masterul alege lucratori inactivi si le atribuie fiecaruia dintre
ei fie un task Map fie un task Reduce.
* Lucratorul care are asignat un task Map citeste continutul fragmentului de
intrare corespunzator. El analizeaza perechile (cheie, valoare) a datelor de
intrare si paseaza fiecare pereche la functia Map definita de utilizator.
Perechile intermediare (cheie, valoare) produse de catre functia Map sunt
pastrate in memoria interna.
* Periodic perechile pastrate in memoria interna sunt scrise pe discul local,
partitionat in R regiuni de functia de partitionare. Locatiile perechilor de pe
discul local sunt transmise inapoi la master care este raspunzator de
inaintarea (transmiterea) acestor locatii la lucratorii Reduce.

Curs 10 33
Executie (cont)
* Cand un lucrator Reduce este notificat de catre master despre aceste locatii
el va initia remote procedure call pentru citirea datelor de la discul local al
masinii care a executat functia Map. Dupa ce a citit toate datele
intermediare, acesta le sorteaza dupa cheile intermediare asa ca toate
perechile cu aceeasi cheie sunt grupate impreuna. Sortarea este necesara
deoarece in mod uzual mai multe chei diferite sunt mapate la acelasi task
reduce. Daca volumul de date este mare pentru ca sortarea sa se execute
in memoria interna se va utiliza o sortare externa.
* O masina care executa un task Reduce parcurge datele intermediare
sortate si pentru fiecare cheie unica intermediara paseaza cheia si setul
inermediar de valori la functia utilizator Reduce. Iesirea de la functia
Reduce este adaugata la iesirea finala pentru acea partitie reduce.
* Cand toate taskurile Map si Reduce au fost terminate, masterul
atentioneaza programul utilizator. La acest punct apelul MapReduce de la
programul utilizator este returnat la codul urilizator.

34
Schema functionala

Program
utilizator

(1) fork (1) fork (1) fork

Master (2)
(2)

Lucrator
Felia 1 Fisier
(5) Lucrator
iesire 1
(4) (6)
Felia 2 (3)
Lucrator
Felia 3 Fisier
Lucrator iesire 2
Felia 4
Lucrator
Fisiere Fisiere Fisiere
Faza Faza
intrare Intermediare pe disc iesire
Map reduce
local

35
Toleranta la defectare
Pentru fiecare task Map si Reduce masterul pastreaza starea si identificatorul
masinii care il prelucreaza:
* IDLE – stare inactiva
* IN PROGRESS – task in executie
* COMPLETED – task complet executat
Cum la executia in cluster sunt implicate doua entitati, acestea devin entitati
susceptibile de defectare:
* Defectare statie lucrator. Masterul transmite periodic mesaj de cerere ecou
(ping) catre fiecare statie lucrator. Orice task Map care are starea COMPLETED/
IN PROGRESS atribuit unei masinii ce nu raspunde, deja asignata la master,
este adus in starea initiala IDLE si devine eligibil pentru a fi distribuit altor
statii ignorand procesarile deja efectuate deoarece nu mai avem acces la
discul local al masinii pe care a fost stocat fisierul de iesire.

36
Toleranta la defectare
* Toate taskurile Map si Reduce cu starea IN PROGRESS sunt aduse in
starea initiala IDLE pentru a putea fi redistribuite.
* Taskurile Reduce COMPLETED nu mai trebuiesc executate deoarece
iesirea lor este stocata intr-un fisier sistem global. Atunci cand un task Map
este executat de o masina A si apoi reexecutat de o masina B, datorita
defectarii lui A, toate masinile ce executa taskuri Reduce sunt notificate
pentru reexecutie. Ca urmare orice task care nu a citit deja datele de la
masina A va cunoaste ca datele de intrare trebuiesc citite de la masina B.
* Defectare master. O procedura simpla este cea de a marca periodic puncte
de control la care se scrie structura de date descrisa mai sus in fisier global.
La defectare o copie a taskului master este lansata cu starea aferenta
ultimului punct de control la care starea a fost salvata.

37

S-ar putea să vă placă și