Sunteți pe pagina 1din 17

SPARK: CLUSTER COMPUTING WITH

WORKING SETS

ION ALEXANDRU
I NGI NER I A SISTEMELOR INTER NET

2 1 ,0 5 ,2 0 1 5
INTRODUCERE
Apache Spark a inceput ca un proiect de cercetare la UC Berkeley in
AMPLab, si se baza pe analiza volumelor mari de date.

Scopul lor era sa implementeze un model de programare care sa


suporte o clasa mai larga de aplicatii decat MapReduce si in acelasi
timp sa pastreze toleranta automata la erori.

In special, MapReduce este ineficient pentru aplicatii multi-pass ce


necesita latenta mica in operatiuni paralele multiple.

Pentru a atinge aceste scopuri, Spark introduce un nivel de


abstractizare numit Seturi de date Distribuite Reziliente (RDD).
PUNCTE SLABE MAPREDUCE

• joburi iterative: majoritatea algoritmilor de invatare automata


aplica o functie in mod repetat asupra aceluiasi set de date
pentru a optimiza un parametru

• analiza interactiva: cand se interogheaza seturi de date mari, un


utilizator poate incarca un set de date in memoria mai multor
masini si sa-l interogheze in mod repetat.
MODELUL DE PROGRAMARE
Seturi de date Distribuite Reziliente
• Create din fisiere HDFS sau vectori paralelizati
• Pot fi modificate cu map si filter
• Pot fi pastrate in cache de-alungul mai multor operatii paralele

Operatii paralele pe RDD


• reduce, collect, foreach

Variabile comune
• Acumulatori si variabile de broadcast ce pot fi folosite in functii
CUM FUNCTIONEAZA
RESILIENT DISTRIBUTED
DATASETS (RDDS)
RDD este o colectie de obiecte read only partitionate la un set de
masini care pot fi reconstruite daca o partitie se pierde.

Elementele dintr-un RDD nu exista pe un spatiu de stocare fizic, in


schimb o legatura catre RDD contine destula informatie pentru a
genera RDD-ul pornind de la informatii din spatii de stocare sigure.
Asta inseamna ca RDD-urile pot fi mereu reconstruite daca un nod
cedeaza.
RESILIENT DISTRIBUTED
DATASETS (RDDS)

Spark permite programatorilor sa construiasca RDD-urile in 4


moduri:

• Dintr-un fisier dintr-un sistem de fisiere shared


• Prin paralelizarea unei colectii Scala in programul de executie (
driver program)
• Prin transformarea unui RDD existent
• Prin schimbarea persistentei unui RDD existent
OPERATIUNI PE RDD

Transformari
• Map
• Filter
• Join

Actiuni
• Count
• Colect
• Save
OBIECTE RDD
Operatiuni Actiune
partitions() Returneaza o lista cu obiectele partitiei

prefferedLocations(p) Lista nodurilor unde partitia p poate fi accesata


mai repede datorita locatiei datelor
dependencies() Returneaza lista dependentelor

iterator(p, parentIters) Genereaza lista de elemente a partitiei p folosint


iteratorii partitilor parinte
partitioner() Returneaza metadata specificand daca RDD-ul
este partitionat range/hash
VARIABILE COMUNE

Programatorii folosesc operatiuni ca map, filter si reduce prin


trimiterea functiilor la Spark. In mod normal, cand Spark
ruleaza o functie pe un nod, acele variabile sunt copiate in
acel nod.

Totusi, Spark mai permite programatorilor sa creeze doua


tipuri variabile comune pentru a oferi suport pentru doua
modele de utilizare comune.
VARIABILE DE BROADCAST

Cand se creeaza o variabila de broadcast b cu valoarea v, v


este salvat intr-un fisier comun.

Forma serializata a lui b este o cale catre acel fisier.

Cand valoarea lui b este interogata intr-un nod, Spark verifica


mai intai daca v se afla in cache-ullocal, altfel, il citeste din
fisier.
ACUMULATORI
Fiecarui acumulator ii este atribuit un id unic cand este creat.
Cand acumulatorul este salvat, forma lui serializata contine
id-ul si valoriile de "zero" pentru tipul sau.

Pentru workeri, o copie separata a acumulatorului este creata


pentru fiecare thread care ruleaza un task folosind variabile
locale, si este resetat la zero cand task-ul incepe.

Dupa rularea fiecarui task, worker-ul trimite un mesaj la


programul de executie ce contine actualizarile facute la
diversi acumulatori.
EXEMPLU

val file = spark.textFile("hdfs://...")


var errs = file.filter(_.contains("ERROR"))
val cachedErrs = errs.cache()
val ones = cachedErrs.map() => 1)
val count = ones.reduce(_+_)
EXEMPLU
REZULTATE
Set de date: 29 GB
Mediu: 20 noduri “m1.xlarge” EC2 cu 4 core-uri de fiecare
Algoritm: Regresia Logistica
CONCLUZII
Spark ofera un set limitat dar eficient de abstractizare pentru
toleranta automata la erori.
• Seturi de date Distribuite Reziliente
• Variabile comune restranse

Imbunatatiri care vor fi aduse


• Mai multe transformari RDD
• Mai multe optiuni de RDD persistent
• RDD care se pot actualiza
• Accesul la date intre aplicatii
MULTUMESC!

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