1 / 20

Πανεπιστήμιο Ιωαννίνων Ανάκτηση Πληροφορίας

Πανεπιστήμιο Ιωαννίνων Ανάκτηση Πληροφορίας Τμήμα Πληροφορικής Ακαδημαϊκό Έτος 2009-2010 MapReduce : Simplified Data processing on Large Clusters Φώτης Σιταράς ΑΜ 205 Τσουρού Σταυρούλα ΑΜ 190. Περιγραφή Προβλήματος

finian
Download Presentation

Πανεπιστήμιο Ιωαννίνων Ανάκτηση Πληροφορίας

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Πανεπιστήμιο Ιωαννίνων Ανάκτηση Πληροφορίας Τμήμα Πληροφορικής Ακαδημαϊκό Έτος 2009-2010 MapReduce: Simplified Data processing on Large Clusters Φώτης Σιταράς ΑΜ 205 Τσουρού Σταυρούλα ΑΜ 190

  2. Περιγραφή Προβλήματος • Ανάγκη για επεξεργασία μεγάλου όγκου δεδομένων στα συστήματα ανάκτησης πληροφορίας • Λύση: κατανομή της επεξεργασίας των δεδομένων σε πολλές υπολογιστικές μονάδες • MapReduce: κατανεμημένο προγραμματιστικό μοντέλο της google για την επεξεργασία μεγάλου όγκου δεδομένων

  3. Λειτουργία του MapReduce – Περιγραφή Μοντέλου • Δεδομένα εισόδου της μορφής key/value • Συνάρτηση Map: επεξεργασία δεδομένων εισόδου και παραγωγή ενδιάμεσων μορφών δεδομένων • Συνάρτηση Reduce: συγχώνευση ενδιάμεσων δεδομένων με βάση την τιμή του κλειδιού • Δεδομένα εξόδου της μορφής key/value Map (k1, v1) output  list (k2, v2) Reduce (k2, list(v2)) output  list(v2)

  4. Λειτουργία του 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));

  5. Παραδείγματα • Καταμέτρηση προσπελάσεων ενός 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)>

  6. Λειτουργία Συστήματος

  7. Ανοχή Σφαλμάτων • Αποτυχία εργάτη • Αποτυχία map εργάτη – ολοκληρωμένη διαδικασία • Αποτυχία reduce εργάτη – ολοκληρωμένη διαδικασία • Αποτυχία map/reduce εργάτη – μη ολοκληρωμένη διαδικασία • Αποτυχία master • ακύρωση των υπολογιστικών διαδικασιών που εκτελούνται

  8. Χαρακτηριστικά Συστήματος • Δρομολόγηση με βάση την τοπικότητα • τα δεδομένα εισόδου χωρίζονται σε Μ κομμάτια και 3 αντίγραφα από το καθένα αποθηκεύονται σε διαφορετικά μηχανήματα • δρομολόγηση κάθε map διαδικασίας στον κόμβο που έχει τα κατάλληλα δεδομένα • σε περίπτωση αποτυχίας η διαδικασία δρομολογείται σε έναν γειτονικό κόμβο του εργάτη που απέτυχε • Το πλήθος των εργασιών θα πρέπει να είναι μεγαλύτερο από το πλήθος των κόμβων του συστήματος(task granularity) • επιτυγχάνεται καλύτερος καταμερισμός εργασιών (load balancing) • αυξάνει την αποδοτικότητα στην αντιμετώπιση σφαλμάτων • Εφεδρικές εργασίες: δρομολόγηση αντιγράφων των τελευταίων map και reduce διαδικασιών και σε άλλους κόμβους

  9. Επεκτάσεις του μοντέλου • Συνάρτηση Συνδυασμού • ίδια λειτουργία με την reduce αλλά παράγει ενδιάμεσο αρχείο • εκτελείται στο map εργάτη • Αντιμετώπιση εσφαλμένων εγγραφών • επιπλέον κώδικας χειρισμού σφαλμάτων • παράλειψη των εσφαλμένων εγγραφών • Ενημέρωση κατάστασης συστήματος • εξέλιξη υπολογιστικής διαδικασίας • αριθμός ολοκληρωμένων εργασιών • πλήθος αποτυχημένων κόμβων

  10. Πειραματικά Αποτελέσματα

  11. Πλεονεκτήματα • Το μοντέλο είναι εφαρμόσιμο για ένα μεγάλο αριθμό διαφορετικών τύπων δεδομένων • Χαρακτηριστικό του συστήματος είναι η κλιμακωσιμότητα (scalability) • Αποκρύπτει από το χρήστη τις λεπτομέρειες της παραλληλίας • Είναι ανεκτικό στα σφάλματα (fault tolerance) και η αντιμετώπισή τους είναι εύκολη λόγω της ανεξαρτησίας των εργασιών • Κάθε κόμβος αποθηκεύει τοπικά τα δεδομένα κάτι το οποίο αποφορτίζει το δίκτυο

  12. Μειονεκτήματα • Η επιλογή του συστήματος να παραλείπει εγγραφές που δημιουργούν πρόβλημα μπορεί για μικρό σύνολο δεδομένων να οδηγήσει σε λάθος αποτελέσματα • Το προγραμματιστικό μοντέλο είναι πολύ περιοριστικό για τον χρήστη • Το γεγονός ότι στο σύστημα υπάρχει ένας master επηρεάζει την κλιμακωσιμότητά του • Μη βέλτιστος καθορισμός των παραμέτρων του συστήματος (πλήθος κόμβων, μέγεθος μνήμης, )

  13. Προτεινόμενες επεκτάσεις • Εκμετάλλευση ύπαρξης πολλών επεξεργαστών στους κόμβους • μεγαλύτερη υπολογιστική ισχύς • πλήρης εκμετάλλευση των πόρων του συστήματος • λιγότερες αποφάσεις δρομολόγησης • Ύπαρξη περισσοτέρων master κόμβων • “γειτονιές κόμβων” • ένας master κόμβοςανά γειτονιά

  14. Hadoop MapReduce • Είναι μία υλοποίηση του MapReduce μοντέλου σε Java • διεπαφή προς τον προγραμματιστή που αποτελείται από μία σειρά βιβλιοθηκών • Το Hadoop διαθέτει δικό του κατανεμημένο σύστημα αρχείων το HDFS, το οποίο είναι ανεκτικό στα σφάλματα και σχεδιασμένο για χρήση από εμπορικά μηχανήματα • Είναι συμβατό με πολλές πλατφόρμες (Linux, Windows)

  15. Hadoop MapReduce (συνέχεια) • Εγκαταστήσαμε το Hadoop version 0.20.1 σε μηχάνημα με λειτουργικό σύστημα Ubuntu Linux 9.10 και Java 1.6.9 • χρησιμοποιήσαμε έναν κόμβο • Το παράδειγμα που χρησιμοποιήσαμε μετράει τον αριθμό των εμφανίσεων κάθε λέξης σε μία συλλογή κειμένων • το πρόγραμμα περιλαμβάνει μία συνάρτηση map και μία συνάρτηση reduce • το πρόγραμμα δέχεται ως είσοδο τη συλλογή εγγράφων • το πρόγραμμα παράγει ως έξοδο ζευγάρια της μορφής: <λέξη, πλήθος εμφανίσεων λέξης>

  16. Κώδικας 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) {} }

  17. Κώδικας 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)); }

  18. Αποτελέσματα Εκτέλεσης • Συνήθως το πλήθος των εργατών map (Μ) εξαρτάται από το μέγεθος της εισόδου • το Hadoop στη δική μας εκτέλεση επέλεξε το 3 • Το πλήθος των εργατών reduce (R) εξαρτάται από το πλήθος των κόμβων του συστήματος • το Hadoop στη δική μας εκτέλεση επέλεξε το 1, καθώς το σύστημά μας αποτελείται από έναν μόνο κόμβο

  19. Αποτελέσματα Εκτέλεσης (συνέχεια) • Από τη στιγμή που έχουμε στο σύστημά μας έναν 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

  20. Ερώτηση Για ποιο λόγο σε περίπτωση αποτυχίας ενός εργάτη που έχει ολοκληρώσει μία map διαδικασία, η συγκεκριμένη εργασία επαναδρομολογείται; Και γιατί δε συμβαίνει αυτό στην περίπτωση που ο εργάτης έχει ολοκληρώσει μία reduce διαδικασία;

More Related