Επεξεργασία Ερωτημάτων Κορυφογραμμής σε Περιβάλλον Map/Reduce

Σχετικά έγγραφα
ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ Εαρινό Εξάμηνο

ΜΕΛΕΤΗ ΣΧΕΔΙΑΣΗ ΕΦΑΡΜΟΓΗΣ ΣΕ ΥΠΟΛΟΓΙΣΤΙΚΟ ΝΕΦΟΣ (CLOUD COMPUTING) ΜΕ ΕΜΦΑΣΗ ΣΤΗΝ ΚΑΤΑΣΚΕΥΗ ΔΕΝΤΡΩΝ.

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες)

Κεφάλαιο 4: Λογισμικό Συστήματος

Μελέτη και Υλοποίηση Αλγορίθμων για Βιολογικές Εφαρμογές σε MapReduce Περιβάλλον

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Πληροφορική 2. Αλγόριθμοι

Κατακερματισμός (Hashing)

ΑΝΑΘΕΣΗ ΘΕΜΑΤΩΝ ΣΕΜΙΝΑΡΙΟΥ

Δομές Δεδομένων & Αλγόριθμοι

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

ΗΥ562 Προχωρημένα Θέματα Βάσεων Δεδομένων Efficient Query Evaluation over Temporally Correlated Probabilistic Streams

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Δομές Δεδομένων και Αλγόριθμοι

Οι δυναμικές δομές δεδομένων στην ΑΕΠΠ

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

Διάλεξη 23: Τεχνικές Κατακερματισμού II (Hashing)

MapReduce Εισαγωγή. MapReduce. ηµήτρης Λεβεντέας

Ψευδοκώδικας. November 7, 2011

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου

EPL660: Information Retrieval and Search Engines Lab 5

2.1 Αντικειµενοστρεφής προγραµµατισµός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ «ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ»

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 7 η. Βασίλης Στεφανής

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Διαχρονικές δομές δεδομένων

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ

Αύξηση πελατών. Λίγα λόγια για Επιτυχημένες προωθήσεις

Κατανεμημένα Συστήματα

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΤΕΛΙΚΟ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ

Ένα αναλογικό σήμα περιέχει άπειρες πιθανές τιμές. Για παράδειγμα ένας απλός ήχος αν τον βλέπαμε σε ένα παλμογράφο θα έμοιαζε με το παρακάτω:

Πληροφοριακά Συστήματα Διοίκησης

Π Τ Υ Χ Ι Α Κ Η Ε Ρ Γ Α Σ Ι Α

Διαδικασιακός Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Πληροφορική 2. Δομές δεδομένων και αρχείων

Μαζικός Παραλληλισμός λ με Map - Reduce. Μοντέλο Θέματα υλοποίησης Παραδείγματα διαχείρισης δεδομένων

ΠΕΡΙΕΧΟΜΕΝΑ. Μονοδιάστατοι πίνακες Πότε πρέπει να χρησιμοποιούνται πίνακες Πολυδιάστατοι πίνακες Τυπικές επεξεργασίες πινάκων

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

Αυτόνομοι Πράκτορες. ΝΑΟ Μουσικός

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

Ακαδημαϊκό Έτος , Χειμερινό Εξάμηνο Μάθημα: Εργαστήριο «Πληροφορική Υγείας» ΕΙΣΑΓΩΓΗ ΣΤΗΝ ACCESS

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Σενάριο Χρήσης myschool

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Πληροφοριακά Συστήματα Διοίκησης

Μάθημα 3: Αρχιτεκτονική Υπολογιστών

Λογισµικό (Software SW) Γλώσσες

Εισαγωγή στην πληροφορική

Διάλεξη 18: B-Δένδρα

Πατώντας την επιλογή αυτή, ανοίγει ένα παράθυρο που έχει την ίδια μορφή με αυτό που εμφανίζεται όταν δημιουργούμε μία μεταβλητή.

Κλάσεις και Αντικείµενα

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

Ενδεικτική πολυ-εργασία 1 - εφαρμογή στην υπολογιστική όραση

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Κεφάλαιο 1 Ε Π Α Ν Α Λ Η Ψ Η

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

4.1 Άνοιγμα υπάρχοντος βιβλίου εργασίας

Διάλεξη 14: Δέντρα IV - B-Δένδρα

Εισαγωγή στην Αριθμητική Ανάλυση

- Εισαγωγή - Επίπεδα μνήμης - Ολοκληρωμένα κυκλώματα μνήμης - Συσκευασίες μνήμης προσωπικών υπολογιστών

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

Αλγόριθμοι και Πολυπλοκότητα

Κεφάλαιο 10 ο Υποπρογράµµατα

ΚΕΦΑΛΑΙΟ 1: Τα είδη των Δικτύων Εισαγωγή

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Δομές Δεδομένων. Τι είναι η δομή δεδομένων; Έστω η ακολουθία αριθμών: 8, 10,17,19,22,5,12 Λογικό Επίπεδο. Φυσικό Επίπεδο RAM. Ταξινομημένος.

Περί της Ταξινόμησης των Ειδών

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πεδί α

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

Ταξινόμηση: Εισαγωγικά. Ταξινόμηση (Sor ng) Αλγόριθμοι Απλής Ταξινόμησης. Βασικά Βήματα των Αλγορίθμων

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Εργασία «Διαχείριση Δικτύων» Ιούνιος 2014, Θεσ/νίκη

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Τελικό επαναληπτικό διαγώνισμα Επιμέλεια: Δρεμούσης Παντελής

ΑΕΠΠ Ερωτήσεις θεωρίας

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

ΕΘΝΙΚΟ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

ΘΕΜΑΤΑ ΤΕΛΙΚΗΣ ΦΑΣΗΣ

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

ΕΝΤΟΛΕΣ. 7.1 Εισαγωγικό μέρος με επεξήγηση των Εντολών : Επεξήγηση των εντολών που θα

Διδάσκων: Παναγιώτης Ανδρέου

Διαχείριση Έργων- Στόχων

Transcript:

Επεξεργασία Ερωτημάτων Κορυφογραμμής σε Περιβάλλον Map/Reduce ΓΚΟΥΤΑ ΒΑΣΙΛΙΚΗ ΑΕΜ: 424 Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης Τμήμα Πληροφορικής Μεταπτυχιακό Πρόγραμμα Σπουδών Επιβλέπων Καθηγητής: Παπαδόπουλος Απόστολος Φεβρουάριος 2013

Περιεχόμενα 1 Εισαγωγή 5 2 Kατανεμημένο Περιβάλλον Προγραμματισμού MapReduce 6 2.1 Λειτουργία MapReduce............................................8 2.2 Παράδειγμα Χρήσης στο Hadoop Word Count........................16 2.3 Τεχνική Secondary Sorting......................................... 19 3 Αλγόριθμοι Εύρεσης Skyline 22 3.1 Block Nested Loop............................................... 25 3.2 Sort Filter Skyline................................................27 3.3 Divide and Conquer...............................................28 3.4 Branch and Bound............................................... 29 4 Skylines σε Περιβάλλον MapReduce 31 5 Νέοι Αλγόριθμοι 37 5.1 Αλγόριθμος Skyline-Baseline...................................... 37 5.2 Αλγόριθμος Skyline-Fifo.......................................... 38 5.3 Αλγόριθμος Skyline-Volume.......................................40 5.4 Αλγόριθμος Skyline-Sampling-Adapt-Fifo............................42 5.5 Αλγόριθμος Skyline-Sampling-Adapt-Volume......................... 44 5.6 Αλγόριθμος Skyline-Sampling-Baseline.............................. 44 5.7 Αλγόριθμος Skyline-Sampling-Fifo..................................44 5.8 Παραδείγματα Εκτέλεσης..........................................48 Αναφορές 57

Ενότητα 1 Εισαγωγή Η σημασία της επεξεργασίας μεγάλου όγκου δεδομένων, τόσο στην καθημερινότητά μας, όσο και σε επίπεδο επιστημονικής ενασχόλησης είναι αναμφισβήτητα μεγάλη. Με την εξέλιξη του διαδικτύου η συλλογή πληροφορίας έγινε σταδιακά όλο και πιο εύκολη ενώ η αποδοτική αξιοποίησή της οδήγησε σε μεγαλύτερη ζήτηση για κατάλληλα εργαλεία. Η απαίτηση για γρήγορη απόκριση σε ποικίλες μορφές ερωτημάτων οδήγησε στη βελτίωση των μηχανών και μεθόδων αναζήτησης αλλά η ανάγκη για κάτι διαρκώς καλύτερο παραμένει. Με τον ολοένα και αυξανόμενο, λοιπόν, ρυθμό επεξεργασίας οι μεμονωμένες μονάδες αποδείχτηκαν ανεπαρκείς ενώ αντίθετα σημειώθηκε σημαντική πρόοδος στην παράλληλη και κατανεμημένη επεξεργασία. Ένα αποτέλεσμα αυτής της προσπάθειας είναι η τεχνολογία MapReduce και ένας σημαντικός τύπος ερωτημάτων που χρειάζεται να ικανοποιηθούν για πολλούς τύπους προβλημάτων είναι τα ερωτήματα κορυφογραμμής ή αλλιώς ερωτήματα Skyline. Έτσι σε αυτή τη διπλωματική εργασία αναλάβαμε να ερευνήσουμε αλγόριθμους οι οποίοι αξιοποιούν το περιβάλλον MapReduce για τον αποδοτικότερο και ταχύτερο υπολογισμό των Skylines ενός συνόλου δεδομένων.

Ενότητα 2 Κατανεμημένο Περιβάλλον Προγραμματισμού MapReduce Σήμερα η ραγδαία αύξηση των διαθέσιμων δεδομένων κάθε είδους και η ανάγκη για τη συλλογή και την εκμετάλλευση πληθώρας από αυτών προκάλεσε σταδιακά όλο και περισσότερες δυσκολίες στη διατήρηση και την επεξεργασία τους. Μεγάλες εταιρίες όπως η Google [7], η Yahoo [8], η Amazon [9] και η Microsoft [10] χρειάστηκαν να επεξεργαστούν terabytes και petabytes δεδομένων ώστε να μπορούν να ξεχωρίσουν ποιες ιστοσελίδες είναι οι πιο δημοφιλής, ποια βιβλία είναι τελευταίας κυκλοφορίας και ποιες διαφημίσεις θα μπορούσαν να ελκύσουν περισσότερο τους καταναλωτές. Ταυτόχρονα με την αύξηση των δεδομένων αναπτύχθηκε και η τεχνολογία για την διατήρησή τους. Ένας τυπικός δίσκος το 1990 μπορούσε να αποθηκεύσει 1,370 MB δεδομένων. Σήμερα ένα terabyte θεωρείται κάτι δεδομένο. Όμως παρότι η πληροφορία πλέον μπορεί εύκολα να αποθηκευτεί, η ανάγνωσή της δεν έγινε επαρκώς γρηγορότερη με την πάροδο των ετών. Ο τυπικός δίσκος του 1990 μπορούσε να διαβαστεί με μία μέση ταχύτητα 4.4 MB/s, οπότε ήταν εύκολο κανείς να διαπεράσει όλα τα δεδομένα του σε περίπου πέντε λεπτά. Αντίστοιχα, ο τυπικός δίσκος σήμερα, έχει μία μέση ταχύτητα ανάγνωσης 100 MB/s και άρα για να διαβαστούν όλα του τα δεδομένα θα χρειαζόταν περισσότερο από δυόμισι ώρες [11]. Έτσι η πληροφορία όλο και περισσότερο αυξανόταν ενώ αντίθετα η πρόσβαση σε αυτήν και η επεξεργασία της δεν ακολούθησαν τους ίδιους ρυθμούς. Αυτό είχε σαν συνέπεια τα υπάρχοντα εργαλεία των προηγούμενων ετών να γίνονται σιγά σιγά ανεπαρκή για αυτή τη πληθώρα δεδομένων. Η ανάγκη για κάτι επαρκές οδήγησε σε ένα νέο σκεπτικό. Έτσι η Google ήταν η πρώτη που δημοσίευσε το MapReduce [12], ένα μοντέλο που είχε χρησιμοποιήσει για να κλιμακώσει τις μεγάλες ανάγκες της για επεξεργασία. Πρόκειται για ένα προγραμματιστικό μοντέλο το οποίο βασισμένο στη κατανεμημένη επεξεργασία μπορούσε να δώσει την δυνατότητα χειρισμού πληθώρας δεδομένων σε οποιονδήποτε διέθετε απλώς αρκετούς υπολογιστές. Το μοντέλο αυτό της Google κίνησε το ενδιαφέρον πολλών. Αυτό διότι το πρόβλημα της επεξεργασίας όλων αυτών των δεδομένων το αντιμετώπιζαν και άλ-

λες πολλές εταιρίες. Αντιθέτως όμως με την Google δεν είχαν όλες την δυνατότητα να δημιουργήσουν κάτι δικό τους, αντίστοιχο του MapReduce. Την ευκαιρία αυτή εκμεταλλεύτηκε ο Doug Cutting [1] δημιουργώντας μία έκδοση ανοικτού λογισμικού[2] για το MapReduce η οποία ονομάστηκε Hadoop [3]. Το σύστημα αυτό ήταν τόσο αναγκαίο που δέχτηκε σύντομα μεγάλη υποστήριξη τόσο από την Yahoo όσο και από άλλους. Έτσι πλέον το Hadoop έγινε ένα ιδιαίτερα σημαντικό και χρήσιμο εργαλείο. Πρόκειται ουσιαστικά για ένα κατανεμημένο περιβάλλον που δίνει τη δυνατότητα να δημιουργηθούν εφαρμογές για επεξεργασία μεγάλης ποσότητας δεδομένων. Η αξία του έγκειται στο ότι επιδιώκει την μεταφορά κώδικα ανάμεσα στα μηχανήματα που συμμετέχουν, παρά τη μεταφορά περιεχομένου. Επιπλέον χρησιμοποιώντας τεχνικές πλεονασμού, μπορεί να ανακάμψει όταν ένας κόμβος του αποβεί προβληματικός. Τέλος, έχει ως βασικό στόχο να αποκρύπτει από τον χρήστη προγραμματιστή έγνοιες που αφορούν τη δικτύωση, ιδιαιτερότητες των κόμβων, το ποιο μηχάνημα θα εκτελέσει ποιες διεργασίες και το πως θα μοιραστούν τα δεδομένα. Αντιθέτως επιλύει αυτά τα προβλήματα επιτρέποντάς του να εστιάσει μόνο στο πως θα επεξεργαστεί τα δεδομένα και τι θα λάβει ως αποτέλεσμα από αυτά. Αυτό το σημαντικό framework αποτελεί σήμερα τον πυρήνα της αρχιτεκτονικής για πολλές εταιρίες web όπως η Yahoo, το Facebook [4], το LinkedIn [5], το Twitter [6] αλλά και πολλές άλλες που εστιάζουν σε ποικίλα αντικείμενα. Ένα τέτοιο παράδειγμα αποτελεί το Last.fm [13]. Δημιουργήθηκε το 2002 και πρόκειται για έναν online ραδιοφωνικό σταθμό καθώς και μία ιστοσελίδα που υποστηρίζει μία ευρύτερη μουσική κοινότητα. Υπάρχουν περισσότερα από 25 εκατομμύρια χρηστών που το χρησιμοποιούν σε μηνιαία βάση [11] δημιουργώντας τεράστια αποθέματα δεδομένων τα οποία χρειάζονται επεξεργασία. Ένα τέτοιο παράδειγμα χρήσης είναι η αναμετάδοση της πληροφορίας των τραγουδιών τα οποία παίζονται. Αυτή η πληροφορία πρέπει να επεξεργαστεί και να αποθηκευτεί με τέτοιο τρόπο ώστε οι χρήστες να έχουν άμεσα πρόσβαση σε αυτήν. Μέσα από αυτήν προκύπτουν επιπλέον δεδομένα όπως ποια είναι τα γενικότερα γούστα των χρηστών, ποιοι χρήστες ταιριάζουν με ποιους άλλους, ποιοι καλλιτέχνες μοιάζουν με ποιους άλλους αλλά και ποια μουσικά κομμάτια φαίνονται παρεμφερή με άλλα. Έτσι λίγα χρόνια αφότου το Last.fm δημιουργήθηκε, λόγω της όλο και αυξανόμενης πληθώρας χρηστών και δεδομένων αντιμετώπισε ένα σημαντικό πρόβλημα επεξεργασίας. Τον ίδιο καιρό όμως μία διαθέσιμη έκδοση του Hadoop ήδη κυκλοφορούσε και το Last.fm έγινε το πρώτο που την χρησιμοποίησε στις αρχές του 2006 [11]. Το Hadoop λοιπόν έγινε σημαντικό και σε πολλά ζητήματα αναντικατάστατο. Ένας ακόμα λόγος για αυτό ήταν ότι μπορούσε να λύσει προβλήματα που τα ως τότε συστήματα διαχείρισης βάσεων δεδομένων, που χρησιμοποιούσαν πολλούς δίσκους, αδυνατούσαν. Στο σχήμα 2.2 φαίνονται οι βασικές διαφορές ανάμεσα στις δύο τεχνολογίες [11]. Καθώς η χρήση του Hadoop έγινε όλο και πιο ευρεία εμφανίστηκαν νέα projects τα οποία βασίζονταν στο Hadoop για να προσφέρουν είτε συμπληρωματικές είτε νέες άλλου τύπου δυνατότητες. Μερικά από αυτά είναι: Avro [14], Pig [15], Hive [16], HBase [17], ZooKeeper [18], Sqoop [19]. Στη συνέχεια, στην ενότητα αυτή θα περιγράψουμε βασικές και σημαντικές έννοιες της τεχνικής MapReduce και του περιββάλοντος του Hadoop ενώ ακό-

μα, θα περιγράψουμε λεπτομερώς τη τεχνική Secondary Sorting καθώς αυτή χρησιμοποιείται σε όλους τους αλγορίθμους που υλοποιήσαμε. Σχήμα 2.1: Παράδειγμα χρήσης του Hadoop στον Last.fm. Σχήμα 2.2: Διαφορές του MapReduce και των συστημάτων διαχείρισης βάσεων δεδομένων. 2.1 Λειτουργία MapReduce Η αποδοτική λειτουργία του MapReduce που το κατέστησε εν τέλη τόσο δημοφιλές, κρύβεται πίσω από τα δύο βασικότερα τμήματα από τα οποία αποτελείται. Αυτά είναι η φάση Map και η φάση Reduce. Οι δύο αυτές φάσεις υλοποιούνται βάση δύο συναρτήσεων που περιέχουν το κώδικα λειτουργίας τους. Καθώς η βάση του σκεπτικού είναι η κατανεμημένη λειτουργία, όταν εκτελείται η φάση Map η συνάρτηση της τρέχει παράλληλα και ανεξάρτητα από πολλά μηχανήματα, ή περισσότερες φορές από το ίδιο το μηχάνημα όταν αυτό υποστηρίζεται. Κάθε τέτοια εκτέλεση που ουσιαστικά αντιστοιχεί σε μια διαφορετική μονάδα επεξεργασίας αποκαλείται Mapper και αντίστοιχα στη φάση Reduce που λειτουργεί με τον

ίδιο τρόπο, ονομάζεται Reducer. Όταν ένα πρόγραμμα MapReduce ξεκινά τη λειτουργία του, το περιβάλλον που το υλοποιεί, στη περίπτωσή μας το Hadoop, αναλαμβάνει να τροφοδοτεί τους Mappers με τα δεδομένα προς επεξεργασία. Όταν όλη η λειτουργία ολοκληρώνεται, η φάση Reduce εξάγει τα τελικά αποτελέσματα. Θα μπορούσαμε σε γενικές γραμμές να πούμε πως η φάση Map είναι υπεύθυνη για να φιλτράρει και να μετατρέπει την είσοδο ενώ η φάση reduce για να συγκεντρώνει μέσα από πράξεις το τελικό αποτέλεσμα [12]. Εκτός από τη φάσεις αυτές, υπάρχουν και δύο ακόμα πολύ καίρια τμήματα για την ολοκληρωμένη λειτουργία του MapReduce. Αυτά είναι το Partitioning και το Shuffling. Δεν πρόκειται για αυτόνομες ανεξάρτητες φάσεις όσο για υποβοηθητικές λειτουργίες που δρομολογούν σωστά τα δεδομένα από την αρχική φάση Map στη τελική φάση Reduce. Εν αντιθέσει με τις φάσεις Map και Reduce αυτά τα τμήματα δεν είναι απαραίτητο ο χρήστης/προγραμματιστής να τα συντάξει, διότι το Hadoop παρέχει ήδη ετοιμα πακέτα που καλύπτουν πληθώρα περιπτώσεων. Μπορεί όμως κανείς να τροποποιήσει υπάρχοντα πακέτα ή να δημιουργήσει νέα που θα καλύπτουν απόλυτα τις ανάγκες του εφόσον αυτό είναι επιθυμητό. Προκειμένου όλα τα τμήματα που αναφέρθηκαν παραπάνω να συνεργάζονται αποδοτικά μεταξύ τους χρειάζονται ένα κοινό καλά ορισμένο πλαίσιο επικοινωνίας και το πρώτο συστατικό στοιχείο αυτού είναι η κωδικοποίηση των δεδομένων καθώς αυτά ρέουν στο MapReduce πρόγραμμα. Έτσι δημιουργήθηκαν τα ζευγάρια από key και value τα οποία χρησιμοποιούνται ως είσοδος και έξοδος της φάσης Map αλλά και αντίστοιχα ως είσοδος και έξοδος της φάσης Reduce με ορισμένο τρόπο. Στη συνέχεια εξηγείται κάθε ένα από αυτά τα σημεία. Σχήμα 2.3: Η μορφή key-value των δεδομένων. Στην είσοδο της φάσης Map η συνάρτησή της λαμβάνει μία λίστα από ζεύγη <key, value>. Έστω πως για την εξήγηση αυτή τα ονομάζουμε <k1,v1> όπως φαίνεται στο σχήμα 2.3. Το ζεύγος αυτό φαίνεται αρχικά περιοριστικό, αλλά στη πραγματικότητα μπορεί να είναι οτιδήποτε και να χρησιμοποιηθεί με πληθώρα τρόπων. Όταν η είσοδος αποτελείται από πολλά αρχεία δεδομένων, συχνά τα <k1,v1> αντιστοιχούν σε <ονομα αρχείου, περιεχόμενο αρχείου>, ενώ όταν έχουμε για παράδειγμα ένα μεγάλο αρχείο, θα μπορούσαν να αντιστοιχούν στην πληροφορία <αριθμός γραμμής, περιεχόμενο γραμμής>. Στη συνέχεια καθώς η συνάρτηση της φάσης Map λαμβάνει τα δεδομένα, τα επεξεργάζεται όπως απαιτεί η κάθε διαφορετική εφαρμογή. Στην έξοδο της φάσης Map υπάρχει και πάλι η μορφή <key, value>. Έστω πως εδώ ονομάζουμε αυτά τα ζεύγη <k2,v2>. Το περιεχόμενό τους θα μπορούσε να είναι οτιδήποτε, ανάλογα με τον στόχο που θέλουμε να πετύχουμε. Το σκεπτικό στο οποίο βασίζεται η κωδικοποίηση αυτή είναι ότι μας ενδιαφέρει η πληροφορία που αφορά το τρέχον κλειδί k2 να συγκεντρωθεί στο ίδιο σημείο επεξεργασίας.

Σχήμα 2.4: Η βασική ροή σε ένα MapReduce πρόγραμμα.

Αυτό θα φανεί καλύτερα σε παρακάτω υποενότητα με ένα παράδειγμα. Επομένως σε αυτό το σημείο η φάση Map απλά εξάγει ζεύγη <k2,v2> διαφορετικά από τα <k1,v1> και συνήθως εξάγει πολλά από αυτά. Οπότε μπορούμε να πούμε πως στη γενική περίπτωση όλοι οι Mappers εξάγουν λίστες από ζεύγη <k2,v2>. Στην είσοδο της φάσης Reduce όλα τα ζευγάρια <k2,v2> με κοινό k2 ομαδοποιούνται και φθάνουν με τη μορφή <k2, list(v2)> έτσι ώστε να μπορεί στη συνέχεια η συνάρτηση που εκτελεί τον κώδικα του Reduce, να τα επεξεργαστεί κατάλληλα για να βγάλει το τελικό επιθυμητό αποτέλεσμα. Στην έξοδο της φάσης Reduce όλα τα αποτελέσματα που προέκυψαν από την επεξεργασία εξάγονται και αποθηκεύονται απευθείας σε ένα ή περισσότερα αρχεία. Όπως και σε ολόκληρη τη προηγούμενη διαδικασία έτσι και εδώ η μορφή βάση της οποίας οργανώνονται είναι σε key-value ζευγάρια. Έστω <k3,v3> όπως φαίνεται και στο σχήμα 2.3. Στη συνέχεια, έχοντας εξηγήσει το βασικό σκεπτικό ενός προγράμματος MapReduce παρουσιάζουμε περισσότερες λεπτομέρειες για τη λειτουργία του μέσα από σχήματα. Στο σχήμα 2.4 φαίνεται η ροή όπως την εξηγήσαμε μέσα από τα key-value ζευγάρια. Στο σχήμα 2.5 παρουσιάζεται η μορφή ενός MapReduce προγράμματος με περισσότερες λεπτομέρειες και φαίνεται η περίπτωση στην οποία έχουμε περισσότερους του ενός Mappers και έναν Reducer ενώ στο σχήμα 2.6 έχουμε το αντίστοιχο παράδειγμα με πολλούς όμως Reducers. Στο σχήμα 2.7 φαίνονται οι διαδικασίες του Shuffling και της ταξινόμησης που γίνεται στα δεδομένα περνώντας από τη φάση Map στη φάση Reduce. Σχήμα 2.5: Η ροή MapReduce με πολλούς Mappers και έναν Reducer. Στα σχήματα 2.8 και 2.9 φαίνονται τα τμήματα που χειρίζονται μια διεργασία από τον χρήστη έως την τελική εκτέλεσή της. Σημειώνεται πως HDFS (Hadoop Distributed File System) ονομάζεται το κατανεμημένο σύστημα αρχείων πάνω στο οποίο βασίζεται η λειτουργία του Hadoop.

Σχήμα 2.6: Η ροή MapReduce με πολλούς Mappers και πολλούς Reducers. Σχήμα 2.7: Η ροή MapReduce με εστίαση στη ταξινόμηση και στη φάση Shuffling.

Σχήμα 2.8: Συστατικά μέρη της λειτουργίας του Hadoop. Σχήμα 2.9: Συστατικά μέρη της λειτουργίας του Hadoop.

Τέλος, παρακάτω φαίνονται οι βασικοί τύποι του Hadoop που χρησιμοποιούνται έναντι άλλων γνωστών. Τονίζεται πως τους τύπους αυτούς είναι απαραίτητο να τους χρησιμοποιεί κανείς στα πλαίσια όπου οι συναρτήσεις που συντάσσει αλληλεπιδρούν με το Hadoop (είσοδος-έξοδος αυτών των συναρτήσεων). Αντίθετα εντός των συναρτήσεων μπορεί να χρησιμοποιεί τους τύπους που επιθυμεί, π.χ. τον τύπο int της Java αντί του IntWritable του Hadoop. Έχοντας εξηγήσει τον βασικό τρόπο λειτουργίας του MapReduce, πρέπει να αναφέρουμε ποια ειναι και τα πλεονεκτήματά του που το κατέστησαν τόσο σημαντικό [12]: Προσβασιμότητα: Το Hadoop μπορεί να τρέχει πάνω σε clusters που δημιουργούνται από κοινούς υπολογιστές χωρίς έτσι να απαιτείται ακριβός εξοπλισμός. Ευρωστία: Λόγω ότι το Hadoop κατασκευάστηκε με τη προοπτική να λειτουργεί σε τυχαία τερματικά όχι απαραίτητα σε καλή κατάσταση, έχουν ληφθεί υπόψη τα περισσότερα από τα δυνατά σφάλματα που μπορούν να συμβούν τόσο ειδικά στους υπολογιστές όσο γενικά στο δίκτυο σαν ένα σύνολο. Αυτό χαρίζει στο Hadoop ασφάλεια και εγγύηση σωστής λειτουργίας. Κλιμάκωση: Λόγω του τρόπου λειτουργίας του, το Hadoop εξασφαλίζει εύκολη κλιμάκωση καθώς αρκεί να προστεθούν νέοι κόμβοι και το κόστος επεξεργασίας θα διαμοιραστεί. Απλότητα: Η εύκολη χρήση του Hadoop είναι ένας από τους λόγους που έγινε τόσο δημοφιλές. Αυτή οφείλεται στο γεγονός ότι ένας χρήστης που συντάσσει ένα πρόγραμμα χρειάζεται να γνωρίζει μόνο το πως θα χειριστεί τα δεδομένα του και τι θέλει να εξάγει από αυτά ενώ δεν χρειάζεται να ασχοληθεί με λεπτομέρειες του συστήματος, του παραλληλισμού και τις δικτύωσης καθώς το Hadoop εύστοχα τα αποκρύπτει.

Σχήμα 2.10: To Hadoop Cluster ως ένα σύνολο από τερματικά. Σχήμα 2.11: Η αρχή της απλότητα του Hadoop για τον προγραμματιστή.

2.2 Παράδειγμα Χρήσης στο Hadoop Word Count Στη συνέχεια παρουσιάζεται ένα απλό παράδειγμα χρήσης του Hadoop για τη καλύτερη κατανόηση της λειτουργία του. Το παράδειγμα αυτό ονομάζεται Word Count [21]. Παρακάτω δίνεται απευθείας ο κώδικάς του ώστε να μπορεί πιο εύκολα να εξηγηθεί. Στο πρόβλημα αυτό, το ζητούμενο είναι να βρούμε το πλήθος των εμφανίσεων κάθε λέξης μέσα σε ένα κείμενο που δίνεται ως είσοδος. Επιθυμούμε δηλαδή να δημιουργήσουμε έναν αντεστραμμένο κατάλογο [22]. Κοιτώντας απευθείας στις γραμμές 14 και 28 βλέπουμε αντίστοιχα το τμήμα Map και το τμήμα Reduce του προγράμματος. Αυτά υλοποιούνται ως δύο ξεχωριστές κλάσεις και οι συναρτήσεις map και reduce περιέχουν τον απαραίτητο κώδικα. Συγκεκριμένα, η map δέχεται σαν είσοδο τα τμήματα των κειμένων και για κάθε λέξη που συναντά εξάγει το ζεύγος key-value, <τρέχουσα λέξη, 1> όπου το 1 υποδηλώνει μία εμφάνιση. Στη συνέχεια το Hadoop αναλαμβάνει τη φάση του Shuffling και στους Reducers φτάνουν ζεύγη της μορφής <λέξη, <1,1,1,...>>. Μετά από αυτό η συνάρτηση reduce αναλαμβάνει να προσθέσει τους άσους της τρέχουσας λέξης που επεξεργάζεται και να εξάγει το ζεύγος <λεξη, πλήθος εμφανίσεων>. Για την καλύτερη κατανόηση αυτής της λειτουργίας δίνονται στις εικόνες 2.12 και 2.13 δύο παραδείγματα με συγκεκριμένες λέξεις για είσοδο και το τελικό τους αποτέλεσμα. WordCount.java 1. package org.myorg; 2. 3. import java.io.ioexception; 4. import java.util.*; 5. 6. import org.apache.hadoop.fs.path; 7. import org.apache.hadoop.conf.*; 8. import org.apache.hadoop.io.*; 9. import org.apache.hadoop.mapred.*; 10. import org.apache.hadoop.util.*; 11. 12. public class WordCount { 13. 14. public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { 15. private final static IntWritable one = new IntWritable(1);

16. private Text word = new Text(); 17. 18. public void map(longwritable key, Text value, OutputCollector <Text, IntWritable> output, Reporter reporter) throws IOException { 19. String line = value.tostring(); 20. StringTokenizer tokenizer = new StringTokenizer(line); 21. while (tokenizer.hasmoretokens()) { 22. word.set(tokenizer.nexttoken()); 23. output.collect(word, one); 24. } 25. 26. } } 27. 28. public static class Reduce extends MapReduceBase implements Reducer <Text, IntWritable, Text, IntWritable> { public void reduce(text key, Iterator<IntWritable> values, 29. OutputCollector <Text, IntWritable> output, Reporter reporter) throws IOException { 30. int sum = 0; 31. while (values.hasnext()) { 32. sum += values.next().get(); 33. } 34. output.collect(key, new IntWritable(sum)); 35. 36. } } 37. 38. public static void main(string[] args) throws Exception { 39. JobConf conf = new JobConf(WordCount.class); 40. conf.setjobname("wordcount"); 41. 42. conf.setoutputkeyclass(text.class); 43. conf.setoutputvalueclass(intwritable.class); 44.

45. conf.setmapperclass(map.class); 46. conf.setcombinerclass(reduce.class); 47. conf.setreducerclass(reduce.class); 48. 49. conf.setinputformat(textinputformat.class); 50. conf.setoutputformat(textoutputformat.class); 51. 52. FileInputFormat.setInputPaths(conf, new Path(args[0])); 53. FileOutputFormat.setOutputPath(conf, new Path(args[1])); 54. 55. 57. JobClient.runJob(conf); } 58. } 59. Σχήμα 2.12: Παράδειγμα του προγράμματος Word Count.

Σχήμα 2.13: Παράδειγμα του προγράμματος Word Count. 2.3 Τεχνική Secondary Sorting Στη μέθοδο MapReduce, στη βασική μορφή της λειτουργίας της, καθώς οι εγγραφές περνούν από τη φάση Map στη φάση Reduce ταξινομούνται βάση του πεδίου key. Για κάθε ένα, όμως, από αυτά τα κλειδιά, το πεδίο value δεν είναι ταξινομημένο. Για την ακρίβεια, η σειρά με την οποία εμφανίζονται τα πεδία value για ένα δεδομένο key δεν είναι καν σταθερή από εκτέλεση σε εκτέλεση. Αυτό οφείλεται στο γεγονός ότι τα values που συγκεντρώνονται κάθε φορά για ένα δεδομένο key προέρχονται από διαφορετικές Map διαδικασίες οι οποίες είναι πιθανό να τελειώνουν σε διαφορετικό χρόνο από εκτέλεση σε εκτέλεση. Στη γενική περίπτωση αυτή η ιδιαιτερότητα και η μη ντετερμινιστική συμπεριφορά δεν αποτελούν κάποιο πρόβλημα γιατί στη πλειονότητα των εφαρμογών, η σειρά με την οποία συγκεντρώνονται τα πεδία value δεν παίζει κάποιο ρόλο στο τελικό αποτέλεσμα. Παρ' όλα αυτά αν είναι επιθυμητό αυτό να διαφοροποιηθεί, είναι δυνατό και για την εφαρμογή του χρησιμοποιείται μια τεχνική που ονομάζεται Secondary Sorting η σε κάποιες περιπτώσεις καλείται και value to key convertion [20, 11]. Ένα παράδειγμα εφαρμογής στο οποίο αυτή η τεχνική είναι χρήσιμη θα μπορούσε να είναι η εύρεση της μέγιστης θερμοκρασίας κάθε έτους αν θεωρήσουμε ότι έχουμε μια συλλογή δεδομένων με διαφορετικές θερμοκρασίες που σημειώθηκαν για κάποια χρόνια σε μια τοποθεσία. Το πεδίο key σε αυτή τη περίπτωση θα είναι η χρονολογία ώστε οι θερμοκρασίες που εξετάζουμε να ανήκουν στο ίδιο έτος, και συνεπώς το πεδίο value στις εγγραφές που περνούν από τη φάση Map, θα είναι η θερμοκρασία. Όταν όλες οι θερμοκρασίες για την κάθε ορισμένη χρονιά συγκεντρωθούν μαζί, εφόσον θέλουμε τη μέγιστη από αυτές, θα πρέπει να τις εξετάσουμε όλες αν είναι αταξινόμητες. Αν όμως τις είχαμε ήδη στη σειρά π.χ. κατά φθίνουσα θα γλιτώναμε σε επεξεργαστικό κόστος παίρνοντας απευθείας την πρώτη. (Σημειώνεται πως αυτή η μέθοδος δεν είναι απαραίτητα η πιο αποτελεσματική

λύση για αυτό το πρόβλημα απλά χρησιμοποιείται για να εξηγηθεί η τεχνική Secondary Sorting.) Σχήμα 2.14: Η τεχνική Secondary Sorting σε παράδειγμα με χρονολογίες. Προκειμένου να χρησιμοποιήσουμε τις λειτουργίες του Ηadoop ώστε να εφαρμόσουμε αυτή τη τεχνική αλλάζουμε τις τιμές των key και value για κάθε εγγραφή που φεύγει από τη φάση Map, έτσι ώστε το τμήμα key να περιέχει ότι επιθυμούμε να ταξινομηθεί. Στο δικό μας παράδειγμα το νέο σύνθετο key θα έχει τη μορφή (χρονολογία, θερμοκρασία). Δηλαδή η νέα εγγραφή που θα περνάει στη φάση του Shuffling θα έχει τη μορφή ((χρονολογία, θερμοκρασία), value), όπου στο value κρατάμε όποια πληροφορία επιθυμούμε ή και τίποτα, ενώ αν δεν εκτελούσαμε Secondary Sorting η αρχική εγγραφή θα είχε τη μορφή (χρονολογία, θερμοκρασία). Τονίζεται πως ανεξάρτητα από το αν επιθυμούμε να ταξινομηθούν και τα δύο πεδία κατά αύξουσα, κατά φθίνουσα ή διαφορετικά το ένα από το άλλο, η γενική διαδικασία παραμένει η ίδια. Έστω πως στο παράδειγμα επιθυμούμε οι χρονολογίες να συγκεντρώνονται κατά αύξουσα και ανά χρονολογία, οι θερμοκρασίες κατά φθίνουσα όπως φαίνεται στο σχήμα 2.14. Έχοντας πετύχει αυτή την αλλαγή στη μορφή των εγγραφών έχουμε ολοκληρώσει το πρώτο βήμα που απαιτείται. Ακόμα όμως δεν έχουμε φθάσει στο τελικό αποτέλεσμα. Καθώς το Hadoop στέλνει στον ίδιο Reducer εκείνες τις εγγραφές που έχουν κοινό πεδίο key, αν αρκούμασταν μόνο στη πρώτη αλλαγή, τότε θα χωρίζαμε τις κοινές χρονολογίες και θα τις στέλναμε σε διαφορετικούς Reducers. Για παράδειγμα, έστω ότι έχουμε την εγγραφή ((1900, 34), value) και την εγγραφή ((1900, 35), value). Αν το key αποτελούνταν μόνο από την χρονολογία, οι δύο αυτές καταγραφές θα έφθαναν στον ίδιο προορισμό. Καθώς όμως πλέον το πεδίο key περιλαμβάνει και τη θερμοκρασία, τα κλειδιά των δύο αυτών είναι διαφορετικά και έτσι μπορεί να καταλήξουν σε διαφορετικούς Reducers. Έτσι για να εξασφαλίσουμε τη σωστή λειτουργία ρυθμίζουμε κατάλληλα έναν Partitioner βάση του οποίου θα λειτουργεί η τεχνική μας. Σχήμα 2.15: Ρύθμιση του Partitioner.

Σχήμα 2.16: Ρύθμιση της λειτουργίας Grouping. Ακόμα και τώρα όμως η διαδικασία δεν έχει ολοκληρωθεί. Το τελευταίο βήμα που απομένει είναι να ρυθμιστεί σωστά και η φάση του Grouping έτσι ώστε στο τέλος ανά συγκεκριμένη χρονολογία να λαμβάνουμε ομαδοποιημένες όλες τις θερμοκρασίες που εμφανίστηκαν, σε αυτήν, κατά φθίνουσα. Συνοψίζοντας, τα βήματα με τη σειρά που πρέπει να γίνουν για να ολοκληρωθεί σωστά η τεχνική Secondary Sorting είναι τα εξής [11]: Δημιουργούμε το σύνθετο κλειδί προσθέτοντας σε αυτό το τμήμα του αρχικού value ή ολόκληρο το αρχικό value επειδή επιθυμούμε να ταξινομηθεί και αυτό μαζί με το αρχικό κλειδί. Στη συνέχεια ρυθμίζουμε τον sort comparator του Hadoop που είναι υπεύθυνος για την ταξινόμηση, να λαμβάνει υπόψη ολόκληρο το σύνθετο κλειδί και να ταξινομεί ως προς τα δύο πεδία του όπως αυτό έχει ζητηθεί (αύξουσα, φθίνουσα, διαφορετικά το ένα από το άλλο). Τέλος ρυθμίζουμε τον Partitioner και τον grouping comparator του Hadoop να λαμβάνουν υπόψη μόνο το αρχικό κλειδί (στο παράδειγμα μας τις χρονολογίες).

Ενότητα 3 Αλγόριθμοι Εύρεσης Skyline Μία κατηγορία ερωτημάτων που εντοπίζουμε συχνά ακόμα και σε καθημερινή βάση είναι τα ερωτήματα κορυφογραμμής στα οποία αναζητούμε τα σημεία της κορυφογραμμής αλλιώς γνωστά και ως Skyline points τα οποία ερευνήθηκαν για πρώτη φορά στις εργασίες [24, 25]. Για να εξηγήσουμε τι αντιπροσωπεύουν, θα δώσουμε ένα παράδειγμα. Έστω πως κάποιος αναζητά να διαλέξει ένα από τα δυνατά ξενοδοχεία σε μια παραθαλάσσια περιοχή. Επιπλέον έστω ότι τον ενδιαφέρει η τιμή ανά ημέρα διαμονής στο ξενοδοχείο αυτό, να είναι όσο το δυνατό πιο χαμηλή αλλά ταυτόχρονα και η απόστασή του από την παραλία να μην είναι μεγάλη. Αυτά τα δύο χαρακτηριστικά όμως συχνά είναι αντικρουόμενα. Σε αυτό το σημείο λοιπόν αποκτά αξία η εύρεση του Skyline όλων των δυνατών ξενοδοχείων. Στο σχήμα 3.1 φαίνεται ένα παράδειγμα στο οποίο αναπαριστώνται όλα τα ξενοδοχεία της περιοχής αυτής. Στον κάθετο άξονα φαίνεται η απόστασή τους από τη θάλασσα, έστω σε χιλιόμετρα, ενώ στον οριζόντιο η τιμή του ξενοδοχείου ανά διανυκτέρευση, έστω σε ευρώ. Επιθυμούμε και στα δύο από αυτά να έχουμε τη χαμηλότερη δυνατή τιμή. Αν για παράδειγμα υπήρχε ένα σημείο στην αρχή των αξόνων τότε αυτό θα ήταν η ιδανική επιλογή. Καθώς όμως ένα ξενοδοχείο δίπλα στη παραλία είναι πιθανότερο να είναι αρκετά ακριβό, η μορφή που παίρνουμε είναι αυτή που φαίνεται. Τα καλύτερα ξενοδοχεία για την τελική επιλογή είναι αυτά που βρίσκονται πάνω στη μαύρη γραμμή. Κάθε ένα από αυτά δεν είναι καλύτερο σε όλα τα χαρακτηριστικά από κάποιο άλλο στη μαύρη γραμμή, αλλά μπορούμε να δούμε ότι κάθε σημείο που ανήκει στο υπόλοιπο πεδίο είναι χειρότερο από τουλάχιστον ένα που ανήκει στη μαύρη γραμμή, δηλαδή στο Skyline. Δίνοντας έναν πιο ξεκάθαρο ορισμό, θα ορίσουμε αρχικά τι σημαίνει η έννοια της κυριαρχίας. Έχοντας ένα σύνολο από πολυδιάστατα δεδομένα, έστω n διαστάσεων, λέμε ότι ένα σημείο p1 κυριαρχεί σε ένα άλλο p2 όταν ισχύουν οι δύο παρακάτω συνθήκες [23]: To p1 είναι τουλάχιστον τόσο καλό όσο το p2 σε όλες τις διαστάσεις. Το p1 είναι αυστηρά καλύτερο από το p2 σε τουλάχιστον μία από τις n διαστάσεις.

Σχήμα 3.1: Εύρεση του Skyline για ένα σύνολο από ξενοδοχεία. Έτσι όταν ένα σημείο p1 έναντι κάποιου άλλου p2 έχει τις παραπάνω προϋποθέσεις, λέμε πως κυριαρχεί σε αυτό. Αν ανάποδα αυτή η σχέση υπάρχει από το p2 προς το p1 τότε λέμε ότι το p1 κυριαρχείται, ενώ τέλος μπορεί το p1 να είναι καλύτερο σε κάποια ή κάποιες διαστάσεις αλλά και το p2 να είναι καλύτερο σε τουλάχιστον μία από τις n διαστάσεις και έτσι να μην υπάρχει σχέση κυριαρχίας ανάμεσά τους. Καθώς σε αυτή τη περίπτωση κανένα από τα δύο δεν είναι καλύτερο από το άλλο, λέμε ότι είναι μη συγκρίσιμα μεταξύ τους ή αλλιώς ανεξάρτητα. Ως Skyline σε ένα σύνολο πολυδιάστατων δεδομένων ορίζουμε το σύνολο των σημείων που δεν κυριαρχούνται από κανένα άλλο και συνεπώς είναι ανεξάρτητα μεταξύ τους. Τονίζεται πως σε κάθε δυνατή συλλογή θα υπάρχει αυστηρά το Skyline ακόμα και αν αυτό αποτελείται από ένα μόνο σημείο. Σχήμα 3.1: Εύρεση του Skyline για ένα σύνολο από ξενοδοχεία. Σχήμα 3.2: Παράδειγμα Skyline σε συλλογές 100.000 σημείων. Έτσι παρατηρούμε πως ανάλογα από το είδος των δεδομένων της συλλογής το μέγεθος του Skyline ποικίλει. Παίζουν ρόλο διάφορα χαρακτηριστικά όπως για παράδειγμα το είδος της κατανομής και το πλήθος των διαστάσεων. Στα σχήματα 3.3, 3.4 και 3.5 φαίνονται τα παραδείγματα μιας Uniform, μιας Correlated και μίας Anti-Correlated συλλογής αντίστοιχα, στις οποίες έχουν σημειωθεί τα

σημεία του Skyline. Επιπλέον στο σχήμα 3.2 παρουσιάζονται πειράματα που έγιναν για συλλογές 100.000 σημείων σε διαφορετικές κατανομές και διαφορετικό πλήθος διαστάσεων [23]. Παρατηρείται πως όσο περισσότερες είναι οι διαστάσεις τόσο περισσότερα τα σημεία του Skyline στις περιπτώσεις που η κατανομή είναι είτε Uniform είτε Anti-Correlated. Σχήμα 3.3: Παράδειγμα Skyline σε Uniform κατανομή. Σχήμα 3.4: Παράδειγμα Skyline σε Correlated κατανομή.

Σχήμα 3.5: Παράδειγμα Skyline σε Anti-Correlated κατανομή. Η ανάγκη για την εύρεση των σημείων Skyline είναι πολύ σημαντική για ποικίλα προβλήματα. Όπως όμως φαίνεται και παραπάνω όταν οι διαστάσεις των δεδομένων αυξηθούν τότε οι ανάγκες επεξεργασίας μεγαλώνουν και όσο περισσότερα είναι τα σημεία από τα οποία αποτελείται μια συλλογή τόσο πιο δύσκολη γίνεται η εύρεση του Skyline. Αν ο αλγόριθμος που θα χρησιμοποιηθεί δεν είναι αποδοτικός στη λειτουργία του τότε ο χρόνος που χρειάζεται για την επεξεργασία μια πολύ μεγάλης συλλογής, είναι εύκολο να γίνει απαγορευτικός. Για παράδειγμα ένας απλοϊκός αλγόριθμος θα ήταν: Να ελέγχουμε κάθε σημείο σε σχέση με κάθε άλλο ως προς την κυριαρχία τους. Να επιστρέφουμε όλα τα σημεία που δεν κυριαρχούνται δηλαδή εκείνα που είναι μη συγκρίσιμα μεταξύ τους. Κάτι τέτοιο όμως δεν θα μπορούσε να χρησιμοποιηθεί σε ρεαλιστικά προβλήματα με πολλά δεδομένα καθώς το κόστος αυτού του αλγορίθμου θα ήταν τετραγωνικό. Αυτό είχε σαν αποτέλεσμα να γίνει μεγάλη έρευνα για την εύρεση αποδοτικών αλγορίθμων που προσανατολίζονται ανάλογα από τη περίπτωση σε διαφορετικού τύπου συλλογές και σε διαφορετικές ανάγκες. Στη συνέχεια στην ενότητα αυτή παρουσιάζονται τρεις βασικοί αλγόριθμοι, οι BNL [23], DC [24, 25], BBS [26] καθώς και ένας αλγόριθμος που βασίστηκε στον BNL, o αλγόριθμος SFS [27] πάνω στον οποίο θα εστιάσουμε περισσότερο καθώς σε αυτόν βασίζονται οι τεχνικές που στη συνέχεια εμείς αναπτύσσουμε. 3.1 Block Nested Loop Ο αλγόριθμος Block Nested Loop ή σε συντομία BNL προτάθηκε στην εργασία [23] και έγινε η βάση τόσο για άλλους αλγορίθμους όπως ο SFS [27] και ο

SaLSa [28] όσο και για βελτιωμένες εκδοχές του ίδιου αλγορίθμου [23] που χρησιμοποιήθηκαν σε μεγάλο πλήθος προβλημάτων για εύρεση του Skyline μιας συλλογής. Στη βασική του εκδοχή ο αλγόριθμος BNL διαβάζει κατ' επανάληψη ένα σύνολο από εγγραφές και κρατά ένα σταθερό παράθυρο στη μνήμη το οποίο περιέχει τις μη συγκρίσιμες εγγραφές, εκείνες δηλαδή που δεν εμφανίζουν σχέσεις κυριαρχίας μεταξύ τους. Όταν μία εγγραφή, ή αλλιώς σημείο, p διαβάζεται από την είσοδο, συγκρίνεται άμεσα με όλες τις εγγραφές που βρίσκονται στη μνήμη και βάση αυτής της σύγκρισης μπορεί να κυριαρχείται και άρα να απορριφθεί, μπορεί να εισαχθεί στη μνήμη ή τέλος να εισαχθεί σε ένα προσωρινό αρχείο το οποίο θα ληφθεί υπόψη στην επόμενη επανάληψη του αλγορίθμου. Πιο ξεκάθαρα οι τρεις αυτές περιπτώσεις είναι: Το σημείο p θα κυριαρχείται από κάποια άλλη εγγραφή μέσα στο παράθυρο. Το σημείο αυτό δεν θα ληφθεί ξανά υπόψη στις μελλοντικές επαναλήψεις και επιπλέον δεν χρειάζεται και να συγκριθεί με τις υπόλοιπες εγγραφές του παραθύρου καθώς ήδη κυριαρχείται. Το σημείο p κυριαρχεί μία ή περισσότερες εγγραφές που βρίσκονται μέσα στο παράθυρο. Σε αυτή τη περίπτωση, όσες κυριαρχούνται διαγράφονται και δεν θα ληφθούν υπόψη σε μελλοντικές επαναλήψεις. Το σημείο p εισάγεται στο παράθυρο. Τέλος το σημείο p είναι μη συγκρίσιμο με τις υπόλοιπες εγγραφές του παραθύρου. Αν το παράθυρο δεν είναι γεμάτο το σημείο εισάγεται. Διαφορετικά γράφεται σε ένα προσωρινό αρχείο στο δίσκο το οποίο θα ληφθεί υπόψη στην επόμενη επανάληψη του αλγορίθμου. Στο τέλος κάθε επανάληψης εξάγουμε όλες τις εγγραφές που βρίσκονται στο παράθυρο της μνήμης και έχουν συγκριθεί με όλα τα άλλα σημεία που πέρασαν από το προσωρινό αρχείο. Αυτές οι τελικές εγγραφές δεν κυριαρχούνται από άλλες και έτσι αποτελούν την τελική έξοδο του αλγορίθμου, δηλαδή το Skyline. Συγκεκριμένα, μπορούμε απευθείας να πούμε πως κατά τη διάρκεια της εκτέλεσης του BNL θα εξάγουμε στο τελικό αποτέλεσμα όλες τις εγγραφές που βρίσκονται στο παράθυρο, όσο ακόμα δεν έχει γραφτεί κανένα σημείο μέσα στο προσωρινό αρχείο. Δηλαδή στην αρχή κάθε επανάληψης του αλγορίθμου. Όσο νωρίτερα μία εγγραφή εισάγεται στο παράθυρο τόσο νωρίς μπορεί και να εξαχθεί κατά της επόμενη επανάληψη. Προκειμένου να μπορούμε να κρατήσουμε την πληροφορία για το πότε μία εγγραφή θα μπορεί να εξαχθεί αντιστοιχούμε μία χρονική τιμή έστω timestamp τόσο σε εκείνα τα σημεία που βρίσκονται στη μνήμη όσο και σε εκείνα που είναι αποθηκευμένα στο αρχείο. Αυτή η τιμή θα κρατά σαν πληροφορία τη σειρά με την οποία οι εγγραφές εισάχθηκαν στο παράθυρο και στο προσωρινό αρχείο. Χάρη σε αυτό, όταν θα διαβάζουμε από το αρχείο μία εγγραφή με timestamp t, θα μπορούμε να εξάγουμε από το παράθυρο όλες τις εγγραφές με timestamp μικρότερο του t. Επιπλέον αυτή η τακτική εγγυάται ότι ο αλγόριθμος κάποτε τερματίζει και ότι δύο εγγραφές ποτέ δεν συγκρίνονται δύο φορές. Στη συνέχεια παρουσιάζεται ο αλγόριθμος του BNL.

3.2 Sort Filter Skyline O αλγόριθμος Sort Filter Skyline ή SFS [27] είναι στη βάση του ο αλγόριθμος BNL με μία βελτίωση. Συγκεκριμένα λειτουργεί και αυτός με πολλαπλά περάσματα και κρατά ένα παράθυρο στη μνήμη για να συλλέγει εγγραφές του τελικού Skyline. H διαφορετική λεπτομέρεια είναι πως οι εγγραφές που έρχονται ως είσοδος είναι εξ αρχής ταξινομημένες βάση κριτηρίων που σχετίζονται με το Skyline. Έστω για παράδειγμα πως έχουμε τον αρχικό πίνακα των δεδομένων ταξινομημένο. Ο αλγόριθμος συνεχίζει σαν BNL με τη διαφορά ότι τώρα ξέρουμε πως αν ένα στοιχείο εισαχθεί στο παράθυρο τότε σίγουρα ανήκει στο τελικό Skyline.

Καμία εγγραφή που ακολουθεί δεν θα μπορεί να κυριαρχεί σε αυτό το τρέχον σημείο καθώς θα έρχονται ταξινομημένα και συνεπώς θα είναι πάντα παρακάτω (π.χ. μεγαλύτερα) σύμφωνα με τα κριτήρια ταξινόμησης. Στη συνέχεια παρουσιάζεται ο αλγόριθμος SFS. 3.3 Divide and Conquer Ο αλγόριθμος Divide and Conquer ή DC [24, 25] λειτουργεί με τον ακόλουθο τρόπο: Υπολογίζει τη διάμεσο της εισόδου για κάποια διάσταση d. Στη συνέχεια διαιρεί την είσοδο σε δύο μέρη. Το ένα μέρος θα έχει σε αυτή τη διάσταση τιμές μικρότερες της διαμέσου και το άλλο μεγαλύτερες. Στη συνέχεια υπολογίζονται τα Skylines των δύο τμημάτων που χωρίστηκαν βάση της διαμέσου στο προηγούμενο βήμα. Για να γίνει αυτό υπολογίζονται εφαρμόζοντας αναδρομικά τον ίδιο αλγόριθμο στα δύο τμήματα ξεχωριστά. Κοιτώντας την αναδρομή σε βάθος, σταματά όταν χωρίζοντας με τη διάμεσο ένα τμήμα σε δύο μένουν λίγα σημεία όπου ο υπολογισμός του Skyline σε αυτά είναι τετριμμένος. Τέλος το ολικό Skyline προκύπτει από τα Skylines των δύο τμημάτων, κάθε ένα από τα οποία προέκυψε με τον ίδιο τρόπο από τα δύο αντίστοιχα μικρότερα τμήματα, αναδρομικά. Στη συνέχεια παρουσιάζονται τα βήματα του αλγορίθμου.

3.4 Branch and Bound O αλγόριθμος Branch and Bound ή BBS [26] ανήκει σε μία κατηγορία αλγορίθμων που εκμεταλλεύονται υπάρχουσες δομές δεδομένων όπως οι R-Tree [29], R*-Tree [31], X-tree [30]. Για την λειτουργία του, σαν είσοδο του δέχεται ένα Rtree και, και έχει αρχικά ένα κενό Skyline και ένα σωρό με τα στοιχεία της ρίζας, ταξινομημένα με βάση την ελάχιστη απόσταση από κάποιο μηδενικό σημείο-διάνυσμα. Στη συνέχεια επεκτείνει σε κάθε βήμα μόνο αυτούς τους κόμβους στους οποίους δεν κυριαρχεί κανένα από τα στοιχεία του Skyline, ενώ απορρίπτει τα παιδιά τους στα οποία κυριαρχεί κάποιο στοιχείο. Αν φτάσει σε φύλλο, τότε αυτό εισάγεται στο Skyline. Στην συνέχεια φαίνονται τα βήματα του αλγορίθμου.

Ενότητα 4 Skylines σε Περιβάλλον MapReduce Στην ενότητα αυτή συλλέγουμε αναφορές για εργασίες που ερευνήθηκαν, στις οποίες φαίνονται είτε ιδέες στις οποίες βασιστήκαμε για να τις εξελίξουμε είτε αλγόριθμοι για εύρεση του Skyline μιας συλλογής με χρήση MapReduce. Συνδυάζονται δηλαδή οι τεχνικές από τις δύο προηγούμενες ενότητες. Αρχικά πρέπει να αναφερθεί πως τα Skylines έχουν μελετηθεί από τη σκοπιά της παράλληλης και κατανεμημένης επεξεργασίας και έξω από τα πλαίσια του MapReduce. Μάλιστα σε αυτό το χώρο υπάρχουν αρκετές ενδιαφέρουσες και σημαντικές εργασίες, μεταξύ αυτών και οι [32, 33, 34, 35] και ένα τμήμα έρευνας στα Skylines εστιάζει στο αν αυτές μπορούν να μεταφερθούν στα πλαίσια του MapReduce. Στη συνέχεια παρ' όλα αυτά η συζήτηση εστιάζει αποκλειστικά σε υλοποιήσεις στα πλαίσια του Hadoop. Ένα ενδιαφέρον θέμα στο Hadoop το οποίο είναι άξιο μελέτης τόσο για αλγορίθμους Skyline όσο και για άλλου τύπου προβλήματα είναι ο διαμοιρασμός των δεδομένων. Καθώς οι εγγραφές περνάνε από τη φάση Map στη φάση Reduce μπορούμε να ορίσουμε ότι αυτές δεν θα κατευθύνονται στους διαθέσιμους Reducers με τρόπο που ελέγχεται από το Hadoop αλλά από κάποια δική μας τεχνική Partitioning. Διάφοροι αλγόριθμοι έχουν μελετηθεί γύρω από αυτό με διαφορετικό προσανατολισμό, διαφορετικά οφέλη και μειονεκτήματα. Κάποιες βασικές μορφές Partitioning φαίνονται στα σχήματα 4.1 και 4.2 και αντιστοιχούν στα Dimensional Partitioning [36, 37] και Grid Partitioning [38,39]. Μία άλλη τεχνική Partitioning η οποία φαίνεται να προσφέρει ειδικά στη περίπτωση του υπολογισμού των Skylines είναι η τεχνική Angle-Based Partitioning [40, 41, 42] η οποία φαίνεται στα σχήματα 4.3 και 4.4. Τέλος μια ιδέα η οποία μπορεί να φανεί ιδιαίτερα χρήσιμη όσο το πλήθος των δεδομένων αυξάνεται είναι αυτή της δειγματοληψίας [43, 44, 45]. Στόχος είναι πάντα να μπορέσουμε βάση κάποιας μικρής και εύκολα επεξεργάσιμης ποσότητας δεδομένων να βγάλουμε κάποια καθολικά συμπεράσματα για ολόκληρη τη συλλογή. Μπορούμε για παράδειγμα να εκτιμήσουμε το είδος της κατανομής. Επιπλέον μπορούμε να εφαρμόσουμε κάποια τεχνική φιλτραρίσματος η οποία θα μας γλιτώ-

νει από πιθανό κόστος σε χρόνο επεξεργασίας αλλά και κόστος μεταφοράς στο δίκτυο με το να απορρίπτει εξ αρχής εγγραφές που δεν θα περιέχονται στο τελικό Skyline. Σχήμα 4.1: Dimensional Partitioning. Σχήμα 4.2: Grid Partitioning. Σχήμα 4.3: Angle-Based Partitioning. Σχήμα 4.4: Angle-Based Partitioning 3 διαστάσεων.

Μία εργασία [46] η οποία δεν ασχολείται με αλγορίθμους Skyline αλλά Clustering παρουσιάζει ιδιαίτερο ενδιαφέρον καθώς χρησιμοποιεί το ίδιο σκεπτικό σε ένα διαφορετικό χώρο προβλημάτων. Η ιδέα σε αυτήν είναι να χρησιμοποιούνται δύο διαφορετικοί αλγόριθμοι με διαφορετικά κόστη για τον υπολογισμό των clusters μια συλλογής ανάλογα με το ποιος αλγόριθμος συμφέρει σε κάθε περίπτωση. Στον έναν από τους δύο, στον δεύτερο που φαίνεται στο σχήμα 4.6 χρησιμοποιείται δειγματοληψία με τον τρόπο που αναφέρθηκε. Αυτή επιτυγχάνεται με μια ξεχωριστή φάση MapReduce. Το ενδιαφέρον σε αυτήν είναι ότι μπορεί να εφαρμοστεί σε Skylines με αντίστοιχο τρόπο όπως εφαρμόζεται και στα clusters στο συγκεκριμένο πρόβλημα. Πειραματιστήκαμε με αυτήν την ιδέα, και αλγόριθμοι που την υλοποιούν παρουσιάζονται στην επόμενη ενότητα. Σχήμα 4.5: Ο αλγόριθμος ParC που θα μπορούσε να χρησιμοποιηθεί σε Skylines.

Σχήμα 4.6: Ο αλγόριθμος Snl που θα μπορούσε να χρησιμοποιηθεί σε Skylines. Τέλος πρέπει να αναφερθούν εκείνοι οι αλγόριθμοι που υπολογίζουν το Skyline μιας συλλογής σε MapReduce. Δύο σημαντικές εργασίες που έχουν γίνει είναι οι [42, 49]. Στην πρώτη έχει χρησιμοποιηθεί ο αλγόριθμος BNL [23] με διαφορετικούς τρόπους Partitioning (Dimensional Partitioning, Grid Partitioning και Angle-Based Partitioning) και συγκεκριμένα στο σχήμα 4.7 φαίνεται ο αλγόριθμος που χρησιμοποιήθηκε στο Angle-Based Partitioning στο οποίο εστίασε αυτό το paper. Στην εργασία [49] παρουσιάζονται τρεις αλγόριθμοι υπολογισμού Skyline σε MapReduce, οι MR-BNL, MR-SFS και MR-Bitmap οι οποίοι βασίζονται αντίστοιχα στους αλγορίθμους BNL [23], SFS [27] και Bitmap [50]. Στο σχήμα 4.8 φαίνεται ο αλγόριθμος MR-BNL. Χρησιμοποιείται μία τεχνική βάση της οποίας αντιστοιχούνται flags στον χώρο τα οποία εκμεταλλεύονται τις σχέσεις κυριαρχίας ώστε στο τέλος ο αλγόριθμος να γλιτώνει συγκρίσεις ανάμεσα στις εγγραφές. Για παράδειγμα βλέποντας το σχήμα, ένα διάνυσμα που βρίσκεται στο Region01 δεν μπορεί ποτέ να κυριαρχεί ή να κυριαρχείται σε σχέση με ένα διάνυσμα που ανήκει στο Region10.

Σχήμα 4.7: Η τεχνική Partitioning της εργασίας [42]. Σχήμα 4.8: Ο αλγόριθμος MR-BNL της εργασίας [49].

Ο αλγόριθμος MR-SFS είναι σχεδόν ομοιότυπος με τον MR-BNL. Έχουν την ίδια λειτουργία με τη μόνη διαφορά ότι χρησιμοποιείται η τεχνική Secondary Sorting [11, 20] ώστε τα δεδομένα να φτάνουν ταξινομημένα και η επεξεργασία να γίνεται με τον αλγόριθμο SFS. Τέλος, παρακάτω φαίνεται ο τρίτος αλγόριθμος που αναπτύχθηκε από την εργασία, ο MR-Bitmap. Κλείνοντας, πρέπει να αναφερθεί πως το επιστημονικό πεδίο που αφορά την εύρεση του Skyline μιας συλλογής σε περιβάλλον MapReduce δεν έχει, ακόμα, επαρ-κώς ερευνηθεί. Έτσι προκύπτουν διαρκώς νέες ιδέες, και προτάσεις, γύρω από αυτό, που οδηγούν με σταθερό ρυθμό σε όλο και καλύτερες λύσεις επεξεργασίας.

Ενότητα 5 Nέοι Αλγόριθμοι Στην ενότητα αυτή παρουσιάζονται οι δικές μας ερευνητικές προτάσεις για τον υπολογισμό του skyline μιας συλλογής με χρήση του Hadoop [3]. Οι αλγόριθμοι που αντιστοιχούν στις υποενότητες 5.1, 5.2, 5.3, 5.4, 5.5 είναι εκείνοι που σκοπεύουμε να παρουσιάσουμε ενώ οι υπόλοιποι δημιουργήθηκαν για επιπλέον πειραματισμό. Η υλοποίηση πραγματοποιήθηκε στην έκδοση 1.0.4 [47] του Hadoop και όλοι οι αλγόριθμοι χρησιμοποιούν δύο με τρεις MapReduce διαδικασίες για τον υπολογισμό του τελικού skyline. 5.1 Αλγόριθμος Skyline-Baseline Στη μέθοδο αυτή o υπολογισμός του skyline της συλλογής ολοκληρώνεται σε δύο MapReduce διαδικασίες. Μια οπτική αναπαράσταση του αλγορίθμου φαίνεται στο σχήμα 5.1. Στην πρώτη διαδικασία, πολλοί Mappers διαβάζουν την συλλογή. Για κάθε διάνυσμα που δέχονται υπολογίζουν το άθροισμα των συντεταγμένων του και στη συνέχεια το προωθούν στους Reducers. Στη ενδιάμεση φάση, στη φάση του Shuffling χρησιμοποιείται η τεχνική Secondary Sorting έτσι ώστε τα δεδομένα που θα φτάσουν σε κάθε Reducer να είναι ταξινομημένα ως προς το άθροισμα συντεταγμένων για να μπορεί άμεσα να εκτελεστεί ο αλγόριθμος SFS. Στη φάση Reduce, o κάθε Reducer με βάση τον αλγόριθμο SFS υπολογίζει το skyline των τοπικών δεδομένων που δέχτηκε και η διαδικασία ολοκληρώνεται. Στη δεύτερη διαδικασία, πολλοί Mappers διαβάζουν τα δεδομένα που προέκυψαν από πριν, δηλαδή τα τοπικά skyline. Όπως και πριν υπολογίζουν το άθροισμα των συντεταγμένων τους και τα προωθούν στη φάση Reduce. Στη φάση Shuffling με Secondary Sorting τα δεδομένα φτάνουν ταξινομημένα ως προς το άθροισμα συντεταγμένων. Τέλος στη φάση Reduce ένας τελικός Reducer εκτελεί τον αλγόριθμο SFS και υπολογίζει το ολικό skyline της συλλογής.

Σχήμα 5.1: Αλγόριθμος Skyline-Baseline. 5.2 Αλγόριθμος Skyline-Fifo Στη μέθοδο αυτή o υπολογισμός του skyline της συλλογής ολοκληρώνεται σε δύο MapReduce διαδικασίες. Μια οπτική αναπαράσταση του αλγορίθμου φαίνεται στο σχήμα 5.2. Στην πρώτη διαδικασία, πολλοί Mappers διαβάζουν την συλλογή. Κάθε Mapper διαθέτει μία μνήμη fifo το μέγεθος της οποίας ορίζεται από τον χρήστη. Καθώς σταδιακά ένα ένα τα διανύσματα καταφθάνουν ως είσοδος, αυτά δεν συλλέγονται κατευθείαν αλλά περνούν από μία ενδιάμεση φάση. Συγκεκριμένα, το

πρώτο διάνυσμα που θα διαβαστεί θα εισαχθεί στη μνήμη fifo. Το επόμενο που θα έρθει θα συγκριθεί με το υπάρχον και αν κυριαρχεί σε αυτό τότε το υπάρχον θα σβηστεί και το νέο θα εισαχθεί, αν είναι ανεξάρτητο θα εισαχθεί στο υπόλοιπο της μνήμης και αν κυριαρχείται τότε απορρίπτεται και η επεξεργασία του σταματά εκεί. Αυτή η διαδικασία επαναλαμβάνεται καθώς τα διανύσματα έρχονται ένα ένα κάθε νέο διάνυσμα συγκρίνεται με όλα τα υπόλοιπα στη μνήμη με το ίδιο σκεπτικό, έως ότου η μνήμη γεμίσει. Σχήμα 5.2: Αλγόριθμος Skyline-Fifo. Μέχρι στιγμής κανένα σημείο δεν έχει προωθηθεί στους Reducers. Όταν δεν θα υπάρχει άλλος χώρος στη μνήμη fifo ένα σημείο αφαιρείται από αυτήν και συλλέγεται για την φάση Reduce. Tο σημείο που επιλέγεται είναι το πιο παλιό από

τα υπόλοιπα υπάρχει δηλαδή η λογίκη First In First Out [48]. Με αυτό το σκεπτικό το κέρδος είναι σημαντικό καθώς ένα κομμάτι της συλλογής απορρίπτεται και δεν ταξιδεύει πάνω στο δίκτυο κατά την φάση του Shuffling. Για τα σημεία τα οποία συλλέγονται, πριν προωθηθούν υπολογίζεται το άθροισμα των συντεταγμένων τους. Στη συνέχεια με την τεχνική του Secondary Sorting φτάνουν στους Reducers ταξινομημένα ως προς αυτό το άθροισμα για να ξεκινήσει η φάση Reduce. Σε αυτήν, η εκτέλεση είναι ομοιότυπη με εκείνη του αλγορίθμου SkylineBaseline. Εκτελείται δηλαδή ο αλγόριθμος SFS και υπολογίζονται τα τοπικά skylines. H δεύτερη διαδικασία είναι ίδια με την πρώτη με μόνη διαφορά ότι στη φάση Reduce τα δεδομένα συλλέγονται σε έναν μόνο Reducer ώστε να υπολογιστεί το ολικό skyline. Toνίζεται πως ως μέγεθος μνήμης fifo παραμένει το ίδιο μέγεθος που ορίστηκε και για την πρώτη διαδικασία. 5.3 Αλγόριθμος Skyline-Volume Στη μέθοδο αυτή o υπολογισμός του skyline της συλλογής ολοκληρώνεται σε δύο MapReduce διαδικασίες με σκεπτικό ανάλογο με αυτό του αλγορίθμου Skyline-Fifo. Μια οπτική αναπαράσταση του αλγορίθμου φαίνεται στο σχήμα 5.3. Στην πρώτη διαδικασία, πολλοί Mappers διαβάζουν την συλλογή. Κάθε Mapper διαθέτει μία μνήμη volume το μέγεθος της οποίας ορίζεται από τον χρήστη. Καθώς σταδιακά ένα ένα τα διανύσματα καταφθάνουν ως είσοδος, αυτά δεν συλλέγονται κατευθείαν αλλά περνούν από μία ενδιάμεση φάση. Όπως στον αλγόριθμο Skyline-Fifo έτσι και εδώ υπάρχει μία ενδιάμεση μνήμη, η μνήμη volume το μέγεθος της οποίας δίνεται από τον χρήστη. Όταν ένα νέο στοιχείο καταφθάνει, συγκρίνεται με όλα τα υπόλοιπα στοιχεία που βρίσκονται σε αυτήν και αν κυριαρχεί σε κάποια διανύσματα τότε αυτά σβήνονται, αν είναι ανεξάρτητο από αυτά τότε εισάγεται στη μνήμη και τέλος αν κυριαρχείται το ίδιο από άλλο στοιχείο, τότε, απορρίπτεται. Η διαφορά αυτού του αλγορίθμου από τον Skyline-Fifo είναι η οργάνωση των στοιχείων μέσα σε αυτή τη μνήμη. Εδώ δεν επικρατεί το σκεπτικό First In First Out όταν η μνήμη γεμίσει και ένα στοιχείο πρέπει να προωθηθεί στη φάση Reduce. Αλλά, τα στοιχεία βρίσκονται διαρκώς ταξινομημένα ως προς το volume τους. Δηλαδή ως προς το εμβαδό της περιοχής στην οποία κυριαρχούν. Πρώτο στοιχείο στη μνήμη είναι εκείνο με το μεγαλύτερο volume και τελευταίο εκείνο με το μικρότερο. Ένα στοιχείο με μεγάλο volume έχει σημαντικές πιθανότητες να κυριαρχήσει σε ένα ερχόμενο στοιχείο και έτσι αυτό να απορριφθεί γρήγορα. Έχοντας τα στοιχεία με μεγάλο volume ψηλά μέσα στη μνήμη volume μειώνουμε τις απαιτούμενες συγκρίσεις που χρειάζονται για τα σημεία που κυριαρχούνται ώστε να τα απορρίψουμε. Όταν η μνήμη γεμίσει και ένα στοιχείο πρέπει να αφαιρεθεί, θα επιλεχτεί εκείνο με το μικρότερο volume και θα συνεχίσει τη πορεία του προς την φάση Reduce. Με αυτό το σκεπτικό η μνήμη με την πάροδο του χρόνου έχει όλο και πιο δυνατά στοιχεία που θα διώχνουν όλο και περισσότερα από εκείνα που έρχονται. Στην συνέχεια το σκεπτικό παραμένει το ίδιο με εκείνο τον υπόλοιπων αλγορίθμων. Για τα στοιχεία υπολογίζεται το άθροισμα των συντεταγμένων τους και προωθούνται στη φάση Shuffling. Με την τεχνική Secondary Sorting φτάνουν ταξινομημένα στους Reducers και εκεί εκτελείται ο SFS για τον υπολογισμό των τοπικών skylines.

Η δεύτερη διαδικασία είναι η ίδια με την πρώτη. Χρησιμοποιείται με τον ίδιο τρόπο η μνήμη volume και έχει το ίδιο μέγεθος αυτό που δόθηκε εξ αρχής από τον χρήστη. Η είσοδος σε αυτή τη διαδικασία είναι η έξοδος της προηγούμενης, δηλαδή, τα τοπικά skylines και η έξοδος είναι το ολικό skyline. Για αυτό στη φάση Reduce ενεργοποιείται μόνο ένας Reducer για να εκτελέσει τον τελικό SFS. Σχήμα 5.3: Αλγόριθμος Skyline-Volume. To κέρδος αυτού του αλγορίθμου σε σχέση με τον Skyline-Baseline αλγόριθμο είναι πως με τις συγκρίσεις που εκτελούνται στη φάση Map με την μνήμη volume απορρίπτονται σημεία που έτσι και αλλιώς δεν ανήκουν στο τελικό skyline και δεν περνούν από τη φάση Shuffling κάτι που θα σήμαινε επιπλέον κόστος μεταφοράς στο δίκτυο καθώς και I/Os.

5.4 Αλγόριθμος Skyline-Sampling-Adapt-Fifo Στον αλγόριθμο αυτό καθώς και στους υπόλοιπους που ακολουθούν εισάγεται η έννοια της δειγματοληψίας. Στόχος αυτής είναι να προσθέσουμε ένα πέρασμα της συλλογής στον αλγόριθμό μας με αντάλλαγμα να προσδιορίσουμε τη μορφή της συλλογής και τα χαρακτηριστικά της π.χ. το μέγεθος του skyline της σε σχέση με το πλήθος των στοιχείων της, ώστε να κάνουμε καλύτερες επιλογές σε παραμέτρους που χρησιμοποιούμε για την αποδοτικότερη λειτουργία στο υπόλοιπο του αλγορίθμου. Λόγω του επιπλέον περάσματος που εκτελούμε στη συλλογή δεδομένων, προστίθεται μία έξτρα διαδικασία MapReduce στον αλγόριθμο. Συγκεκριμένα για τον Skyline-Sampling-Adapt-Fifo το ολικό skyline υπολογίζεται σε τρείς διαδικασίες όπως παρουσιάζεται και στο σχήμα 5.4. Στην πρώτη διαδικασία πολλοί Mappers διαβάζουν τη συλλογή. Για κάθε διάνυσμα που επεξεργάζονται, με ορισμένη πιθανότητα, η οποία δίνεται από τον χρήστη, επιλέγουν αν θα κρατήσουν αυτό το διάνυσμα ή όχι. Για τα διανύσματα που κρατούνται, υπολογίζεται το άθροισμα των συντεταγμένων τους και προωθούνται στη συνέχεια στη φάση του Shuffling. Εκεί με την τεχνική Secondary Sorting φτάνουν ταξινομημένα σε έναν Reducer όπου εκτελείται ο αλγόριθμος SFS και υπολογίζεται το skyline του δείγματος. Επιπλέον, υπολογίζεται με εκτίμηση το ποσοστό της συλλογής που αποτελεί το skyline. Τόσο αυτό το εκτιμώμενο ποσοστό όσο και το skyline του δείγματος αποθηκεύονται στο κατανεμημένο σύστημα αρχείων του Hadoop. Στη δεύτερη διαδικασία χρησιμοποιείται η μνήμη fifo όπως και στον αλγόριθμο Skyline-Fifo. Εδώ όμως το σκεπτικό διαφέρει διότι διαθέτουμε επιπλέον πληροφορίες που αποκτήθηκαν από τη διαδικασία της δειγματοληψίας. Έτσι τώρα το μέγεθος της μνήμης fifo δεν ορίζεται πια από τον χρήστη αλλά προσδιορίζεται ανάλογα από το πόσο μεγάλο είναι το skyline σε σχέση με το μέγεθος της συλλογής. Η μόνη παράμετρος που ορίζεται από τον χρήστη είναι το μέγιστο επιτρεπόμενο μέγεθος μνήμης που μπορεί να χρησιμοποιηθεί. Το ποσοστό αυτού που τελικά χρησιμοποιείται θα είναι ίσο με το ποσοστό του skyline στο μέγεθος της συλλογής που εκτιμήθηκε. Έτσι αν μια συλλογή έχει μικρό skyline δεν χρειάζεται να ξοδεύεται πολλή μνήμη για αυτήν και να γίνονται πολλές συγκρίσεις ενώ όταν μια συλλογή έχει μεγάλο skyline θα μπορεί να έχει καλή απόδοση καθώς η μνήμη fifo ορίζεται στις ανάγκες της. Έτσι στη συνέχεια ο αλγόριθμος δουλεύει σε αυτή τη διαδικασία μαζί με την μνήμη fifo όπως και ο αλγόριθμος Skyline-fifo. Το μέγεθος της μνήμης ορίστηκε όπως αναφέραμε. Για επιπλέον αποτελεσματικότητα και μεγαλύτερο κέρδος στις απαιτούμενες συγκρίσεις, κατά την εκκίνηση της δεύτερης διαδικασίας, σε κάθε Mapper η μνήμη fifo δεν είναι άδεια αλλά γεμάτη με τα σημεία του skyline του δείγματος. Αν τα σημεία αυτά είναι περισσότερα από όσα χωράει η μνήμη τότε κρατούνται εκείνα με το μικρότερο άθροισμα συντεταγμένων ενώ αν ισχύει το ανάποδο και ο χώρος την μνήμης είναι μεγαλύτερος, κρατούνται όλα. Έτσι καθώς οι Mappers διαβάζουν την είσοδο, το κάθε νέο διάνυσμα συγκρίνεται με στοιχεία που έχουν ήδη βρεθεί ως skyline ανάμεσα σε άλλα. Τονίζεται πως τα στοιχεία της εισόδου δεν αναμειγνύονται με εκείνα του skyline του δείγματος ώστε να μην δημιουργηθούν τυχόν διπλότυπα που δεν υπάρχουν πραγματικά στη συλλογή, αλλά το skyline του δείγματος χρησιμοποιείται μόνο ώστε να χρειαστούν λιγότερες συγκρίσεις και να αξιοποιηθεί η διαθέσιμη

Σχήμα 5.4: Skyline-Sampling-Adapt-Fifo.

μνήμη με τον καλύτερο δυνατό τρόπο. Στη συνέχεια εφαρμόζεται το σκεπτικό fifo όπως και στον αλγόριθμο Skyline-Fifo. Για κάθε σημείο που συλλέγεται υπολογίζεται το άθροισμα των συντεταγμένων του, προωθείται στη φάση Shuffling και φτάνει με ταξινομημένο τρόπο ως προς το άθροισμα αυτό για να περάσει στη φάση Reduce. Εκεί με τον αλγόριθμο SFS υπολογίζονται τα τοπικά skylines στους Reducers τα οποία αποθηκεύονται για την επόμενη διαδικασία. Η τρίτη διαδικασία είναι ομοιότυπη με τη δεύτερη διαδικασία του SkylineFifo με μόνη διαφορά ότι το μέγεθος της μνήμης fifo δεν δίνεται από τον χρήστη αλλά είναι αυτό το οποίο υπολογίστηκε βάση της δειγματοληψίας. Αναφέρεται πως σε αυτή τη φάση η μνήμη fifo κατά την εκκίνηση των Mappers είναι άδεια. 5.5 Αλγόριθμος Skyline-Sampling-Adapt-Volume Στη μέθοδο αυτή o υπολογισμός του skyline της συλλογής ολοκληρώνεται σε τρεις MapReduce διαδικασίες με σκεπτικό ανάλογο με αυτό του αλγορίθμου Skyline-Sampling-Adapt-Fifo. Μια οπτική αναπαράσταση του αλγορίθμου φαίνεται στο σχήμα 5.5. Η μόνη διαφορά των δύο αυτών αλγορίθμων είναι ότι στη μνήμη που χρησιμοποιείται στους Mappers η οργάνωση δεν γίνεται βάση της λογικής fifo αλλά βάση του volume όπως και στον Skyline-Volume. 5.6 Αλγόριθμος Skyline-Sampling-Baseline Στη μέθοδο αυτή o υπολογισμός του skyline της συλλογής ολοκληρώνεται σε τρεις MapReduce διαδικασίες με σκεπτικό ανάλογο με αυτό του αλγορίθμου Skyline-Sampling-Adapt-Fifo. Μια οπτική αναπαράσταση του αλγορίθμου φαίνεται στο σχήμα 5.6. Στη πρώτη διαδικασία εκτελείται η δειγματοληψία όπως αυτή περιγράφηκε στον αλγόριθμο Skyline-Sampling-Adapt-Fifo. Η μόνη διαφορά εδώ είναι πως δεν χρειάζεται να εκτιμηθεί το ποσοστό της συλλογής που αποτελεί το skyline αλλά απλά να βρεθεί το skyline του δείγματος. Η δεύτερη διαδικασία είναι όπως η πρώτη του αλγορίθμου Skyline-Baseline. Υπάρχει μόνο μία διαφορά, εδώ αξιοποιείται το skyline του δείγματος και λειτουργεί σαν φίλτρο. Κάθε διάνυσμα που έρχεται ως είσοδος ελέγχεται με κάθε σημείο του. Αν κυριαρχηθεί από κάποιο δεν εξετάζεται περισσότερο. Έτσι ένα σημαντικό κομμάτι της συλλογής απορρίπτεται από την αρχή. Η τρίτη διαδικασία είναι ομοιότυπη με την δεύτερη του αλγορίθμου Skyline-Baseline. 5.7 Αλγόριθμος Skyline-Sampling-Fifo Στη μέθοδο αυτή o υπολογισμός του skyline της συλλογής ολοκληρώνεται σε τρεις MapReduce διαδικασίες με σκεπτικό ανάλογο με αυτό του αλγορίθμου Skyline-Sampling-Adapt-Fifo. Μια οπτική αναπαράσταση του αλγορίθμου φαίνεται στο σχήμα 5.7. Στη πρώτη διαδικασία εκτελείται η δειγματοληψία όπως αυτή περιγράφηκε στον αλγόριθμο Skyline-Sampling-Adapt-Fifo με μόνη διαφορά ότι εδώ δεν χρειά-

Σχήμα 5.5: Skyline-Sampling-Adapt-Volume.