200 likes | 341 Views
Πανεπιστήμιο Ιωαννίνων Ανάκτηση Πληροφορίας Τμήμα Πληροφορικής Ακαδημαϊκό Έτος 2009-2010 MapReduce : Simplified Data processing on Large Clusters Φώτης Σιταράς ΑΜ 205 Τσουρού Σταυρούλα ΑΜ 190. Περιγραφή Προβλήματος
E N D
Πανεπιστήμιο Ιωαννίνων Ανάκτηση Πληροφορίας Τμήμα Πληροφορικής Ακαδημαϊκό Έτος 2009-2010 MapReduce: Simplified Data processing on Large Clusters Φώτης Σιταράς ΑΜ 205 Τσουρού Σταυρούλα ΑΜ 190
Περιγραφή Προβλήματος • Ανάγκη για επεξεργασία μεγάλου όγκου δεδομένων στα συστήματα ανάκτησης πληροφορίας • Λύση: κατανομή της επεξεργασίας των δεδομένων σε πολλές υπολογιστικές μονάδες • MapReduce: κατανεμημένο προγραμματιστικό μοντέλο της google για την επεξεργασία μεγάλου όγκου δεδομένων
Λειτουργία του MapReduce – Περιγραφή Μοντέλου • Δεδομένα εισόδου της μορφής key/value • Συνάρτηση Map: επεξεργασία δεδομένων εισόδου και παραγωγή ενδιάμεσων μορφών δεδομένων • Συνάρτηση Reduce: συγχώνευση ενδιάμεσων δεδομένων με βάση την τιμή του κλειδιού • Δεδομένα εξόδου της μορφής key/value Map (k1, v1) output list (k2, v2) Reduce (k2, list(v2)) output list(v2)
Λειτουργία του MapReduce – Παράδειγμα Υλοποίησης map(String key, String value): // key: document name // value: document contents for each word w in value: EmitIntermediate(w, "1"); reduce(String key, Iterator values): // key: a word // values: a list of counts int result = 0; for each v in values: result += ParseInt(v); Emit(AsString(result));
Παραδείγματα • Καταμέτρηση προσπελάσεων ενός URL input: <URL, 1> output: <URL, total count> • Reverse Web-Link Graph input: <target, source> output: <target, list(source)> • Ανεστραμμένα ευρετήρια input: <word, document ID> output: <word, list(document ID)>
Ανοχή Σφαλμάτων • Αποτυχία εργάτη • Αποτυχία map εργάτη – ολοκληρωμένη διαδικασία • Αποτυχία reduce εργάτη – ολοκληρωμένη διαδικασία • Αποτυχία map/reduce εργάτη – μη ολοκληρωμένη διαδικασία • Αποτυχία master • ακύρωση των υπολογιστικών διαδικασιών που εκτελούνται
Χαρακτηριστικά Συστήματος • Δρομολόγηση με βάση την τοπικότητα • τα δεδομένα εισόδου χωρίζονται σε Μ κομμάτια και 3 αντίγραφα από το καθένα αποθηκεύονται σε διαφορετικά μηχανήματα • δρομολόγηση κάθε map διαδικασίας στον κόμβο που έχει τα κατάλληλα δεδομένα • σε περίπτωση αποτυχίας η διαδικασία δρομολογείται σε έναν γειτονικό κόμβο του εργάτη που απέτυχε • Το πλήθος των εργασιών θα πρέπει να είναι μεγαλύτερο από το πλήθος των κόμβων του συστήματος(task granularity) • επιτυγχάνεται καλύτερος καταμερισμός εργασιών (load balancing) • αυξάνει την αποδοτικότητα στην αντιμετώπιση σφαλμάτων • Εφεδρικές εργασίες: δρομολόγηση αντιγράφων των τελευταίων map και reduce διαδικασιών και σε άλλους κόμβους
Επεκτάσεις του μοντέλου • Συνάρτηση Συνδυασμού • ίδια λειτουργία με την reduce αλλά παράγει ενδιάμεσο αρχείο • εκτελείται στο map εργάτη • Αντιμετώπιση εσφαλμένων εγγραφών • επιπλέον κώδικας χειρισμού σφαλμάτων • παράλειψη των εσφαλμένων εγγραφών • Ενημέρωση κατάστασης συστήματος • εξέλιξη υπολογιστικής διαδικασίας • αριθμός ολοκληρωμένων εργασιών • πλήθος αποτυχημένων κόμβων
Πλεονεκτήματα • Το μοντέλο είναι εφαρμόσιμο για ένα μεγάλο αριθμό διαφορετικών τύπων δεδομένων • Χαρακτηριστικό του συστήματος είναι η κλιμακωσιμότητα (scalability) • Αποκρύπτει από το χρήστη τις λεπτομέρειες της παραλληλίας • Είναι ανεκτικό στα σφάλματα (fault tolerance) και η αντιμετώπισή τους είναι εύκολη λόγω της ανεξαρτησίας των εργασιών • Κάθε κόμβος αποθηκεύει τοπικά τα δεδομένα κάτι το οποίο αποφορτίζει το δίκτυο
Μειονεκτήματα • Η επιλογή του συστήματος να παραλείπει εγγραφές που δημιουργούν πρόβλημα μπορεί για μικρό σύνολο δεδομένων να οδηγήσει σε λάθος αποτελέσματα • Το προγραμματιστικό μοντέλο είναι πολύ περιοριστικό για τον χρήστη • Το γεγονός ότι στο σύστημα υπάρχει ένας master επηρεάζει την κλιμακωσιμότητά του • Μη βέλτιστος καθορισμός των παραμέτρων του συστήματος (πλήθος κόμβων, μέγεθος μνήμης, )
Προτεινόμενες επεκτάσεις • Εκμετάλλευση ύπαρξης πολλών επεξεργαστών στους κόμβους • μεγαλύτερη υπολογιστική ισχύς • πλήρης εκμετάλλευση των πόρων του συστήματος • λιγότερες αποφάσεις δρομολόγησης • Ύπαρξη περισσοτέρων master κόμβων • “γειτονιές κόμβων” • ένας master κόμβοςανά γειτονιά
Hadoop MapReduce • Είναι μία υλοποίηση του MapReduce μοντέλου σε Java • διεπαφή προς τον προγραμματιστή που αποτελείται από μία σειρά βιβλιοθηκών • Το Hadoop διαθέτει δικό του κατανεμημένο σύστημα αρχείων το HDFS, το οποίο είναι ανεκτικό στα σφάλματα και σχεδιασμένο για χρήση από εμπορικά μηχανήματα • Είναι συμβατό με πολλές πλατφόρμες (Linux, Windows)
Hadoop MapReduce (συνέχεια) • Εγκαταστήσαμε το Hadoop version 0.20.1 σε μηχάνημα με λειτουργικό σύστημα Ubuntu Linux 9.10 και Java 1.6.9 • χρησιμοποιήσαμε έναν κόμβο • Το παράδειγμα που χρησιμοποιήσαμε μετράει τον αριθμό των εμφανίσεων κάθε λέξης σε μία συλλογή κειμένων • το πρόγραμμα περιλαμβάνει μία συνάρτηση map και μία συνάρτηση reduce • το πρόγραμμα δέχεται ως είσοδο τη συλλογή εγγράφων • το πρόγραμμα παράγει ως έξοδο ζευγάρια της μορφής: <λέξη, πλήθος εμφανίσεων λέξης>
Κώδικας WordCount.java package org.myorg; import java.io.IOException; import java.util.*; import org.apache.hadoop.fs.Path; import org.apache.hadoop.conf.*; import org.apache.hadoop.io.*; import org.apache.hadoop.mapred.*; import org.apache.hadoop.util.*; public class WordCount { public static class Map { public void map(key, value){} } public static class Reduce { public void reduce(key, values) {} } public static void main(String[] args) {} }
Κώδικας WordCount.java (συνέχεια) public void map(key, value) { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); } } public void reduce(key, values) { int sum = 0; while (values.hasNext()) { sum += values.next().get(); } output.collect(key, new IntWritable(sum)); }
Αποτελέσματα Εκτέλεσης • Συνήθως το πλήθος των εργατών map (Μ) εξαρτάται από το μέγεθος της εισόδου • το Hadoop στη δική μας εκτέλεση επέλεξε το 3 • Το πλήθος των εργατών reduce (R) εξαρτάται από το πλήθος των κόμβων του συστήματος • το Hadoop στη δική μας εκτέλεση επέλεξε το 1, καθώς το σύστημά μας αποτελείται από έναν μόνο κόμβο
Αποτελέσματα Εκτέλεσης (συνέχεια) • Από τη στιγμή που έχουμε στο σύστημά μας έναν reduce εργάτη, παρήχθει ένα αρχείο εξόδου (part - 0000)και κάποιες ενδεικτικές εγγραφές του αρχείου είναι: "(Lo)cra" 1 "1490 1 "1498," 1 "35" 1 "40," 1 "A 2 "AS-IS". 2 "A_ 1 "Absoluti 1 "Alack! 1
Ερώτηση Για ποιο λόγο σε περίπτωση αποτυχίας ενός εργάτη που έχει ολοκληρώσει μία map διαδικασία, η συγκεκριμένη εργασία επαναδρομολογείται; Και γιατί δε συμβαίνει αυτό στην περίπτωση που ο εργάτης έχει ολοκληρώσει μία reduce διαδικασία;