Πανεπιστήμιο Ιωαννίνων Ανάκτηση Πληροφορίας Τμήμα Πληροφορικής Ακαδημαϊκό Έτος 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: output: Reverse Web-Link Graph input: output: Ανεστραμμένα ευρετήρια input: output:
Λειτουργία Συστήματος
Ανοχή Σφαλμάτων Αποτυχία εργάτη Αποτυχία map εργάτη – ολοκληρωμένη διαδικασία Αποτυχία reduce εργάτη – ολοκληρωμένη διαδικασία Αποτυχία map/reduce εργάτη – μη ολοκληρωμένη διαδικασία Αποτυχία master ακύρωση των υπολογιστικών διαδικασιών που εκτελούνται
Χαρακτηριστικά Συστήματος Δρομολόγηση με βάση την τοπικότητα τα δεδομένα εισόδου χωρίζονται σε Μ κομμάτια και 3 αντίγραφα από το καθένα αποθηκεύονται σε διαφορετικά μηχανήματα δρομολόγηση κάθε map διαδικασίας στον κόμβο που έχει τα κατάλληλα δεδομένα σε περίπτωση αποτυχίας η διαδικασία δρομολογείται σε έναν γειτονικό κόμβο του εργάτη που απέτυχε Το πλήθος των εργασιών θα πρέπει να είναι μεγαλύτερο από το πλήθος των κόμβων του συστήματος (task granularity) επιτυγχάνεται καλύτερος καταμερισμός εργασιών (load balancing) αυξάνει την αποδοτικότητα στην αντιμετώπιση σφαλμάτων Εφεδρικές εργασίες: δρομολόγηση αντιγράφων των τελευταίων map και reduce διαδικασιών και σε άλλους κόμβους
Επεκτάσεις του μοντέλου Συνάρτηση Συνδυασμού ίδια λειτουργία με την reduce αλλά παράγει ενδιάμεσο αρχείο εκτελείται στο map εργάτη Αντιμετώπιση εσφαλμένων εγγραφών επιπλέον κώδικας χειρισμού σφαλμάτων παράλειψη των εσφαλμένων εγγραφών Ενημέρωση κατάστασης συστήματος εξέλιξη υπολογιστικής διαδικασίας αριθμός ολοκληρωμένων εργασιών πλήθος αποτυχημένων κόμβων
Πειραματικά Αποτελέσματα
Πλεονεκτήματα 1.Το μοντέλο είναι εφαρμόσιμο για ένα μεγάλο αριθμό διαφορετικών τύπων δεδομένων 2.Χαρακτηριστικό του συστήματος είναι η κλιμακωσιμότητα (scalability) 3.Αποκρύπτει από το χρήστη τις λεπτομέρειες της παραλληλίας 4.Είναι ανεκτικό στα σφάλματα (fault tolerance) και η αντιμετώπισή τους είναι εύκολη λόγω της ανεξαρτησίας των εργασιών 5.Κάθε κόμβος αποθηκεύει τοπικά τα δεδομένα κάτι το οποίο αποφορτίζει το δίκτυο
Μειονεκτήματα 1.Η επιλογή του συστήματος να παραλείπει εγγραφές που δημιουργούν πρόβλημα μπορεί για μικρό σύνολο δεδομένων να οδηγήσει σε λάθος αποτελέσματα 2.Το προγραμματιστικό μοντέλο είναι πολύ περιοριστικό για τον χρήστη 3.Το γεγονός ότι στο σύστημα υπάρχει ένας master επηρεάζει την κλιμακωσιμότητά του 4.Μη βέλτιστος καθορισμός των παραμέτρων του συστήματος (πλήθος κόμβων, μέγεθος μνήμης, )
Προτεινόμενες επεκτάσεις Εκμετάλλευση ύπαρξης πολλών επεξεργαστών στους κόμβους μεγαλύτερη υπολογιστική ισχύς πλήρης εκμετάλλευση των πόρων του συστήματος λιγότερες αποφάσεις δρομολόγησης Ύπαρξη περισσοτέρων master κόμβων “γειτονιές κόμβων” ένας master κόμβος ανά γειτονιά
Hadoop MapReduce Είναι μία υλοποίηση του MapReduce μοντέλου σε Java διεπαφή προς τον προγραμματιστή που αποτελείται από μία σειρά βιβλιοθηκών Το Hadoop διαθέτει δικό του κατανεμημένο σύστημα αρχείων το HDFS, το οποίο είναι ανεκτικό στα σφάλματα και σχεδιασμένο για χρήση από εμπορικά μηχανήματα Είναι συμβατό με πολλές πλατφόρμες (Linux, Windows)
Hadoop MapReduce (συνέχεια) Εγκαταστήσαμε το Hadoop version σε μηχάνημα με λειτουργικό σύστημα Ubuntu Linux 9.10 και Java χρησιμοποιήσαμε έναν κόμβο Το παράδειγμα που χρησιμοποιήσαμε μετράει τον αριθμό των εμφανίσεων κάθε λέξης σε μία συλλογή κειμένων το πρόγραμμα περιλαμβάνει μία συνάρτηση 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 ) και κάποιες ενδεικτικές εγγραφές του αρχείου είναι: "(Lo)cra" 1 " "1498," 1 "35" 1 "40," 1 "A 2 "AS-IS". 2 "A_ 1 "Absoluti 1 "Alack! 1
Ερώτηση Για ποιο λόγο σε περίπτωση αποτυχίας ενός εργάτη που έχει ολοκληρώσει μία map διαδικασία, η συγκεκριμένη εργασία επαναδρομολογείται; Και γιατί δε συμβαίνει αυτό στην περίπτωση που ο εργάτης έχει ολοκληρώσει μία reduce διαδικασία;