Μαδηθόο Παξαιιειηζκόο κε Map Reduce θαη Spark Δηζαγσγηθά Μνληέιν Θέκαηα πινπνίεζεο Παξαδείγκαηα Spark
Δπραξηζηίεο Map-Reduce Κάπνηεο δηαθάλεηεο ζηεξίδνληαη ζε κεγάιν βαζκό ζην πιηθό πνπ είλαη δηαζέζηκν από ην εξγαζηήξην Infolab ηνπ Stanford γηα ην κάζεκα CS347 (http://infolab.stanford.edu) ζην ειεύζεξα δηαζέζηκν βηβιίν «Data-Intensive Text Processing with MapReduce» ζε πιηθό από ηελ Databricks θαη spark-summit.org 2
Map-Reduce Τη είλαη ην MapReduce Πξόθεηηαη γηα έλα πξνγξακκαηηζηηθό κνληέιν, πνπ είλαη θαηάιιειν γηα επεμεξγαζία πνιύ κεγάισλ όγθσλ δεδνκέλσλ ζε θαηαλεκεκέλνπο πόξνπο. Βαζίδεηαη ζε ηδέεο γλσζηέο από δεθαεηίεο! Αξρηθά αλαπηύρζεθε από ηελ Google αιιά νη πεξηζζόηεξνη ην ρξεζηκνπνηνύλ κέζσ ηεο πινπνίεζεο αλνηρηνύ θώδηθα Hadoop. Τν Spark κπνξεί λα ζεσξεηεί σο κία επέθηαζή ηνπ. 3
Map-Reduce Πάξα πνιιά δεδνκέλα. Βαζηθό θίλεηξν Google: 100TB/day ην 2004, 20PB/day ην 2008. ebay (2009): 170 10 12 εγγξαθέο, 150 10 9 λέεο εγγξαθέο θαζεκεξηλά, 2-6,5 PB δεδνκέλα ρξεζηώλ. Facebook(2009): 2,5PB, 15 TB θάζε κέξα. LHC: 15PB/έηνο. Πνιινί αιγόξηζκνη πνπ βαζίδνληαη ζε εθπαίδεπζε δνπιεύνπλ θαιύηεξα κε πεξηζζόηεξα δεδνκέλα. 640K πρέπει να επαρκούν για ηον καθένα 4
Γεκηνπξγία Δπξεηεξίνπ (index) θεηκέλνπ - Ι Map-Reduce Ροή ζελίδων buffers 2 1 dog cat rat dog (rat, 1) (dog, 1) (dog, 2) (cat, 2) (cat, 2) (dog, 1) (dog, 2) (dog, 3) Ενδιάμεζα αποηελέζμαηα rat dog 3 (rat, 3) (dog, 3) (rat, 1) (rat, 3) Δίζκορ Φόπηωζη Tokenizing Ταξινόμηζη 5
Γεκηνπξγία Δπξεηεξίνπ (index) θεηκέλνπ - ΙΙ Map-Reduce (cat, 2) (dog, 1) (ant, 5) Ενδιάμεζα αποηελέζμαηα (dog, 2) (dog, 3) (rat, 1) (rat, 3) (ant, 5) (cat, 4) (dog, 4) (dog, 5) (eel, 6) Merge (cat, 2) (cat, 4) (dog, 1) (dog, 2) (dog, 3) (dog, 4) (dog, 5) (eel, 6) (rat, 1) (rat, 3) (ant: 2) (cat: 2,4) (dog: 1,2,3,4,5) (eel: 6) (rat: 1, 3) Τελικό αποηέλεζμα 6
Τππηθή Δθαξκνγή-Πξόβιεκα: Map-Reduce 1. Γηαβάδνπκε κία-κία ηηο εγγξαθέο από έλα κεγάιν ζύλνιν δεδνκέλσλ. 2. Παξάγνπκε θάηη ρξήζηκν από θάζε εγγξαθή. 3. Αλαδηαηάζζνπκε θαη ηαμηλνκνύκε ηα ελδηάκεζα απνηειέζκαηα. 4. Σπλαζξνίδνπκε ηα ελδηάκεζα απνηειέζκαηα. 5. Παξάγνπκε ην ηειηθό απνηέιεζκα. 7
Map-Reduce Γεληθό Μνληέιν επεμεξγαζίαο: Map Ροή ζελίδων buffers Map 2 1 dog cat rat dog (rat, 1) (dog, 1) (dog, 2) (cat, 2) (cat, 2) (dog, 1) (dog, 2) (dog, 3) Ενδιάμεζα αποηελέζμαηα rat dog 3 (rat, 3) (dog, 3) (rat, 1) (rat, 3) Δίζκορ Φόπηωζη Tokenizing Ταξινόμηζη 8
Γεληθό Μνληέιν επεμεξγαζίαο: Reduce Map-Reduce (cat, 2) (dog, 1) (ant, 5) Ενδιάμεζα αποηελέζμαηα (dog, 2) (dog, 3) (rat, 1) (rat, 3) (ant, 5) (cat, 4) (dog, 4) (dog, 5) (eel, 6) Merge (cat, 2) (cat, 4) (dog, 1) (dog, 2) (dog, 3) (dog, 4) (dog, 5) (eel, 6) (rat, 1) (rat, 3) Reduce (ant: 2) (cat: 2,4) (dog: 1,2,3,4,5) (eel: 6) (rat: 1, 3) Τελικό αποηέλεζμα 9
Σπλνπηηθή Πεξηγξαθή Map-Reduce map ( θιεηδί, ηηκή ) ιίζηα από δεύγε (θιεηδί, ηηκή ) reduce (θιεηδί, ηηκή list) ιίζηα κε ηειηθή_ηηκή γηα θάζε θιεηδί Ή αιιηώο: Map: (k1, v1) [(k2, v2)] // ην [] ζπκβνιίδεη ιίζηα Reduce: (k2, [v2]) [v3] //ζε εθδόζεηο Hadoop κπνξεί λα αιιάμεη ην θιεηδί k2 ζε k3. Τν θιεηδί δελ έρεη εδώ ηελ απζηεξή έλλνηα ησλ ΒΓ, δει. κπνξνύλ λα ππάξρνπλ πεξηζζόηεξεο ελδηάκεζεο ηηκέο κε ην ίδην θιεηδί. 10
map(string doc, String value); // doc: όλνκα εγγξάθνπ // value: πεξηερόκελν εγγξάθνπ for each word w in value: EmitIntermediate(w, 1 ); Map-Reduce Παξάδεηγκα: θαηακέηξεζε εκθαλίζεσλ ιέμεσλ Παξάδεηγκα: map(doc, cat dog cat bat dog ) emits [(cat 1), (dog 1), (cat 1), (bat 1), (dog 1)] 11
Map-Reduce Παξάδεηγκα: θαηακέηξεζε εκθαλίζεσλ ιέμεσλ reduce(string key, Iterator values); // key: ιέμε // values: ιίζηα κε θαηακεηξήζεηο int result = 0; for each v in values: result += ParseInt(v) Emit(AsString(result)); Παξάδεηγκα: reduce( dog, [1 1 1 1]) emits 4 12
Source data Split data Mappers Workers 13
Mappers Split data Workers 14
Mappers Split data Workers 15
Mappers Split data Workers 16
Mappers Split data Workers 17
Mappers Split data Workers 18
Mappers Split data Workers 19
Mappers Split data Workers 20
Mappers Split data Workers 21
Mappers Split data Workers 22
Mappers Split data Workers 23
Mappers Split data Workers 24
Shuffle Workers 25
Shuffle Workers 26
Reduce Workers 27
Σύλνςε παξάιιειεο εθηέιεζεο User Program fork fork fork assign map Master assign reduce Input Data Split 0 Split 1 Split 2 read Worker Worker Worker local write remote read, sort Worker Worker write Output File 0 Output File 1 28
Μηα άιιε ζεώξεζε ηύπνπ ΒΓ Mapper: (εξώηεκα θαηά βάζε κε ηειεζηέο πνπ επεμεξγάδνληαη θάζε πιεηάδα μερσξηζηά) Shuffle: GROUP BY Reducer: SELECT Aggregate() 29
Map-Reduce Σπληνληζκόο θόκβνο master (MRv1) O θόκβνο master Διέγρεη αλ κηα εξγαζία (task) δελ έρεη εθηειεζηεί (idle), εθηειείηαη (in-progress) ή έρεη νινθιεξσζεί (completed). Οη εξγαζίεο ρξνλνδξνκνινγνύληαη κόιηο ειεπζεξώλνληαη θόκβνη. Όηαλ νινθιεξώλεηαη κία map εξγαζία, ν master ελεκεξώλεηαη γηα ηε ζέζε θαη ην κέγεζνο ησλ ελδηάκεζσλ απνηειεζκάησλ, πνπ είλαη ζε ηόζα αξρεία, όζα θαη νη θόκβνη γηα ηε reduce. Καηόπηλ ελεκεξώλνληαη νη θόκβνη γηα ηε reducer. Δπίζεο ν master ειέγρεη πεξηνδηθά (κε pings) ηνπο θόκβνπο γηα ηνλ εληνπηζκό ζθαικάησλ. 32
Θέκαηα πινπνίεζεο Σπλαξηήζεηο ζπλδπαζκνύ Σύζηεκα Αξρείσλ Γηακεξηζκόο εηζόδνπ θαη θιεηδηώλ Απνηπρίεο Δξγαζίεο Backup Ταμηλόκεζε απνηειεζκάησλ Map-Reduce 33
Map-Reduce Μέζνδνη θαη θιάζεηο Κάζε εξγαζία ζπάεη ζε tasks πνπ πεξηιακβάλνπλ κπινθ από δεύγε θιεηδηώλ-ηηκώλ. Γηα θάζε task δεκηνπξγείηαη έλα mapper object, πνπ θαιεί ηε κέζνδν map γηα θάζε δεύγνο. 34
Map-Reduce Σπλαξηήζεηο ζπλδπαζκνύ (combine) [cat 1], [cat 1], [cat 1]... worker worker [dog 1], [dog 1]... worker Παρόμοιο με ηην εκηέλεζη ενός ηοπικού reduce ζηα ενδιάμεζα αποηελέζμαηα. worker [cat 3]... worker [dog 2]... worker 35
Καηαλεκεκέλν Σύζηεκα Αξρείσλ Map-Reduce Όλες οι μεηακινήζεις δεδομένων γίνονηαι μέζω ενός καηανεμημένοσ ζσζηήμαηος αρτείων. Ο κάθε worker μπορεί να προζπελαύνει κάθε μέρος ηης ειζόδοσ Ο κάθε reduce worker έτει πρόζβαζη και ζηοσς ηοπικούς δίζκοσς κάθε worker μπορεί να γράθει ζηο δίζκο ηο κομμάηι ηης απάνηηζης ποσ ζσνειζθέρει. Η απάνηηζη είναι ζ ένα καηανεμημένο αρτείο 36
Map-Reduce Γηακεξηζκόο εηζόδνπ θαη θιεηδηώλ Πόζνη ζα είλαη θόκβνη worker; Καιύηεξα λα ππάξρνπλ πνιιά θνκκάηηα εηζόδνπ αλά θόκβν, γηα θαιύηεξε εμηζνξξόπεζε θόξηνπ θαη γηα θαιύηεξε αληηκεηώπηζε απνηπρηώλ. Σε πόζα θνκκάηηα ζα δηακεξηζηεί ε είζνδνο; Πην πνιιά από ηνλ αξηζκό ησλ θόκβσλ, Πνπ είλαη ήδε κεγάινο. Σηα ηππηθά παξαδείγκαηα ηεο google ν δηακεξηζκόο είλαη ζε θνκκάηηα ησλ 64MB. Η αλάζεζε γίλεηαη έηζη ώζηε λα αλαηίζνληαη θνκκάηηα ηεο εηζόδνπ ζηνπο πην θνληηλνύο θόκβνπο. Όηαλ απηό είλαη εθηθηό 37
Map-Reduce Απνηπρίεο Ο θόκβνο Master εληνπίδεη απνηπρίεο θαη μαλα αλαζέηεη ηελ εξγαζία ηνπ θόκβνπ πνπ απέηπρε ζε άιιν θόκβν worker. Aλ νη απνηπρίεο νθείινληαη ζε ιάζε ζηα δεδνκέλα εηζόδνπ, ηόηε ην αληίζηνηρν αξρηθό θνκκάηη δεδνκέλσλ κπνξεί λα αθαηξεζεί. ok? master split j worker redo j worker 38
Backup Δξγαζίεο Υπάξρεη πεξίπησζε έλα κεράλεκα λα έρεη κείλεη πίζσ ζηελ εθηέιεζε ησλ εξγαζηώλ (straggler) ιόγσ π.ρ., θάπνηνπ ηερληθνύ πξνβιήκαηνο, όπσο ραιαζκέλνο δίζθνο. Δμαηηίαο απηνύ ηνπ κεραλήκαηνο, όιε ε επεμεξγαζία θαζπζηεξεί. Όηαλ πνιιέο δηεξγαζίεο εθηεινύληαη παξάιιεια, ε πην αξγή θαζνξίδεη θαη ηνλ ρξόλν νινθιήξσζεο. Λύζε: όηαλ πιεζηάδεη ε ζπλνιηθή εξγαζία πξνο ην ηέινο, ηόηε ν ζπληνληζηήο ρξνλνδξνκνινγεί πνιιαπιέο θνξέο ηηο map/reduce ππνεξγαζίεο πνπ απνκέλνπλ. Με ην ζθεπηηθό όηη ηνπιάρηζηνλ κία ζα νινθιεξσζεί ζηνλ πξνβιεπόκελν ρξόλν. Υπάξρνπλ επηπιένλ κεραληζκνί γηα ηελ δηαγξαθή πεξηηηώλ (δηπιώλ) απνηειεζκάησλ όηαλ όιεο νη ππνεξγαζίεο ηειεηώλνπλ θαλνληθά. Map-Reduce 39
Ταμηλόκεζε απνηειεζκάησλ Γίλεηαη ζε θάζε θόκβν βάζεη θιεηδηνύ. Map-Reduce [k 1, v 1 ] [k 3, v 3 ] [k 1, T 1 ] [k 2, T 2 ] [k 3, T 3 ] [k 4, T 4 ] 40
Παξάδεηγκα: ηαμηλόκεζε εγγξαθώλ Map-Reduce 5 e 3 c 6 f 2 b 1 a 6 f* W1 W2 3 c 5 e 6 f 1 a 2 b 6 f* W5 1 a 3 c 5 e 7 g 9 i 8 h 4 d 9 i 7 g W3 7 g 9 i 4 d 8 h W6 2 b 4 d 6 f 6 f* 8 h Map: extract k, output [k, record] Reduce: Τίποηα! 41
Map-Reduce Πιενλεθηήκαηα Τν κνληέιν Map-Reduce θξύβεη ηηο ηερληθέο ιεπηνκέξεηεο ηεο παξαιιεινπνίεζεο θαη παξέρεη built-in κεραληζκνύο αλάθακςεο από ζθάικαηα. Πνιιά πξνβιήκαηα κπνξνύλ λα εθθξαζηνύλ κε βάζε ην κνληέιν Map-Reduce. Οη εθαξκνγέο θιηκαθώλνληαη ζε ρηιηάδεο κεραλήκαηα. Αιιά παξόκνηα θιηκάθσζε επηηπγραλεηαη θαη κε παξάιιειε επεμεξγαζία εξσηεκάησλ ζε αξρηηεθηνληθέο shared nothing. 42
Μεηνλεθηήκαηα Τν κνληέιν επεμεξγαζίαο κνλαδηθήο εηζόδνπ θαη δύν ζηαδίσλ δελ είλαη επέιηθην ώζηε λα πξνζαξκόδεηαη ζε όια ηα επηζπκεηά ζελάξηα. Απαηηείηαη ε ζπγγξαθή θώδηθα αθόκε θαη γηα ηνπο πην ζπλεζηζκέλνπο ηειεζηέο, όπσο επηινγήο θαη πξνβνιήο. Γήισζε εξγαζηώλ ζε πνιύ ρακειόηεξν επίπεδν ζε ζρέζε κε ηελ SQL. Ο θώδηθαο κέζα ζηηο ζπλαξηήζεηο map θαη reduce δελ είλαη θαλεξόο δπζθνιία ζηελ βειηηζηνπνίεζε. Map-Reduce Η σσέση και η σύγκπιση τος Map-Reduce με κλασική παπάλληλη επεξεπγασία επωτημάτων είναι θέμα πος έσει πποκαλέσει πολλέρ σςζητήσειρ. Θα μαρ απασσολήσει και στη σςνέσεια. 43
Map-Reduce Παξαδείγκαηα - A Καηανεμημένο Grep: map: παξάγεη κία γξακκή αλ ε ζπγθεθξηκέλε γξακκή ηαπηίδεηαη κε ην πξόηππν. reduce: απιή αληηγξαθή ησλ ελδηάκεζσλ απνηειεζκάησλ ζηελ έμνδν. 44
Παξαδείγκαηα - B Καηαμέηρηζη ηης ζστνόηηηας προζπέλαζης μιας διεύθσνζης URL: Map-Reduce Map: επεμεξγαζία ησλ αξρείσλ log θαη παξαγσγή ελδηάκεζσλ απνηειεζκάησλ ηεο κνξθήο <URL, 1> γηα θάζε πξνζπέιαζε. Reduce: πξόζζεζε όισλ ησλ ηηκώλ γηα θάπνην ζπγθεθξηκέλν URL θαη παξαγσγή δεπγώλ <URL, total count>. 45
Map-Reduce Παξαδείγκαηα - Γ Ανηίζηροθος Γράθος Web-Link: Map: παξαγσγή δεπγώλ <target, source> γηα θάζε ζύλδεζκν target πξνο κηα ζειίδα από ηελ ζειίδα source πνπ εθείλε ηε ζηηγκή επεμεξγάδεηαη. Reduce: απιή αληηγξαθή ζηελ έμνδν ησλ απνηειεζκάησλ πνπ έρνπλ ηε κνξθή δεπγώλ <target, list(source)>. 46
Map-Reduce Υιηθό γηα κειέηε MapReduce: Simplified Data Processing on Large Clusters, Jeffrey Dean and Sanjay Ghemawat, http://labs.google.com/papers/mapreduce-osdi04.pdf Hadoop: πινπνίεζε αλνηρηνύ θώδηθα 47
SPARK In brief, Spark is a unified platform for cluster computing, enabling big data management and analytics. It is an Apache Project and its current version is 2.0.1 It is one of the most active projects at Apache. 48
The Spark Ecosystem SQL MLlib Streaming GraphX Hadoop Cassandra Mesos Tachyon... 49
Resilient Distributed Datasets (RDDs) Data manipulation in Spark is heavily based on RDDs. An RDD is an interface composed of: a set of partitions a list of dependencies a function to compute a partition given its parents a partitioner (optional) a set of preferred locations per partition (optional) Simply stated: an RDD instance is a distributed collections of items. In particular: an RDD instance is a read-only collection of items partitioned across a set 50 of machines that can be rebuilt if a partition is destroyed.
Resilient Distributed Datasets (RDDs) // define the spark context val sc = new SparkContext(...) // file is an RDD from HDFS val filerdd = sc.textfile( hdfs://... ) // sosrdd is another RDD based on filerdd val sosrdd = file.filter(_.contains( SOS )) sosrdd.count() // this is an action 51
Resilient Distributed Datasets (RDDs) There are transformations on RDDs that allow us to create new RDDs: map, filter, groupby, reducebykey, partitionby, sortbykey, join, etc Also, there are actions applied to the RDDs: reduce, collect, take, count, saveastextfile, etc Note: computation takes place only in actions and not in transformations! (A form of lazy evaluation) 52
53