Traitement de données en mémoire : Introduc2on à...

31
Traitement de données en mémoire : Introduc2on à Spark Vincent Leroy

Transcript of Traitement de données en mémoire : Introduc2on à...

Page 1: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Traitementdedonnéesenmémoire:Introduc2onàSpark

VincentLeroy

Page 2: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Sources

•  ResilientDistributedDatasets,HenggangCui•  CourseraIntroduc2ontoApacheSpark,UniversityofCalifornia,Databricks

Page 3: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Organisa2ond’unDataCenter

CPUs: 10 GB/s

100 MB/s

0.1 ms random access

$0.45 per GB

600 MB/s

3-12 ms random access

$0.05 per GB

1 Gb/s or 125 MB/s

Network

0.1 Gb/s

Nodes in another rack

Nodes in same rack

1 Gb/s or 125 MB/s

Datacenter Organization

Page 4: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Exécu2onHadoopMapReduceMap Reduce: Distributed Execution

MAP REDUCEEach stage passes through the hard drives

Passageparledisqueàchaqueétape

Page 5: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

TraitementsItéra2fs

•  I/Odisqueàchaquerépé22onàLentpourbeaucoupdepe2tesitéra2ons

Map Reduce: Iterative Jobs• Iterative jobs involve a lot of disk I/O for each repetition

Stag

e 1

Stag

e 2

Stag

e 3

Disk I/O is very slow!

Page 6: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

CoûtmémoireTech Trend: Cost of Memory

PRIC

E

YEAR

Memory

disk flash

http://www.jcmit.com/mem2014.htm

2010: 1 ¢/MB

Lower cost means can put more memory in each server

Descoûtsplusbasfontqu’onpeutmeNreplusdemémoireparserveur

Page 7: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

TraitementenMémoire(RAM)

•  Beaucoupdejeuxdedonnées2ennentenRAM(1ouplusieursmachines)

•  LaRAMestrapideetévitelesI/Odisque

àPlateformedetraitementSpark

Page 8: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

RemplacerleDisqueparlaRAMUse Memory Instead of Disk

iteration 1 iteration 2 . . .Input

HDFS read

HDFS write

HDFS read

HDFS write

Input

query 1

query 2

query 3

result 1

result 2

result 3

. . .

HDFS read

Page 9: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

RemplacerleDisqueparlaRAM

In-Memory Data Sharing

iteration 1 iteration 2 . . .Input

HDFS read

Input

query 1

query 2

query 3

result 1

result 2

result 3. . .

one-time processing

Distributedmemory

10-100x faster than network and disk

Page 10: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

ArchitecturedeSparkApache Spark Components

Apache Spark

Spark Streaming

Spark SQL

MLlib & ML

(machine learning)

GraphX (graph)

Page 11: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

ResilientDistributedDatasets(RDDs)

Page 12: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

RDD

•  Collec2ondedonnées– Distribuée– Enlecture-seule– Enmémoire– CrééedepuisunstockagefiableouunautreRDD

Page 13: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Créa2ond’uneRDD

Parallelize

# Parallelize in Python wordsRDD = sc.parallelize(["fish", "cats", "dogs"])

Take an existing in-memory collection and pass it to SparkContext’s parallelize method

There are other methods to read data from HDFS, C*, S3, HBase, etc.

Read from Text File # Read a local txt file in Python linesRDD = sc.textFile("/path/to/README.md")

Create a Base RDD

Parallelize:Prendunecollec2onclassiqueexistanteenmémoireetlatransformeenRDD

LecturedepuisunfichiertexteD’autresméthodesexistentpourliredepuisHDFS,S3,Hbase…

Page 14: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Opéra2onssurlesRDDs

•  Transforma2ons:évalua2onparesseuse– Map,filter,intersec2on,groupByKey,reduceByKey,zipWithIndex…

•  Ac2ons:déclenchentl’exécu2ondestransforma2ons– Collect,count,reduce,saveAsTextFile…

•  Miseencache– Évitel’exécu2onrépétéedetransforma2onspourréu2liseruneRDD

Page 15: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

ExempledeRDD

Error, ts, msg1 Warn, ts, msg2 Error, ts, msg1

Info, ts, msg8 Warn, ts, msg2 Info, ts, msg8

Error, ts, msg3 Info, ts, msg5 Info, ts, msg5

Error, ts, msg4 Warn, ts, msg9 Error, ts, msg1

logLinesRDD

Error, ts, msg1 Error, ts, msg1

Error, ts, msg3

Error, ts, msg4 Error, ts, msg1

errorsRDD

.filter( )

(input/base RDD)

λ

Page 16: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

ExempledeRDD

errorsRDD

.coalesce(2)

Error, ts, msg1 Error, ts, msg3 Error, ts, msg1

Error, ts, msg4 Error, ts, msg1

cleanedRDD

Error, ts, msg1 Error, ts, msg1

Error, ts, msg3

Error, ts, msg4 Error, ts, msg1

.collect( )

Driver

Page 17: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Lignéed’uneRDD

.collect()

logLinesRDD

errorsRDD

cleanedRDD

.filter( )

.coalesce( 2 )

Driver

λ

DAG

Page 18: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Exécu2on

Driver

logLinesRDD

errorsRDD

cleanedRDD

Execution

Page 19: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Toléranceauxpannes

•  Hadoop:poli2quepessimiste,encasdecrashonperdpeumaiscoûtsd’I/Oélevéspourtouteslesexécu2ons

•  Spark:poli2queop2miste,onnepaiepaslatoléranceauxpannes,maisencasdecrashondoitrecalculerenu2lisantlalignéedelaRDD

Page 20: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

DépendancesdeRDDRDD Dependencies

13

Page 21: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

DépendancesdeRDD

•  Dépendancesétroites(narrow)– Permetd’enchainerl’exécu2onsurunnœudducluster,sansbarrière

– Crashpeucoûteux,reconstruc2onisolée•  Dépendanceslarges– Nécessitentlesdonnéesdetouteslespar22onsparentes,barrièredansl’exécu2on

– Crashcoûteux,ilfautreconstruirelesdonnéesdetouteslesmachines

Page 22: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Ordonnancementdel’exécu2on

•  Pourexécuterdesac2onssuruneRDD– L’ordonnanceurdécoupel’exécu2onenétapesenu2lisantlalignéedelaRDD

– Chaqueétapecon2entautantd’opéra2onsàdépendanceétroitequepossible

Page 23: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Ordonnancementd’exécu2onJob Scheduling

16

Page 24: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

ExempledeRDD

•  ShellSparkinterac2fscala> val wc = lesMiserables.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)

wc: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[5] at reduceByKey at <console>:14scala> wc.take(5).foreach(println)(créanciers;,1)(abondent.,1)(plaisir,,5)(déplaçaient,1)(sociale,,7)scala> val cw = wc.map(p => (p._2, p._1))

cw: org.apache.spark.rdd.RDD[(Int, String)] = MappedRDD[5] at map at <console>:16scala> val sortedCW = cw.sortByKey(false)

sortedCW: org.apache.spark.rdd.RDD[(Int, String)] = ShuffledRDD[11] at sortByKey at <console>:18scala> sortedCW.take(5).foreach(println)(16757,de)(14683,)(11025,la)(9794,et)(8471,le)scala> sortedCW.filter(x => "Cosette".equals(x._2)).collect.foreach(println)(353,Cosette)

Wordcount en Spark

Page 25: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

DataFrames

Page 26: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Défini2ond’uneDataFrame

•  Collec2ondedonnées– Organiséesencolonnes– SchémadesdonnéesàprochedesRDBMS

•  Implémenta2on– ReposesurdesRDD(toléranceauxpannes…)– Plushautniveau,langagetypeSQLàpermetd’avantaged’op2misa2ons(ordonnancementdesopéra2ons,projetTungsten…)

Page 27: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

ExempledeDataFrame

Page 28: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Quelquesno2onsdeScala

Page 29: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

Scala

•  Langagedeprogramma2onfonc2onnelle– Typagefortetsta2que– Compila2onenByteCodeJava–  InteropérableavecJava

•  Langagedéveloppéàl’EPFL– Adoptépardegrandsprojetsopen-source(Spark…)etindustriels(TwiNer…)

Page 30: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

ExemplesdeScaladanslecontextedeSpark

Page 31: Traitement de données en mémoire : Introduc2on à Sparklig-membres.imag.fr/.../sites/125/2016/11/Spark_fr.pdfStreaming Spark SQL MLlib & ML (machine learning) GraphX (graph) Resilient

ClasseScala