Βελτιστοποίηση γενικών συνδέσεων σε συστήματα Spark

Σχετικά έγγραφα
Επερωτήσεις σύζευξης με κατάταξη

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Παράλληλος προγραμματισμός περιστροφικών αλγορίθμων εξωτερικών σημείων τύπου simplex ΠΛΟΣΚΑΣ ΝΙΚΟΛΑΟΣ

Προγραμματισμός ΙI (Θ)

1 Εισαγωγή στις Συνδυαστικές Δημοπρασίες - Combinatorial Auctions

Bubble Hack Οπτικοποίηση του αλγορίθμου ταξινόμησης Bubble Sort στο Scratch

Εργαστήριο Λειτουργικών Συστημάτων - Αλγόριθμοι Χρονοπρογραμματισμού. Εργαστηριακή Άσκηση

ΔΙΑΧΕΙΡΙΣΗ ΥΔΑΤΙΚΩΝ ΠΟΡΩΝ

Αξιοποίηση της συσχέτισης μεταξύ λέξεων για τη βελτίωση του προσεγγιστικού φιλτραρίσματος πληροφορίας

ΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο Δεύτερη Προγραμματιστική Εργασία

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

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

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

Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί

ΑΣΚΗΣΗ. Δημιουργία Ευρετηρίων Συλλογής Κειμένων

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

1 Συστήματα Αυτοματισμού Βιβλιοθηκών

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

Α. Θα καλεί υποπρόγραμμα INPUT που θα διαβάζει τις τιμές του πίνακα MAP.

Κεφάλαιο 3 Πολυπλεξία

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι

Διαφορές single-processor αρχιτεκτονικών και SoCs

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

Αρχιτεκτονική Υπολογιστών

Μία μέθοδος προσομοίωσης ψηφιακών κυκλωμάτων Εξελικτικής Υπολογιστικής

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

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

4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη.

ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ. Λειτουργικά Συστήματα Ι. Διδάσκων: Καθ. Κ. Λαμπρινουδάκης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

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

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

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

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

Η Oracle ανακοίνωσε την πιο ολοκληρωμένη λύση στον τομέα της Ανάλυσης δεδομένων στο Cloud

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

Θέμα Α Α3.1 ΤΕΛΟΣ 1ΗΣ ΑΠΟ 9 ΣΕΛΙΔΕΣ

ιαµέριση - Partitioning

Κεφ. 1: Εισαγωγή στην έννοια του Αλγορίθμου και στον Προγραμματισμό. Η έννοια του προβλήματος

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

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον


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

ΠΑΡΟΥΣΙΑΣΗ ΣΤΑΤΙΣΤΙΚΩΝ ΔΕΔΟΜΕΝΩΝ

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

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

ΠΑΡΑΔΕΙΓΜΑ ΣΤΟ BIZAGI ΕΘΝΙΚΗ ΣΧΟΛΗ ΔΗΜΟΣΙΑΣ ΔΙΟΙΚΗΣΗΣ & ΑΥΤΟΔΙΟΙΚΗΣΗΣ

Μέγιστη ροή. Κατευθυνόμενο γράφημα. Συνάρτηση χωρητικότητας. αφετηρίακός κόμβος. τερματικός κόμβος. Ροή δικτύου. με τις ακόλουθες ιδιότητες

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC

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

Τυχαιοκρατικοί Αλγόριθμοι

ΚΕΦΑΛΑΙΟ 2 ΔΙΑΤΑΞΕΙΣ, ΜΕΤΑΘΕΣΕΙΣ, ΣΥΝΔΥΑΣΜΟΙ

Οι Εξελικτικοί Αλγόριθμοι (ΕΑ) είναι καθολικοί στοχαστικοί αλγόριθμοι βελτιστοποίησης, εμπνευσμένοι από τις βασικές αρχές της φυσικής εξέλιξης.

8. Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο όταν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη.

αντίστοιχο γεγονός. Όταν όντως το κουμπί

Χρήστος Ι. Σχοινάς Αν. Καθηγητής ΔΠΘ. Συμπληρωματικές σημειώσεις για το μάθημα: «Επιχειρησιακή Έρευνα ΙΙ»

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

Εργασία για το μεταπτυχιακό μάθημα Παράλληλοι υπολογισμοί από τον φοιτητή Μουζακίδη Αλέξανδρο AM M 853

ΠΕΙΡΑΜΑΤΙΚΕΣ ΠΡΟΣΟΜΟΙΩΣΕΙΣ ΚΕΦΑΛΑΙΟ 4. είναι η πραγματική απόκριση του j δεδομένου (εκπαίδευσης ή ελέγχου) και y ˆ j

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

Κεφάλαιο 5. Το Συμπτωτικό Πολυώνυμο

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

Εισαγωγικές Έννοιες. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Η Μηχανική Μάθηση στο Σχολείο: Μια Προσέγγιση για την Εισαγωγή της Ενισχυτικής Μάθησης στην Τάξη

Σχέδια μαθημάτων για την δημιουργία συναρτήσεων υπολογισμού του ΜΚΔ και του ΕΚΠ στην MSWLogo

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

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

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων ΙΙ Σύνολο- Περιεχόμενο Μαθήματος

Πληροφοριακά Συστήματα Διοίκησης. Επισκόπηση μοντέλων λήψης αποφάσεων Τεχνικές Μαθηματικού Προγραμματισμού

ΚΕΦΑΛΑΙΟ 4. Τεχνική Ανίχνευσης του. Πτυχιακή Εργασία Σελίδα 95

Παράδειγμα 2. Λύση & Επεξηγήσεις. Τέλος_επανάληψης Εμφάνισε "Ναι" Τέλος Α2

Αλγόριθμοι Ταξινόμησης Μέρος 4

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

ΔΙΔΑΣΚΑΛΙΑ ΤΗΣ ΕΝΝΟΙΑΣ ΤΟΥ ΟΡΙΟΥ ΣΥΝΑΡΤΗΣΗΣ

«Αναβαθμισμένη υπηρεσία ασύγχρονης dτηλεκπαίδευσ ης ΠΣΔ:

Πρόταση για Ανασχηματισμό του Προγράμματος Προπτυχιακών Σπουδών της ΣΗΜΜΥ

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

Δίκτυα Υπολογιστών I Εργαστήρια

6. Στατιστικές μέθοδοι εκπαίδευσης

Υπολογιστικής Σκέψης

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

ΣΤΟΧΑΣΤΙΚΕΣ ΔΙΕΡΓΑΣΙΕΣ & ΒΕΛΤΙΣΤΟΠΟΙΗΣΗ Αίθουσα Νέα Κτίρια ΣΗΜΜΥ Ε.Μ.Π.

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

Transcript:

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Βελτιστοποίηση γενικών συνδέσεων σε συστήματα Spark ΜΕΤΑΠΤΥΧΙΑΚΗ ΔΙΑΤΡΙΒΗ του Μπούζμπα Φαίδωνα Θεσσαλονίκη, Σεπτέμβριος 2016

Περίληψη Στην παρούσα εργασία, παρουσιάζουμε και εξετάζουμε τρόπους για την αποδοτικότερη εκτέλεση γενικών συνδέσεων σε ένα σύστημα Spark που επεκτείνει το προγραμματιστικό μοντέλο MapRecuce. Συγκεκριμένα, επικεντρωνόμαστε στη βελτιστοποίηση του ποσοστού του κόστους επικοινωνίας, που προκύπτει από την υλοποίηση γενικών συνδέσεων στο σύστημα Spark και στην αποδοτικότερη κατανομή του φόρτου εργασίας, που επηρεάζεται από τη διασπορά των δεδομένων μέσα σε ένα κατανεμημένο σύστημα. Παράλληλα εκτελούμε πειράματα σε μεγάλα σύνολα δεδομένων και παρουσιάζουμε τα ευρήματα, που δείχνουν το ποσοστό της βελτιστοποίησης που έχει επιτευχθεί. Τέλος, αναφέρουμε μία ολοκληρωμένη μεθοδολογία για την εισαγωγή δεδομένων σε ένα σύστημα Spark και τη χρήση των κατάλληλων τεχνικών για τη μείωση του κόστους επικοινωνίας κατά την εκτέλεση γενικών συνδέσεων. 3

4

Abstract In this work, we present and examine ways for a more efficient run of theta joins in a Spark system which extends the MapReduce programming model. Specifically, we focus on the optimization of the percentage of the communication cost, which occurs by performing theta joins in a Spark system and on the efficiency of the workload, which is affected by the dispersion of the data in a distributed system. Meanwhile, we conduct experiments in big sets of data and we present the findings, which show the optimization percentage that has been accomplished. Finally, we mention a methodology for inserting data in a Spark system and using appropriate techniques in order to reduce the communication cost that occurs during the execution of natural join tasks. 5

6

Ευχαριστίες Θα ήθελα να ευχαριστήσω τον καθηγητή κ. Αναστάσιο Γούναρη για την καθοδήγηση και τη βοήθεια που μου παρείχε, καθώς και τη δυνατότητα που μου έδωσε να ασχοληθώ με την παρούσα εργασία. Επιπλέον θέλω να ευχαριστήσω την οικογένεια μου για την συμπαράσταση και την ηθική στήριξη που μου προσέφεραν κατά την εκπόνηση της διπλωματικής μου εργασίας, αλλά και καθ όλη τη διάρκεια των μεταπτυχιακών σπουδών μου. 7

8

Περιεχόμενα 1 Εισαγωγή... 13 1.1 Περιγραφή Προβλήματος... 13 1.2 Σκοπός της εργασίας... 14 2 Θεωρητικό Υπόβαθρο... 16 2.1 Εισαγωγή στο MapReduce... 16 2.2 Τι είναι το Apache Spark... 17 2.3 Το οικοσύστημα του Spark... 18 2.3.1 Spark Core... 19 2.3.2 Spark SQL... 19 2.3.3 Spark Streaming... 19 2.3.4 MLlib... 20 2.3.5 GraphX... 20 2.3.6 Cluster Managers... 20 2.4 Γενικές συνδέσεις με χρήση MapReduce... 21 2.5 Διαμερισμός join matrix... 23 3 Βελτιστοποίηση Κόστους Επικοινωνίας... 27 3.1 Ορισμός Κόστους Επικοινωνίας... 27 3.2 Διαδικασία Εύρεσης Κόστους Επικοινωνίας... 28 3.2.1 Δημιουργία του join matrix... 29 3.2.2 Διαμερισμός του join matrix σε partitions... 29 3.2.3 Ανάθεση partitions σε reducers... 29 3.2.4 Υπολογισμός κόστους επικοινωνίας... 29 3.3 Τεχνικές Βελτιστοποίησης Κόστους Επικοινωνίας... 30 3.3.1 Βελτιστοποίηση ανάθεσης partition σε reducer... 30 9

3.3.2 Βελτιστοποίηση κατανομής πλειάδων στον join matrix... 33 4 Πειραματική Αξιολόγηση... 39 4.1 Πειραματική αξιολόγηση βελτιστοποίησης ανάθεσης partition σε reducer... 39 4.2 Πειραματική αξιολόγηση βελτιστοποίησης κατανομής πλειάδων στον join matrix... 42 5 Μία ολοκληρωμένη προσέγγιση της υλοποίησης γενικών συνδέσεων... 44 5.1 Εγκατάσταση Spark συστήματος... 44 5.2 Προετοιμασία δεδομένων εισόδου... 44 5.3 Διαμερισμός του join matrix... 45 5.4 Ανάθεση partition σε reducer... 45 5.5 Εκτέλεση γενικών συνδέσεων... 45 6 Επίλογος... 47 6.1 Σύνοψη και συμπεράσματα... 47 6.2 Μελλοντικές επεκτάσεις... 48 7 Βιβλιογραφία... 49 10

11

12

1 Εισαγωγή Στη σημερινή πραγματικότητα του κλάδου της ανάλυσης των δεδομένων, ο όγκος της πληροφορίας που συγκεντρώνεται και δημιουργείται είναι σε πολλές περιπτώσεις κατά πολύ μεγαλύτερος της ικανότητας διαχείρισης της από το υλικό σε ένα μηχάνημα. Πλέον, η απότομη ανάπτυξη κοινωνικών δικτύων, εφαρμογών και online υπηρεσιών, καθώς και τα αποτελέσματα επιστημονικών πειραμάτων και προσομοιώσεων, δημιουργούν μία συνεχόμενη ροή μεγάλων δεδομένων που στις περισσότερες περιπτώσεις δεν αρκούμαστε να τα αποθηκεύσουμε, αλλά υπάρχει η απαίτηση για ανάλυση και διαχείριση αυτών με σκοπό την εξαγωγή νέας πληροφορίας και συμπερασμάτων [2,4]. Η ύπαρξη κατανεμημένων και παράλληλων συστημάτων υπολογιστών, βοηθάει στον παραπάνω στόχο και έχει προσφέρει λύσεις από πλευράς υλικού. Η ιδέα ότι προσθέτοντας περισσότερους κόμβους σε ένα υπάρχον σύστημα υπολογιστών θα βελτιώσει την ικανότητα και την ταχύτητα της ανάλυσης δεδομένων έχει μία σωστή βάση, αλλά δεν είναι πάντα η πιο οικονομική λύση και δεν είναι από μόνη της αρκετή. Εδώ είναι το σημείο όπου η εισαγωγή ενός προγραμματιστικού μοντέλου, του MapReduce, δίνει τη δυνατότητα της πλήρους εκμετάλλευσης του υλικού που είναι διαθέσιμου στο cluster, προσφέροντας στον αναλυτή εύκολη διαχείριση των δεδομένων και γρήγορη υλοποίηση και εκτέλεση χρονοβόρων θεωρητικά εργασιών [4]. Για τη χρήση αυτού του προγραμματιστικού μοντέλου, είναι απαραίτητη η ύπαρξη μίας πλατφόρμας, όπως είναι το Apache Spark, η οποία όχι μόνο παρέχει μία μηχανή εκτέλεσης του MapReduce, αλλά το επεκτείνει. Η συγκεκριμένη πλατφόρμα τείνει να γίνει η καθιερωμένη λύση για την ανάλυση των δεδομένων καθώς προσφέρει τις πλέον αποδοτικές λύσεις στη διαχείριση δεδομένων σε έναν cluster, ωστόσο ακριβώς επειδή πρόκειται για μία σχετική νέα τεχνολογία, επιδέχεται πληθώρα βελτιώσεων τόσο ως σύστημα όσο και ως τεχνικών επέκτασης του μοντέλου MapReduce. 1.1 Περιγραφή Προβλήματος Το μοντέλο MapReduce χρησιμοποιείται πλέον κατά κόρον για την ανάλυση και διαχείριση μεγάλων δεδομένων λόγω της αποδοτικότητας και της ταχύτητας που προσφέρει. Όμως, από τη στιγμή που χρησιμοποιείται για την οποιαδήποτε εργασία και ανάγκη που αφορά μεγάλα δεδομένα, είναι προφανές ότι δεν μπορεί να είναι πάντα βέλτιστο ως 13

προς την απόδοση του. Είναι αναμενόμενο ότι η έρευνα και η εισαγωγή νέων τεχνικών μπορεί να επιφέρει βελτίωση της απόδοσης του, ανάλογα με την εργασία για την οποία εισάγεται η χρήση του. Μία συνήθης χρήση του μοντέλου MapReduce είναι για την εκτέλεση γενικών συνδέσεων ανάμεσα σε μεγάλα σύνολα δεδομένων, το οποίο για παράδειγμα έχει νόημα για την εύρεση παρόμοιων εγγράφων μέσα σε ένα τεράστιο σύνολο. Η εκτέλεση όμως αυτών των γενικών συνδέσεων μέσα σε ένα κατανεμημένο σύστημα για ένα τεράστιο μέγεθος εισόδου έχει ένα κόστος μεταφοράς των δεδομένων εισόδου μεταξύ των κόμβων του συστήματος, το οποίο αποκαλούμε κόστος επικοινωνίας [5]. Για παράδειγμα, η υλοποίηση μίας γενικής σύνδεσης, από έναν κόμβο δικτύου μεταξύ κάποιων δεδομένων εισόδου τα οποία βρίσκονται σε διαφορετικές φυσικές τοποθεσίες μεταξύ τους, είναι προφανές ότι θα έχει μεγαλύτερο κόστος επικοινωνίας και χρόνο ο- λοκλήρωσης της εργασίας από την περίπτωση τα δεδομένα να βρίσκονταν στην ίδια φυσική τοποθεσία. Η ύπαρξη όμως των δεδομένων σε μία τοποθεσία, καθώς ο όγκος τους αυξάνεται είναι αδύνατη, κάτι που καθιστά την ύπαρξη κόστους επικοινωνίας βέβαιη. Η αποδοτική εκτέλεση αυτών των γενικών συνδέσεων, με την εφαρμογή τεχνικών που ως στόχο θα έχουν τη μείωση του κόστους επικοινωνίας αποτελεί μέχρι και σήμερα ένα από τα πιο ενδιαφέροντα προβλήματα σε περιβάλλοντα που υλοποιούν και επεκτείνουν το MapReduce, όπως είναι το Apache Spark, καθώς συνεχώς νέες τεχνικές διερευνώνται και εμφανίζονται με στόχο την βελτιστοποίηση των συνδέσεων αυτών. 1.2 Σκοπός της εργασίας Με την υπάρχουσα κατάσταση κατά την εκτέλεση γενικών συνδέσεων σε ένα μεγάλο σύνολο δεδομένων και με το σκεπτικό ότι η αποθήκευση των δεδομένων θα έχει γίνει σε ένα κατανεμημένο σύστημα υπολογιστών, υπάρχει μεγάλη πιθανότητα ότι η κατανομή των δεδομένων θα είναι τέτοια που η εκτέλεση αυτών των συνδέσεων δε θα είναι αποδοτική. Αυτό είναι προφανές, αν σκεφτούμε ότι η κατανομή των δεδομένων ενδεχομένως να είναι τόσο άνιση, που θα επιβαρύνει κάποιους συγκεκριμένους κόμβους στο cluster κατά 14

πολύ περισσότερο από άλλους, ενώ η διασπορά των δεδομένων μέσα στο δίκτυο θα α- ποτελεί χρονοβόρο παράγοντα κατά τη μεταφορά δεδομένων μεταξύ των κόμβων, κάτι που επιφέρει μεγάλο κόστος επικοινωνίας. Όμως η χρήση της πληροφορίας της τοπικότητας για τα δεδομένα εισόδου, πριν την υ- λοποίηση των συνδέσεων, θεωρητικά αποτελεί κύριο παράγοντα και στρατηγική για τη μείωση του κόστους επικοινωνίας κάτι που είναι και αντικείμενο μελέτης ως προς την ορθότητα του στο παρόν κείμενο. Σκοπός λοιπόν της παρούσας εργασίας είναι να διερευνήσει τη βελτιστοποίησης γενικών συνδέσεων με την έννοια της αποδοτικής ενσωμάτωσης της εκτέλεσης αυτών σε ένα Spark σύστημα, δίνοντας έμφαση στην κατανομή του φόρτου εργασίας μεταξύ των κόμβων και της μείωσης του κόστους επικοινωνίας, κάνοντας χρήση της πληροφορίας τοπικότητας των δεδομένων εισόδου. 15

2 Θεωρητικό Υπόβαθρο Σε αυτό το κεφάλαιο θα εξηγήσουμε τι είναι το προγραμματιστικό μοντέλο MapReduce και πώς αυτό χρησιμεύει στην υλοποίηση γενικών συνδέσεων, τι είναι ένα Spark σύστημα και πώς υλοποιεί και επεκτείνει το προγραμματιστικό μοντέλο MapReduce, καθώς και πώς βοηθάει στην ανάλυση δεδομένων. 2.1 Εισαγωγή στο MapReduce Για την ανάλυση, την επεξεργασία και τη δημιουργία μεγάλου όγκου δεδομένων, χρησιμοποιείται το προγραμματιστικό μοντέλο MapReduce, το οποίο περιλαμβάνεται ως μία επεκταμένη υλοποίηση στα συστήματα Spark που περιγράφονται παρακάτω. Προγράμματα γραμμένα με τη χρήση του MapReduce αυτόματα παραλληλίζονται και εκτελούνται σε ένα μεγάλο κατανεμημένο ή παράλληλο περιβάλλον. Το MapReduce είναι ένα προγραμματιστικό μοντέλο που επεξεργάζεται και παράγει μεγάλα σύνολα δεδομένων πάνω σε ένα δίκτυο υπολογιστών (cluster). Ουσιαστικά ένα πρόγραμμα σε MapReduce είναι ο συνδυασμός δύο συναρτήσεων, της map και της reduce. Ένας κεντρικός κόμβος (master) δέχεται μία εργασία ως είσοδο και την σπάει σε μικρότερα διεργασίες τις οποίες αναθέτει στους mappers και τους reducers. Παράλληλα, δέχεται ένα αρχείο εισόδου με τα δεδομένα της εργασίας, το οποίο επίσης σπάει σε μικρότερα τμήματα καθένα από τα οποία αναθέτει σε έναν mapper ώστε να εκτελέσει την map συνάρτηση. Η map συνάρτηση, δέχεται ένα σύνολο από ζεύγη <κλειδί εισόδου, τιμή> και παράγει ως έξοδο ένα σύνολο από ενδιάμεσα ζεύγη <ενδιάμεσο κλειδί εξόδου, τιμή>. Η reduce συνάρτηση, δέχεται τα ενδιάμεσα ζεύγη που παρήγαγε η map συνάρτηση ομαδοποιημένα με βάση τα ενδιάμεσα κλειδιά εξόδου, δηλαδή ένα σύνολο από ζεύγη <ενδιάμεσο κλειδί, [λίστα τιμών]> και παράγει την τελική έξοδο <κλειδί εξόδου, τιμή>. Η ευελιξία και η απλότητα του MapReduce, το καθιστούν ως το βασικότερο τρόπο επίλυσης προβλημάτων μεγάλης κλίμακας, όπως τη μηχανική μάθηση, την ταξινόμηση terabyte δεδομένων και την επεξεργασία γράφων. 16

Σχήμα 1: Το προγραμματιστικό μοντέλο MapReduce Το μοντέλο αυτό παρά την ευελιξία, την κλιμακωσιμότητα που παρέχει, την ανοχή σε σφάλματα και την απλότητα του, έχει ένα πολύ σημαντικό μειονέκτημα όταν χρησιμοποιείται για την υλοποίηση γενικών συνδέσεων (join) σε κατανεμημένα συστήματα: έχει πολύ υψηλό κόστος επικοινωνίας. Για να γίνει αυτό αντιληπτό, στο κεφάλαιο 2.4 παρουσιάζεται ο τρόπος με τον οποίο γίνεται συνήθως μία γενική σύνδεση με το MapReduce. 2.2 Τι είναι το Apache Spark Το Apache Spark είναι μία ενοποιημένη πλατφόρμα για την εκτέλεση υπολογισμών με χρήση συστάδων (cluster computing), σχεδιασμένη με τέτοιο τρόπο ώστε να είναι γρήγορη και γενικού σκοπού, με την οποίο γίνεται δυνατή η αποδοτική διαχείριση και ανάλυση μεγάλων δεδομένων [6,7]. Σε θέμα ταχύτητας, το Spark επεκτείνει το μοντέλο MapReduce ώστε να υποστηρίξει α- ποδοτικά περισσότερους τύπους υπολογισμού, όπως διαδραστικά ερωτήματα (interactive queries) και επεξεργασία ροών (stream processing). Η επιτυχία του στο θέμα βελτίωσης της ταχύτητας υπολογισμού έγκειται στην δυνατότητα του να κάνει υπολογισμούς στην κύρια μνήμη, αλλά και στην αποδοτικότερη εκτέλεση σύνθετων αλγορίθμων που τρέχουν στον δίσκο σε σχέση με το MapReduce. 17

Σε θέμα γενικότητας, το Spark έχει σχεδιαστεί να καλύπτει μία ευρεία γκάμα διαφορετικών τύπων εργασιών που απαιτούσαν την ύπαρξη πολλαπλών διαφορετικών κατανεμημένων συστημάτων στο παρελθόν. Με αυτό τον τρόπο είναι πλέον δυνατός ο συνδυασμός διαφορετικών τύπων υπολογισμού μέσω της ίδιας πλατφόρμας, κάτι που είναι μία αρκετά συνηθισμένη πρακτική και απαίτηση στην ανάλυση δεδομένων. Παράλληλα, αυτός ο σχεδιασμός μειώνει το διαχειριστικό φόρτο της συντήρησης διαφορετικών εργαλείων. Το Spark είναι σχεδιασμένο έτσι ώστε να είναι προσβάσιμο με πολλούς τρόπους, καθώς προσφέρει απλά APIs σε Python, Java, Scala και SQL καθώς και μεγάλο αριθμό ενσωματωμένων βιβλιοθηκών. Μπορεί επίσης να χρησιμοποιηθεί με άλλα εργαλεία διαχείρισης μεγάλων δεδομένων όπως για παράδειγμα να τρέξει σε συστάδες (clusters) Hadoop έχοντας πρόσβαση σε όλα τα δεδομένα του Hadoop συμπεριλαμβανομένου και του Cassandra. 2.3 Το οικοσύστημα του Spark To σύστημα Spark περιέχει πολλαπλά στενά συνδεδεμένα συστατικά. Στον πυρήνα του, το Spark είναι μία υπολογιστική μηχανή, υπεύθυνη για την χρονοδρομολόγηση, την κατανομή και την παρακολούθηση εφαρμογών που αποτελούνται από πολλές διεργασίες διασκορπισμένες σε μία συστάδα υπολογιστών. Επειδή ο πυρήνας του Spark είναι ταυτόχρονα γρήγορος και γενικού σκοπού, υποστηρίζει πολλαπλά, υψηλού επιπέδου συστατικά, εξειδικευμένα για ένα διάφορα είδη επεξεργασίας, όπως για παράδειγμα SQL ή μηχανική μάθηση. 18

Με αυτό τον τρόπο δίνεται η δυνατότητα συνδυασμού αυτών των συστατικών σε ένα project σα να είναι βιβλιοθήκες. Παράλληλα, επιτυγχάνεται μείωση των δαπανών με την εκτέλεση ενός μόνο συστήματος που ενσωματώνει όλα τα άλλα καθώς και δυνατότητα προσθήκης νέων συστημάτων στο μέλλον τα οποία θα είναι άμεσα διαθέσιμα στους ήδη υπάρχοντες χρήστες του Spark. Σχήμα 2: Το οικοσύστημα του Spark Παρακάτω θα παρουσιαστούν εν συντομία καθένα από τα βασικά συστατικά του Spark, όπως φαίνονται και στο Σχήμα 2 το οποίο αποτελεί σύνθεση των συστατικών που περιγράφονται στο [3]. 2.3.1 Spark Core Ο πυρήνας του Spark περιέχει τις βασικές λειτουργίες του Spark, συμπεριλαμβανομένων των συστατικών για τη χρονοδρομολόγηση, τη διαχείριση μνήμης, την ανοχή σε σφάλματα και την αλληλεπίδραση με συστήματα αποθήκευσης. 2.3.2 Spark SQL Παρέχει υποστήριξη ερωτημάτων SQL, παραλλαγών της, όπως της HiveQL, καθώς και υ- ποστήριξη εισαγωγής πολλών διαφορετικών μορφών δεδομένων, όπως πίνακες Hive, Parquet και JSON. 2.3.3 Spark Streaming Επιτρέπει τη διαχείριση ροών δεδομένων σε πραγματικό χρόνο, όπως για παραδείγματα τη διαχείριση logfiles που παράγονται από web servers. 19

2.3.4 MLlib Πρόκειται για μία βιβλιοθήκη που περιέχει συναρτήσεις μηχανικής μάθησης. Η MLlib παρέχει διάφορους αλγορίθμους μηχανικής μάθησης συμπεριλαμβανομένων της ταξινόμησης (classification), της παλινδρόμησης (regression), της συσταδοποίησης (clustering) και του συνεργατικού φιλτραρίσματος (collaborative filtering). 2.3.5 GraphX Πρόκειται για μία βιβλιοθήκη που επιτρέπει τη διαχείριση γράφων και την παράλληλη εκτέλεση υπολογισμών σε αυτούς. 2.3.6 Cluster Managers Επειδή το Spark έχει σχεδιαστεί έτσι ώστε να κλιμακώνεται αποδοτικά σε χιλιάδες υπολογιστικούς κόμβους, χωρίς να χάνει την ευελιξία του, το Spark μπορεί να τρέχει πάνω από μία ποικιλία cluster manager, όπως το Hadoop YARN, το Apache Mesos, το Amazon EC2 καθώς και ενός cluster manager που συμπεριλαμβάνεται στο ίδιο το Spark, το Standalone Scheduler. 20

2.4 Γενικές συνδέσεις με χρήση MapReduce Έχοντας περιγράψει το προγραμματιστικό μοντέλο MapReduce, ήρθε η ώρα να αναλύσουμε με ποιον τρόπο υλοποιούνται οι γενικές συνδέσεις με αυτό το προγραμματιστικό μοντέλο. Στο σημείο αυτό όμως καλό είναι να αναφερθεί, ότι παρόλο που στην παρούσα εργασία χρησιμοποιήθηκε ένα Spark σύστημα για την υλοποίηση των γενικών συνδέσεων, η φιλοσοφία του τρόπου λειτουργίας και του κόστους επικοινωνίας που προκύπτει παραμένει ίδια, είτε χρησιμοποιείται ένα Spark σύστημα, είτε ο πρόγονος του, το Hadoop, είτε κάποιο άλλο παρεμφερές σύστημα. Για να μπορέσουμε να υλοποιήσουμε μία γενική σύνδεση με χρήση MapReduce θα πρέπει να βρεθεί ένας κατάλληλος τρόπος να διαμερίσουμε την είσοδο των δεδομένων με τέτοιο τρόπο ώστε οι κόμβοι που θα αναλάβουν την υλοποίηση της σύνδεσης να έχουν όσο το δυνατόν γίνεται πιο ομοιόμορφο φόρτο εργασίας και όγκου δεδομένων. Για την επίτευξη αυτού του στόχου είναι απαραίτητη η χρήση ενός join matrix (JM). Ως join matrix μίας γενικής σύνδεσης R S ορίζουμε έναν πίνακα R γραμμών και S στηλών, όπως φαίνεται και στον αριστερό πίνακα του σχήματος 3. Οι αριθμοί σε κάθε γραμμή και στήλη αφορούν τον κόμβο στον οποίο βρίσκεται η κάθε πλειάδα, κάτι που στην κλασσική υλοποίηση γενικών συνδέσεων δε λαμβάνεται υπόψη. Στη συνέχεια διαμερίζουμε τον πίνακα σε ίσα partitions και αναθέτουμε το κάθε partition σε έναν reducer, που θα αναλάβει να υλοποιήσει τη σύνδεση για ένα μόνο partition. Μία τυπική διαμέριση ενός join matrix φαίνεται στο δεξιό πίνακα του σχήματος 3. Για τον τρόπο με τον οποίο διαμερίζεται ένας join matrix θα αναφερθούμε σε επόμενη ενότητα. Σχήμα 3: Διαμέριση ενός join matrix σε ίσα partitions και ανάθεση του κάθε partition σε έναν κόμβο reducer. 21

Για να μπορέσει ο κάθε reducer όμως να υλοποιήσει τη σύνδεση, πρέπει οι πλειάδες που αφορούν το partition για το οποίο είναι υπεύθυνος, να βρίσκονται σε αυτή τη φυσική τοποθεσία. Σε περίπτωση που ένας κόμβος χρειάζεται μία πλειάδα που βρίσκεται σε διαφορετική τοποθεσία, τότε πρέπει να του αποσταλεί. Αυτή η αποστολή πλειάδων μεταξύ κόμβων χρειάζεται ένα συγκεκριμένο χρόνο για να ολοκληρωθεί, ο οποίος επειδή οι κόμβοι βρίσκονται σε ένα κατανεμημένο σύστημα και όχι σε μία ενιαία τοποθεσία, δεν είναι αμελητέος. Το άθροισμα του χρόνου που χρειάζονται όλες οι πλειάδες για να αποσταλούν στους κόμβους που τις αιτούνται ορίζεται, όπως φαίνεται και στο σχήμα 4, ως το κόστος επικοινωνίας. Στο σχήμα 4 φαίνεται ένα partition το οποίο έχει ανατεθεί στον κόμβο 0. Η κάθε γραμμή και στήλη έχει σημειωμένη την τοποθεσία της αντίστοιχης εισόδου. Οπότε το κόστος ε- πικοινωνίας είναι σε τόσες μονάδες, όσο το άθροισμα των γραμμών και των στηλών των οποίων τα δεδομένα βρίσκονται σε διαφορετική τοποθεσία από τον κόμβο στον οποίο έχει ανατεθεί το partition και σημειώνονται με κόκκινο χρώμα. Αντιθέτως βλέπουμε ότι η τρίτη στήλη βρίσκεται στην ίδια τοποθεσία με τον κόμβο 0, οπότε σημειώνεται με πράσινο χρώμα, καθώς δε θα χρειαστεί να μεταφερθεί σε αυτό τον κόμβο, με αποτέλεσμα το κόστος επικοινωνίας να είναι συνολικά 5 μονάδες. Σχήμα 4: Παράδειγμα κόστους επικοινωνίας σε ένα partition ενός join matrix Επειδή όλη αυτή η διαδικασία εκτελείται σε ένα κατανεμημένο σύστημα, γίνεται εύκολα κατανοητό ότι όσο αυξάνεται ο όγκος δεδομένων και ο αριθμός των reducer, τόσο το κόστος επικοινωνίας θα μεγαλώνει σε σημαντικό βαθμό, αφού όλο και περισσότερες πλειάδες θα πρέπει να αποστέλλονται στους κατάλληλους reducers. Σκοπός λοιπόν, είναι να βρεθεί ένας κατάλληλος τρόπος ώστε να επιτυγχάνεται τέτοια διαμέριση του join matrix και τέτοια κατανομή των πλειάδων στους κόμβους, ώστε να ελαχιστοποιήσουμε το κόστος επικοινωνίας. 22

2.5 Διαμερισμός join matrix Έχουμε ήδη περιγράψει το ρόλο που επιτελεί ένας join matrix στην υλοποίηση γενικών συνδέσεων. Για να μπορέσουμε ωστόσο να εκτελέσουμε μία γενική σύνδεση μέσα σε ένα κατανεμημένο σύστημα, είναι απαραίτητος ο διαμερισμός του join matrix σε partitions. Με αυτόν τον τρόπο, κάθε partition θα ανατεθεί σε έναν reducer, που θα αναλάβει να υλοποιήσει για το δικό του κομμάτι τη γενική σύνδεση. Ο διαμερισμός ενός join matrix περιγράφεται αναλυτικά στο [1] και παρακάτω θα παρουσιάσουμε τα κύρια βήματα του: Αρχικά ορίζουμε ως τα παρακάτω μεγέθη που αφορούν μία γενική σύνδεση R S: R : Το σύνολο δεδομένων εισόδου της σχέσης R. S : Το σύνολο δεδομένων εισόδου της σχέσης S. r : Το σύνολο των reducer κόμβων στο κατανεμημένο σύστημα. Στη συνέχεια, με βάση τις παρακάτω 3 περιπτώσεις, βρίσκουμε σε ποια ανήκει ο join matrix που έχουμε δημιουργήσει και ανάλογα υλοποιούμε την διαμέριση: Περίπτωση 1: Αν ο πληθάριθμος του R και του S, είναι ακέραιο πολλαπλάσιο του R S /r, δηλαδή R = c R R S /r και S = c S R S /r, για ακέραιους c R, c S > 0, τότε ο join matrix μπορεί να διαμεριστεί σε c R επί c S κομμάτια μεγέθους c R R S /r επί c S R S /r το καθένα. 23

Σχήμα 5: Περίπτωση 1 διαμέρισης join matrix. Περίπτωση 2: Αν ο πληθάριθμος R < S /r, τότε ο join matrix μπορεί να διαμεριστεί σε μία μοναδική γραμμή από r ορθογώνια μεγέθους R επί S /r. Αντίστοιχα, στην περίπτωση που ο πληθάριθμος S < R /r, τότε ο join matrix μπορεί να διαμεριστεί σε μία μοναδική στήλη από r ορθογώνια μεγέθους S επί R /r. Σχήμα 6: Περίπτωση 2 διαμέρισης join matrix. Περίπτωση 3: Η τελευταία περίπτωση αφορά σύνολα δεδομένων εισόδου τέτοια ώστε S /r R S. Ορίζουμε ως c R = R / R S /r και c S = S / R S /r. Τα μεγέθη c R και c S, ουσιαστικά υποδεικνύουν πόσα βέλτιστα τετράγωνα με μέγεθος πλευράς R S /r μπορούμε να χωρέσουμε στον join matrix οριζοντίως και καθέτως α- ντίστοιχα. Από την ιδιότητα της ανίσωσης S /r R S μπορούμε να συμπε- 24

ράνουμε ότι c R 1 και c S 1. Ξεκινώντας από την πάνω αριστερή γωνία, δημιουργούμε αυτά τα τετράγωνα που ορίσαμε και καταλήγουμε σε μία περίπτωση όπου υπολείπονται μερικά κελιά του join matrix στις τελευταίες στήλες και γραμμές που δεν έχουν καλυφθεί. Τα κελιά αυτά αποτελούνται από μία οριζόντια λωρίδα με ύψος μικρότερο από R S /r κελιά και μία κάθετη λωρίδα με πλάτος μικρότερο R S /r κελιά. Καλύπτουμε αυτά τα υπολειπόμενα κελιά αυξάνοντας το ύψος και το πλάτος κάθε τετραγώνου με το οποίο καλύψαμε την υπάρχουσα περιοχή κατά ένα συντελεστή μεγέθους (1 + 1/min {c R, c S }). Εύκολα συμπεραίνομαι από τη στιγμή που c R, c S 1, ότι αυτός ο συντελεστής είναι το πολύ ίσος με 2. Ανακεφαλαιώνοντας αυτή την περίπτωση, μπορούμε να καλύψουμε ολόκληρο τον join matrix με c R γραμμές, κάθε μία εκ των οποίων αποτελείται από c S περιοχές οι οποίες είναι τετράγωνα με μέγεθος πλευράς ίσο με: (1 + 1/min {c R, c S }) R S /r 2 R S /r. Αντίστοιχα, η παραπάνω περίπτωση ισχύει και για σύνολα δεδομένων εισόδου τέτοια ώστε R /r S R. Σχήμα 7: Περίπτωση 3 διαμέρισης join matrix. 25

26

3 Βελτιστοποίηση Κόστους Επικοινωνίας 3.1 Ορισμός Κόστους Επικοινωνίας Έχουμε ήδη περιγράψει το κόστος επικοινωνίας σε γενικές συνδέσεις για κατανεμημένα συστήματα. Παρακάτω, θα ορίσουμε με μαθηματικό τρόπο το κόστος επικοινωνίας όπως μπορούμε να τον υπολογίσουμε για έναν join matrix τον οποίο έχουμε ήδη διαμερίσει σε κατάλληλα partitions. Έχουμε ένα join matrix NxM στοιχείων. Παράλληλα ορίζουμε τους παρακάτω πίνακες: Rarray με N στοιχεία, όπου το κάθε στοιχείο ορίζει την τοποθεσία της πλειάδας που βρίσκεται στην αντίστοιχη γραμμή του join matrix. Sarray με M στοιχεία, όπου το κάθε στοιχείο ορίζει την τοποθεσία της πλειάδας που βρίσκεται στην αντίστοιχη στήλη του join matrix. Reducers με r στοιχεία, όπου το κάθε στοιχείο ορίζει τον reducer στον οποίο ανατίθεται για κάθε partition του join matrix, ο οποίος θα αναλάβει και να εκτελέσει τη γενική σύνδεση για partition του join matrix που έχει αναλάβει. Παράλληλα ορίζουμε και τα παρακάτω μεγέθη: T C : Συνολικό κόστος επικοινωνίας C t : Κόστος επικοινωνίας για τη μεταφορά μίας πλειάδας σε έναν κόμβο P size : Μέγεθος του partition. Ορίζει δηλαδή έναν υπο-πίνακα του JM μεγέθους P size xp size C th : Συνολικό κόστος επικοινωνίας για την οριζόντια μεταφορά πλειάδων σε κόμβους. C tv : Συνολικό κόστος επικοινωνίας για την κάθετη μεταφορά πλειάδων σε κόμβους. Το συνολικό κόστος επικοινωνίας λοιπόν ορίζεται ως: T C = C th + C tv, όπου: Ν M/P size C th = C t, ι=1 j=0 27

i τέτοιο ώστε Rarray(i) διαφορετικό του Reducers( M/P size i/p size + j) και M N/P size C tv = C t, j=1 i=0 j τέτοιο ώστε Sarray(j) διαφορετικό του Reducers( j/p size + i N/P size ) Στο σχήμα 8 γίνονται καλύτερα κατανοητοί οι παραπάνω τύποι, όπου φαίνεται η διαμέριση ενός join matrix με την ανάθεση των partition σε κόμβους και η τοποθεσία των δεδομένων εισόδου. Στην πρώτη περίπτωση φαίνονται τα δεδομένα στις γραμμές και με βελάκια σε ποιους κόμβους θα πρέπει να σταλούν για να εκτελεστεί η σύνδεση, ενώ στην δεύτερη περίπτωση φαίνονται τα δεδομένα στις στήλες και με βελάκια σημειώνεται σε ποιους κόμβους θα πρέπει να μεταφερθούν για να εκτελεστεί η σύνδεση. Το άθροισμα του κόστους επικοινωνίας που προκύπτει από τη μεταφορά των δεδομένων στις γραμμές (C th ) και από τη μεταφορά των δεδομένων στις στήλες (C tv ) αποτελεί το συνολικό κόστος επικοινωνίας (T C ). Σχήμα 8: Παράδειγμα κόστους επικοινωνίας για οριζόντια και κάθετη μεταφορά πλειάδων. 3.2 Διαδικασία Εύρεσης Κόστους Επικοινωνίας Η διαδικασία εύρεσης του κόστους επικοινωνίας αποτελείται από τα εξής βήματα: 1. Δημιουργία του join matrix σύμφωνα με την τοποθεσία των πλειάδων των σχέσεων R και S που δίνονται. 2. Διαμερισμός του join matrix σε partitions 3. Ανάθεση του κάθε partition σε διαθέσιμο κόμβο-reducer. 28

4. Υπολογισμός του κόστους επικοινωνίας. 3.2.1 Δημιουργία του join matrix Όπως έχουμε ήδη εξηγήσει, το join matrix ουσιαστικά είναι ένας πίνακας NxM στοιχείων, όπου δοθέντων δύο σχέσεων R και S, σε κάθε γραμμή αντιστοιχούμε την τοποθεσία της κάθε πλειάδας της σχέσης R και σε κάθε στήλη την τοποθεσία της κάθε πλειάδας της σχέσης S. Συνεπώς η δημιουργία του join matrix είναι απλή με την προϋπόθεση ότι μας δίνεται η τοποθεσία της κάθε πλειάδας στο σύνολο των κόμβων που διαθέτουμε. 3.2.2 Διαμερισμός του join matrix σε partitions Ο διαμερισμός ενός join matrix περιγράφεται αναλυτικά στο [1]. Στόχος είναι να διαμερίσουμε το join matrix σε όσο το δυνατόν πιο ομοιόμορφα partitions, ώστε να αναλάβει το κάθε partition ένας reducer. Για τη διευκόλυνση μας, όσες φορές θα αναφερόμαστε σε διαμερισμό join matrix θα εννοούμε τη διαμέριση του σε partitions ίσου μεγέθους, δηλαδή θα εξαιρέσουμε περιπτώσεις όπου οι γραμμές ή οι στήλες είναι περιττές ή δεν μπορεί να γίνει διαίρεση σε ίσα κομμάτια εκτός και αν αναφέρουμε συγκεκριμένα μία τέτοια περίπτωση. 3.2.3 Ανάθεση partitions σε reducers Από τη στιγμή που έχει διαμεριστεί ο join matrix σε partitions, μπορεί να δοθεί το κάθε κομμάτι σε έναν διαφορετικό reducer. Έτσι κάθε reducer θα είναι επιφορτισμένος για να ολοκληρώσει τη σύνδεση μόνο για το partition που του έχει ανατεθεί. 3.2.4 Υπολογισμός κόστους επικοινωνίας Ο διαμερισμός του join matrix και η ανάθεση ενός reducer σε κάθε partition, επιφέρει σημαντικό κόστος επικοινωνίας, καθώς ο κάθε reducer θα πρέπει να ζητήσει τη μεταφορά των πλειάδων που περιέχονται στο partition για το οποίο είναι υπεύθυνος και δεν βρίσκονται στην ίδια τοποθεσία με αυτόν. Ο υπολογισμός του κόστους επικοινωνίας γίνεται με βάση τη διαδικασία που περιγράφηκε κατά τον ορισμό του κόστους επικοινωνίας. 29

3.3 Τεχνικές Βελτιστοποίησης Κόστους Επικοινωνίας Σύμφωνα με την διαδικασία που περιγράψαμε παραπάνω, το κόστος επικοινωνίας με μία τυχαία κατανομή θέσεων στις πλειάδες των σχέσεων είναι αρκετά σημαντικό. Επιπρόσθετα, η απλή ανάθεση partitions σε reducers γίνεται χωρίς κάποιο κριτήριο και ουσιαστικά αποτελεί ένα είδος τυχαίας ανάθεσης. Με βάση αυτές τις δύο παρατηρήσεις αναπτύξαμε τεχνικές με στόχο τον αποδοτικότερο υπολογισμό των γενικών συνδέσεων με μείωση του κόστους επικοινωνίας. 3.3.1 Βελτιστοποίηση ανάθεσης partition σε reducer Σύμφωνα με τις υπάρχουσες τεχνικές ανάθεσης partition σε reducer, όπως για παράδειγμα στο [1], η επιλογή ανάθεσης partition σε reducer γίνεται ουσιαστικά με έναν τυχαίο τρόπο, καθώς ανατίθεται το κάθε partition στο πρώτο διαθέσιμο reducer που υπάρχει. Για να μειώσουμε το κόστος επικοινωνίας, σκοπός είναι να μειώσουμε τις περιττές μεταφορές πλειάδων σε reducers που τις χρειάζονται αλλά δε βρίσκονται στην ίδια τοποθεσία με αυτούς. Έτσι, από τη στιγμή που διαμερίζουμε το join matrix σε partitions ακολουθούμε τα παρακάτω βήματα: 1. Για κάθε partition δημιουργούμε ένα πίνακα Count, r στοιχείων, όπου r είναι ο αριθμός των reducers και ταυτόχρονα ο αριθμός των διαφορετικών τοποθεσιών στις οποίες μπορούν να βρίσκονται οι πλειάδες των σχέσεων. 2. Σε κάθε πίνακα Count, υπολογίζουμε τη συχνότητα εμφάνισης της κάθε τοποθεσίας των πλειάδων που περιέχονται στο συγκεκριμένο partition. 3. Αφού ολοκληρωθεί αυτή η διαδικασία, ταξινομούμε τους πίνακες Count με φθίνουσα σειρά. 4. Όσο υπάρχουν διαθέσιμοι reducer και partitions που δεν έχουν ανατεθεί σε κάποιο reducer, αναθέτουμε το partition που περιέχει τη μεγαλύτερη συχνότητα εμφάνισης μίας τοποθεσίας στον αντίστοιχο reducer που βρίσκεται στην τοποθεσία αυτή. Παράλληλα διατηρούμε έναν πίνακα AvailableReducers, r στοιχείων, όπου σημειώνουμε ποιοι reducers παραμένουν διαθέσιμοι. Σε περίπτωση που πρέπει να 30

αναθέσουμε ένα partition σε έναν μη διαθέσιμο reducer, απλά κοιτάμε στους πίνακες Count για την αμέσως μικρότερη συχνότητα εμφάνισης μίας τοποθεσίας, μέχρι να αυτή να αντιστοιχεί σε κάποιον διαθέσιμο reducer. Σε περίπτωση που δύο ή παραπάνω τοποθεσίες έχουν την ίδια συχνότητα εμφάνισης και οι αντίστοιχοι reducers είναι διαθέσιμοι για να τους ανατεθεί το αντίστοιχο partition, τότε εξετάζεται η αμέσως επόμενη τιμή στους πίνακες Count, μέχρι να βρεθεί μία τιμή που να είναι μικρότερη των υπολοίπων. Μόλις βρεθεί, τότε ο reducer που αντιστοιχούσε στην τοποθεσία της οποίας η συχνότητα εμφάνισης ήταν ίδια με μίας ή περισσότερων άλλων τοποθεσιών, είναι αυτός στον ο- ποίο ανατίθεται το αντίστοιχο partition. 5. Με το που αναθέτουμε έναν reducer σε κάποιο partition, ορίζουμε στον πίνακα AvailableReducers τη μη διαθεσιμότητα του συγκεκριμένου reducer και επιστρέφουμε στο βήμα 4 για να ελέγξουμε αν υπάρχουν partitions τα οποία πρέπει να ανατεθούν σε reducer. Η παραπάνω διαδικασία κάνει πιο ορθή την ανάθεση των partitions στους reducers, ω- στόσο από μόνη της δεν είναι ικανή να μειώσει το κόστος επικοινωνίας. Πειραματικά, έχει φανεί ότι το κόστος επικοινωνίας μειώνεται με την παραπάνω τεχνική ανάθεσης σε σχέση με μία τυχαία ανάθεση partition σε reducer. Παρακάτω παρουσιάζεται ένα παράδειγμα εφαρμογής της παραπάνω διαδικασίας για την βελτιστοποίηση ανάθεσης partition σε reducers. 31

Βήμα 1: Δημιουργία πίνακα Count για κάθε partition. Βήμα 2: Υπολογισμός συχνότητας εμφάνισης τοποθεσιών για κάθε πίνακα Count. Βήμα 3: Φθίνουσα ταξινόμηση για κάθε πίνακα Count. Βήμα 4: Εύρεση μέγιστης συχνότητας εμφάνισης τοποθεσίας και ανάθεση reducer στο partition με ανανέωση της διαθεσιμότητας του reducer στον πίνακα AvailableReducers. Βήμα 5: Εύρεση επόμενης μέγιστης συχνότητας και έλεγχος διαθεσιμότητας του αντίστοιχου reducer. Βήμα 6: Περίπτωση ισοψηφίας. Συνεχίζουμε στο επόμενο στοιχείου κάθε πίνακα με σκοπό την εύρεση της ελάχιστης συχνότητας εμφάνισης τοποθεσίας. 32

Βήμα 7: Εύρεση ελάχιστης συχνότητας εμφάνισης. Ανάθεση reducer στο αρχικό partition με ανανέωση της διαθεσιμότητας του reducer στον πίνακα AvailableReducers. 3.3.2 Βελτιστοποίηση κατανομής πλειάδων στον join matrix Έχουμε παρατηρήσει ότι η βελτιστοποιημένη ανάθεση partitions σε reduces οδηγεί σε μείωση του κόστους επικοινωνίας. Ωστόσο, έχοντας μία τυχαία κατανομή των πλειάδων στον join matrix ενδεχομένως να μην έχουμε τη βέλτιστη μείωση κόστους επικοινωνίας που μπορούμε να έχουμε. Παρακάτω λοιπόν θα εξετάσουμε αν υπάρχει μία αποδοτικότερη κατανομή των πλειάδων, ώστε να μειωθούν και να εξισορροπηθούν οι μεταφορές πλειάδων μεταξύ των reducers. Η αρχική ιδέα είναι να παρατηρήσουμε πόσο μειώνεται το κόστος αν εφαρμόσουμε την τεχνική της βελτιστοποίησης ανάθεσης partitions σε reducers σε σχετικά ιδανικά δεδομένα εισόδου. Με τον όρο ιδανικά, εννοούμε την ύπαρξη και διάταξη πλειάδων στον join matrix με τέτοιο τρόπο ώστε στην κύρια διαγώνιο των partitions να βρίσκονται πλειάδες με τοποθεσία ίδια με την τοποθεσία του reducer στον οποίο θα ανατεθεί το κάθε partition, όπως φαίνεται και στο σχήμα 9. Βήμα 8: Τελική ανάθεση reducers σε partitions με την επαναληπτική εκτέλεση των βημάτων 4-7. Φυσικά, αυτή η τεχνική προϋποθέτει ότι τα δεδομένα είναι αυτής της μορφής ή τουλάχιστον μπορούμε μετακινώντας τα μέσα στον join matrix να έρθουν σε αυτή τη μορφή. Επίσης, παρά τη μείωση του κόστους επικοινωνίας που επιτυγχάνεται είναι προφανές 33

ότι η κατανομή βάρους στους reducers της κύριας διαγώνιου είναι πολύ μικρότερη από όλους τους άλλους reducers οι οποίοι ουσιαστικά θα πρέπει να περιμένουν να τους μεταφερθούν όλες οι πλειάδες για να εκτελέσουν τη γενική σύνδεση. Σχήμα 9: Παράδειγμα join matrix με ιδανική διάταξη πλειάδων. Σε τυχαία όμως δεδομένα η παραπάνω διάταξη δεν είναι πιθανή για αυτό και σε επόμενα κεφάλαια όπου και εξετάζεται πειραματικά η βελτιστοποίηση του κόστους επικοινωνίας, δε συμπεριλαμβάνεται η παραπάνω περίπτωση διάταξης. Παρόλα αυτά, μπορούμε να πετύχουμε μείωση κόστους επικοινωνίας, διατάσσοντας της πλειάδες δικαιότερα ως προς την άποψη κατανομής φόρτου των reducers. Ουσιαστικά, προσπαθούμε να μετακινήσουμε τις γραμμές και τις στήλες των πλειάδων με τέτοιο τρόπο ώστε μετά το διαμερισμό του join matrix να υπάρχει σε κάθε partition περίπου ίσος αριθμός πλειάδων που δε χρειάζεται να μεταφερθούν στο εκάστοτε reducer. Ουσιαστικά, θέλουμε σε κάθε partition να υπάρχει παρόμοιος αριθμός πλειάδων που είναι ήδη σε αυτή την τοποθεσία. Με αυτό τον τρόπο και ανάλογα με τα δεδομένα εισόδου πετυχαίνουμε μείωση κόστους επικοινωνίας χρησιμοποιώντας την βέλτιστη α- νάθεση partitions σε reducers της τάξεως του 10%-15%. Για την επίτευξη αυτού του στόχου, εξετάστηκε ο αλγόριθμος Bond Energy Algorithm (BEA) [8], ο οποίος προσπαθεί να φέρει κοινά στοιχεία σε κοντινά ή κατά προτίμηση ίδια partitions. Η εκτέλεση του ωστόσο είναι αρκετά χρονοβόρα, ειδικά σε μεγάλα σύνολα δεδομένων, οπότε η χρήση του εγκαταλείφθηκε στην παρούσα προσπάθεια, αλλά με βάση αυτή την ιδέα χρησιμοποιήθηκε η τεχνική της προσομοιωμένης ανόπτησης 34

(simulated annealing) με τρόπο που να πετυχαίνει το επιθυμητό αποτέλεσμα και να ολοκληρώνεται σε ένα λογικό χρόνο εκτέλεσης. Αρχικά, αφότου έχει ολοκληρωθεί το partitioning, υπολογίζεται ο αριθμός των στοιχείων με κοινή τοποθεσία σε κάθε partition του join matrix, ώστε τελικά να υπολογιστεί για κάθε partition το ποσοστό των κοινών στοιχείων. Στόχος είναι το ποσοστό των κοινών στοιχείων σε κάθε partition να είναι 100/«αριθμός partitions». Στη συνέχεια επαναληπτικά αντιμετατίθενται τυχαία δύο εγγραφές είτε στις γραμμές είτε στις στήλες του join matrix και επαναϋπολογίζονται τα ποσοστά των κοινών στοιχείων. Αν η τυχαία αντιμετάθεση οδηγήσει σε εξισορρόπηση του ποσοστού για τα partitions τα οποία αφορά, τότε επικυρώνεται η αντιμετάθεση, διαφορετικά πραγματοποιείται μία καινούργια τυχαία. Η διαδικασία σταματά όταν φτάσουμε στο ε- πιθυμητό ποσοστό ή όταν μετά από αρκετές συνεχόμενες τυχαίες αντιμεταθέσεις δεν παρατηρείται επιθυμητή μεταβολή προς το ζητούμενο τελικό ποσοστό. Ολοκληρώνοντας αυτή την τεχνική, αναθέτουμε τους reducers στα partitions σύμφωνα με την τεχνική της βελτιστοποιημένης ανάθεσης reducer σε partition. Ωστόσο, παρατηρούμε ότι όταν έχουμε λίγους reducers στους οποίους αναθέτουμε partitions, δεν υπάρχει ουσιαστική μείωση του κόστους επικοινωνίας σε σχέση με κόστος επικοινωνίας που υπολογίζουμε όταν κάνουμε την χρήση της βελτιστοποιημένης ανάθεσης reducer σε partition χωρίς όμως τη βελτιστοποίηση κατανομής των πλειάδων στον join matrix που περιγράψαμε παραπάνω. Μάλιστα, παρατηρείται ότι όσο αυξάνουμε των αριθμό των reducer, αυξάνεται και το κόστος επικοινωνίας, κάτι που είχαμε καταφέρει να κρατήσουμε σε χαμηλότερα επίπεδα όταν χρησιμοποιούσαμε μόνο την τεχνική της βελτιστοποιημένης ανάθεσης reducer σε partition. Αυτό είναι και ένα λογικό αποτέλεσμα, καθώς μπορεί να έχουμε καταφέρει να κάνουμε δικαιότερη το ποσοστό των στοιχείων που βρίσκονται σε κοινή τοποθεσία για τον κάθε partition, ωστόσο δεν παύουν όλα αυτά τα στοιχεία να πρέπει να μεταφερθούν στις τοποθεσίες όλων των άλλων partitions που βρίσκονται σε κοινή γραμμή και στήλη με το partition στο οποίο βρίσκονται. Επίσης, όσο αυξάνεται ο αριθμός των reducer, άρα και των partitions, είναι προφανές ότι θα πρέπει να μεταφερθεί το κάθε στοιχείο σε ακόμα περισσότερους reducers. 35

Ωστόσο, αν μπορούσαμε να κρατήσουμε ένα θετικό από αυτή την τεχνική είναι ότι η κατανομή φόρτου πλέον έχει βελτιωθεί, καθώς πλέον παρόμοιος αριθμός στοιχείων πρέπει να σταλούν μεταξύ των reducers, με αποτέλεσμα οι reducers να έχουν τις πλειάδες που αιτούνται περίπου στον ίδιο χρόνο. Μπορεί λοιπόν στην περίπτωση που απαιτούμε να κρατηθεί το κόστος επικοινωνίας σε χαμηλά επίπεδα, η βελτιστοποίηση της κατανομής φόρτου που πετύχαμε να μην είναι ικανοποιητική, αλλά αν χρησιμοποιήσουμε λίγους σχετικά reducers, τότε με βάση των αποτελεσμάτων που παρατηρήσαμε, θα έχουμε όντως βελτιστοποιήσει και το κόστος και την κατανομή φόρτου. Παρακάτω παρουσιάζεται ένα παράδειγμα εφαρμογής της παραπάνω διαδικασίας για την βελτιστοποίηση κατανομής πλειάδων στον join matrix. 36

Βήμα 1: Υπολογισμός κοινών στοιχείων για κάθε partition. Βήμα 2: Επιλογή τυχαίων πλειάδων για αντιμετάθεση. Βήμα 3: Έλεγχος βελτίωσης ποσοστού κοινών στοιχείων. Αποδεκτή αντιμετάθεση πλειάδων. Βήμα 4: Επιλογή τυχαίων πλειάδων για αντιμετάθεση. 37

Βήμα 5: Έλεγχος βελτίωσης ποσοστού κοινών στοιχείων. Μη αποδεκτή αντιμετάθεση πλειάδων. 38

4 Πειραματική Αξιολόγηση Για να τεκμηριωθούν τα αποτελέσματα των παραπάνω τεχνικών βελτιστοποίησης κόστους επικοινωνίας, αναπτύχθηκε λογισμικό σε java, το οποίο προσομοίωνε όλη τη διαδικασία εισαγωγής δεδομένων, της διαμέρισης τους σε partitions, της εξεύρεσης του κόστους επικοινωνίας κατά την εκτέλεση μίας γενικής σύνδεσης και της βελτίωσης του κατά την εφαρμογή μίας τεχνικής για τη βελτιστοποίησης του. Κατά την εκτέλεση των πειραμάτων δοκιμάζουμε διαφορετικά μεγέθη στο σύνολο των δεδομένων εισόδου και στον αριθμό των reducers, ενώ για τα αποτελέσματα των πειραμάτων λαμβάνουμε υπόψη τους μέσους όρους των αποτελεσμάτων για 1000 εκτελέσεις τους. 4.1 Πειραματική αξιολόγηση βελτιστοποίησης ανάθεσης partition σε reducer Στους παρακάτω πίνακες και γραφήματα, παρουσιάζονται τα αποτελέσματα της τεχνικής βελτιστοποίησης κόστους επικοινωνίας όταν χρησιμοποιείται η τεχνική της βελτιστοποίησης ανάθεσης partition σε reducer. Στις στήλες έχουμε το μέγεθος των δεδομένων εισόδου ανά περίπτωση, δηλαδή το μέγεθος του R και του S, ενώ στις γραμμές έχουμε τον αριθμό των reducer σε κάθε εκτέλεση πειράματος. Η διαφορά μεταξύ των δύο γραφημάτων έγκειται στον τρόπο που είναι χωρισμένα τα δεδομένα εισόδου στον join matrix. Στην πρώτη περίπτωση, τα δεδομένα είναι ομοιόμορφα διασκορπισμένα σε όλες τις τοποθεσίες των κόμβων (uniform data location). Στην δεύτερη περίπτωση ωστόσο, εξετάζεται η βελτιστοποίηση του κόστους επικοινωνίας ό- ταν τα δεδομένα βρίσκονται αρχικά αποκλειστικά σε μία μοναδική τοποθεσία (all in one data location). 39

Reducers Reducers Data Location Optimization Technique Uniform Datasize Assign 16 128 1024 10240 102400 Reducers 2 40.41% 33.45% 52.34% 50.01% 50.09% 4 20.84% 18.48% 19.16% 22.17% 24.30% 9 18.57% 18.03% 18.14% 21.61% 22.08% 16 16.91% 17.58% 17.17% 17.06% 20.54% 25 16.05% 17.07% 16.96% 19.60% 36 16.01% 15.87% 15.17% 17.83% 49 13.28% 13.14% 13.98% 17.19% 64 11.21% 11.28% 13.86% 16.98% Πίνακας 1: Ποσοστό βελτίωσης κόστους επικοινωνίας με εφαρμογή της μεθόδου βελτιστοποίησης ανάθεσης partition σε reducer και ομοιόμορφη κατανομή δεδομένων στον join-matrix. Data Location Optimization Technique All in One Datasize Assign 16 128 1024 10240 102400 Reducers 2 100.00% 100.00% 100.00% 100.00% 100.00% 4 25.02% 26.47% 27.70% 26.75% 24.07% 9 24.92% 25.79% 27.09% 26.51% 22.19% 16 16.58% 21.24% 26.62% 19.62% 21.62% 25 17.15% 25.27% 16.62% 21.13% 36 16.96% 23.48% 15.60% 19.18% 49 9.48% 21.95% 15.49% 15.57% 64 8.99% 20.16% 15.31% 12.19% Πίνακας 2: Ποσοστό βελτίωσης κόστους επικοινωνίας με εφαρμογή της μεθόδου βελτιστοποίησης ανάθεσης partition σε reducer και ύπαρξη όλων των δεδομένων σε μία τοποθεσία στον Join-matrix. 40

Ποσοστό Βελτιστοποίησης Ποσοστό Βελτιστοποίησης Βελτιστοποίηση κόστους επικοινωνίας με ανάθεση partition σε reducer Τοποθεσία δεδομένων: Ομοιόμορφη 60.00% 50.00% 40.00% 30.00% 20.00% 10.00% 0.00% Μέγεθος εισόδου (Πλήθος στοιχείων) 2 4 9 16 25 36 49 64 Αριθμός reducers 16 128 1024 10240 102400 Γράφημα 1: Ποσοστό βελτίωσης κόστους επικοινωνίας με εφαρμογή της μεθόδου βελτιστοποίησης ανάθεσης partition σε reducer και ομοιόμορφη κατανομή δεδομένων στον join-matrix. Βελτιστοποίηση κόστους επικοινωνίας με ανάθεση partition σε reducer Τοποθεσία δεδομένων: Όλα σε ένα κόμβο 120.00% 100.00% 80.00% 60.00% 40.00% 20.00% 0.00% Μέγεθος εισόδου (Πλήθος στοιχείων) 2 4 9 16 25 36 49 64 Αριθμός reducers 16 128 1024 10240 102400 Γράφημα 2: Ποσοστό βελτίωσης κόστους επικοινωνίας με εφαρμογή της μεθόδου βελτιστοποίησης ανάθεσης partition σε reducer και ύπαρξη όλων των δεδομένων σε μία τοποθεσία στον Join-matrix. 41

Reducers 4.2 Πειραματική αξιολόγηση βελτιστοποίησης κατανομής πλειάδων στον join matrix Στον παρακάτω πίνακα και γράφημα, παρουσιάζονται τα αποτελέσματα της τεχνικής βελτιστοποίησης κόστους επικοινωνίας όταν χρησιμοποιείται η τεχνική της βελτιστοποίησης κατανομής πλειάδων στον join matrix, όπως αυτή περιγράφηκε στο κεφάλαιο 3.3.2. Στις στήλες έχουμε το μέγεθος των δεδομένων εισόδου ανά περίπτωση, δηλαδή το μέγεθος του R και του S, ενώ στις γραμμές έχουμε τον αριθμό των reducer σε κάθε εκτέλεση πειράματος. Αρχικά, τα δεδομένα είναι τυχαία διασκορπισμένα στους κόμβους του κατανεμημένου δικτύου. Το αποτέλεσμα της τεχνικής αυτής είναι αφότου διαμεριστεί ο join matrix είναι να υπάρχει πλέον ομοιόμορφη κατανομή της τοποθεσίας των δεδομένων σε κάθε partition που έχει δημιουργηθεί στον join matrix και στη συνέχεια να γίνει η ανάθεση των reducer σε κάθε partition. Στη συγκεκριμένη περίπτωση λοιπόν, εξετάζεται η τυχαία κατανομή των δεδομένων στους κόμβους, καθώς η τεχνική προϋποθέτει να εξετάσει τη βελτιστοποίηση του κόστους επικοινωνίας καθώς αναδιατάσσει τον join matrix με τέτοιο τρόπο ώστε να γίνει ομοιόμορφη η κατανομή των δεδομένων. Data Location Optimization Technique Random Datasize Rearrange 16 128 1024 10240 102400 Array 2 40.38% 33.40% 52.29% 50.00% 50.03% 4 20.88% 18.49% 19.11% 22.15% 24.28% 9 17.45% 17.62% 17.20% 19.24% 22.29% 16 16.00% 16.92% 16.82% 18.93% 20.81% 25 15.92% 16.31% 17.66% 17.89% 36 12.77% 13.91% 16.21% 17.56% 49 12.65% 12.14% 14.99% 16.73% 64 11.84% 11.83% 14.52% 16.44% Πίνακας 3: Ποσοστό βελτίωσης κόστους επικοινωνίας με εφαρμογή της μεθόδου βελτιστοποίησης κατανομής πλειάδων στον join-matrix και τυχαία κατανομή δεδομένων στον join-matrix. 42

Ποσοστό Βελτιστοποίησης Βελτιστοποίηση κόστους επικοινωνίας με ανακατανομή πλειάδων στον join matrix Τοποθεσία δεδομένων: Τυχαία 60.00% 50.00% 40.00% 30.00% 20.00% 10.00% 0.00% Μέγεθος εισόδου (Πλήθος στοιχείων) 2 4 9 16 25 36 49 64 Αριθμός reducers 16 128 1024 10240 102400 Γράφημα 3: Ποσοστό βελτίωσης κόστους επικοινωνίας με εφαρμογή της μεθόδου βελτιστοποίησης κατανομής πλειάδων στον join-matrix και τυχαία κατανομή δεδομένων στον join-matrix. 43

5 Μία ολοκληρωμένη προσέγγιση της υλοποίησης γενικών συνδέσεων Στο κεφάλαιο αυτό, θα παρουσιάσουμε μία ολοκληρωμένη, end-to-end προσέγγιση της υλοποίησης γενικών συνδέσεων με βελτιστοποίηση του κόστους επικοινωνίας μέσω ε- νός συστήματος spark, από την συγκέντρωση των δεδομένων εισόδου και της γνώσης της τοποθεσίας τους, μέχρι την υλοποίηση της γενικής σύνδεσης με βάση την τεχνική της βελτιστοποίησης ανάθεσης partition σε reducer. 5.1 Εγκατάσταση Spark συστήματος Σύμφωνα με την επίσημη σελίδα του Apache Spark [6], για την εγκατάσταση του συστήματος Spark σε περιβάλλον Linux, αρκεί το κατέβασμα του συμπιεσμένου πακέτου, η αποσυμπίεση του και ένα απλό build μέσω της εντολής: $ sbt/sbt assembly Παράλληλα φυσικά, πρέπει να υπάρχει εγκατεστημένη η Java, ενώ χρήσιμη είναι και η εγκατάσταση της γλώσσας προγραμματισμού Scala, για την εκτέλεση προγραμμάτων μέσω του Spark γραμμένα σε αυτή τη γλώσσα. Φυσικά, αυτό δεν περιορίζει τον χρήστη να χρησιμοποιεί μόνο αυτή τη γλώσσα, καθώς έχουμε ήδη αναφέρει ότι εφαρμογές σε spark μπορούν να τρέχουν γραμμένες και σε άλλες γλώσσες όπως Java, Python, R κλπ. Αφότου εγκαταστήσουμε το Spark, μπορούμε να προχωρήσουμε στην υλοποίηση γενικών συνδέσεων σύμφωνα με τις παρακάτω υπο-ενότητες. Η διαδικασία που περιγράφεται ακολούθως έχει το πλεονέκτημα ότι μπορεί να υλοποιηθεί σε όποια διαθέσιμη γλώσσα επιθυμεί ο χρήστης, όπως έχουμε ήδη αναφέρει και απλά στο τέλος τρέχει το αντίστοιχο εκτελέσιμο αρχείο μέσω του Spark συστήματος. 5.2 Προετοιμασία δεδομένων εισόδου Τα δεδομένα εισόδου και ο τρόπος που αυτά θα εισαχθούν στο σύστημα είναι ζωτικής σημασίας για την αποτελεσματική μείωση του κόστους επικοινωνίας. Τα δεδομένα πρέπει να αναγράφουν τη σχέση στην οποία ανήκουν, δηλαδή είτε την R είτε την S, την τιμή τους αλλά και την τοποθεσία στην οποία βρίσκονται, δηλαδή τον κόμβο του υπολογιστι- 44

κού συστήματος στον οποίο είναι το καθένα αποθηκευμένο. Αν πληρούν αυτά τα κριτήρια, τότε μπορούν να εισαχθούν σε έναν join matrix, όπου σε κάθε γραμμή θα έχουμε πλειάδες της σχέσης R και σε κάθε στήλη πλειάδες της σχέσης S. 5.3 Διαμερισμός του join matrix Σύμφωνα με το κεφάλαιο 2.5 και όπως περιγράφεται και στο [1], διαμερίζουμε τον join matrix σε partitions, ανάλογα και με τους reducers που διαθέτουμε ή θέλουμε να χρησιμοποιήσουμε. Κατά προτίμηση, προσπαθούμε να έχουμε reducers που να είναι τετράγωνα ακεραίων καθώς σε διαφορετική περίπτωση, με την τεχνική διαμέρισης που χρησιμοποιούμε, θα μένουν ανεκμετάλλευτοι reducers. 5.4 Ανάθεση partition σε reducer Αφού έχουμε διαμερίσει τον join matrix, πρέπει να αναθέσουμε σε κάθε partition έναν reducer. Σύμφωνα και με τα πειραματικά αποτελέσματα, θα χρησιμοποιούσαμε σε αυτή την περίπτωση την τεχνική της βελτιστοποίησης ανάθεσης partition σε reducer εκμεταλλευόμενοι τη γνώση της τοποθεσίας των δεδομένων εισόδου που υπάρχουν στον join matrix. Φυσικά, ο χρήστης μπορεί να χρησιμοποιήσει και κάποια άλλη τεχνική από αυτές που αναφέραμε ή μία που έχει αναπτύξει ο ίδιος, αρκεί στο τέλος να έχουν ορθώς ανατεθεί όλα τα partitions σε κάποιο reducer. 5.5 Εκτέλεση γενικών συνδέσεων Πλέον μπορούμε να εκτελέσουμε τη γενική σύνδεση των δεδομένων εισόδου. Για κάθε partition, οι πλειάδες οι οποίες δε βρίσκονται στην ίδια τοποθεσία με τον reducer στον οποίο έχει ανατεθεί το partition, αποστέλλονται σε αυτόν. Με την αποστολή των πλειάδων, μπορούν να εκτελεστούν οι γενικές συνδέσεις, χρησιμοποιώντας το προγραμματιστικό μοντέλο MapReduce και στο τέλος να συνδυαστούν τα αποτελέσματα σε ένα αρχείο εξόδου. 45

46

6 Επίλογος 6.1 Σύνοψη και συμπεράσματα Στα προηγούμενα κεφάλαια παρουσιάσαμε τα συστήματα Spark, καθώς και το προγραμματιστικό μοντέλο MapReduce το οποίο αυτά επεκτείνουν. Αναφέρθηκαν τα πλεονεκτήματα χρήσης τους στην ανάλυση και επεξεργασία μεγάλων δεδομένων και πώς χρησιμοποιούνται στην υλοποίηση γενικών συνδέσεων. Παράλληλα αναλύσαμε τον τρόπο που υπολογίζονται και εκτελούνται οι γενικές συνδέσεις, εξηγώντας τη χρήση ενός join matrix, τον τρόπο που αυτό διαμερίζεται σε partitions και το λόγο που προκύπτει το κόστος επικοινωνίας από όλη αυτή τη διαδικασία. Στη συνέχεια, ορίζουμε με μεγαλύτερη σαφήνεια το κόστος επικοινωνίας και πώς μπορούμε να το υπολογίσουμε κατά την εκτέλεση μίας γενικής σύνδεσης. Με την ολοκλήρωση όλων των παραπάνω ορισμών, παρουσιάζουμε τρόπους μείωσης του κόστους επικοινωνίας εκμεταλλευόμενοι τη γνώση της αρχικής τοπικότητας των δεδομένων εισόδου. Αρχικά, εξηγούμε την βελτιστοποίηση ανάθεσης partition σε reducer παραθέτοντας παραδείγματα υλοποίησης της τεχνικής αυτής, ενώ συνεχίζουμε παρουσιάζοντας την βελτιστοποίηση κατανομής πλειάδων στον join matrix και εξηγώντας γιατί αυτή η μέθοδος παρά τη θεωρητική της υπεροχή τελικά δεν προσφέρει ουσιαστική μείωση του κόστους επικοινωνίας σε σχέση με την προηγούμενη μέθοδο. Τέλος, παραθέτουμε τα αποτελέσματα πειραματικής αξιολόγησης των μεθόδων που παρουσιάστηκαν, χρησιμοποιώντας διάφορα μεγέθη του συνόλου εισόδου και των reducer που χρησιμοποιούνται για την εκτέλεση των γενικών συνδέσεων, ενώ διαφοροποιούμε την κατανομή των δεδομένων στον join matrix σε κάθε πείραμα. Ουσιαστικά, παρατηρούμε μία βελτιστοποίηση του κόστους επικοινωνίας με τις μεθόδους που παρουσιάσαμε η οποία καθώς αυξάνεται το σύνολο δεδομένων και ο αριθμός των reducer, τείνει στο 15%. Αυτό το ποσοστό είναι ενθαρρυντικό, παρόλο που εξετάζεται στην παρούσα εργασία για σχετικά μικρά σύνολα δεδομένων και για μικρό αριθμό reducer και μπορεί να αποτελέσει έναυσμα για περαιτέρω διερεύνηση τεχνικών με στόχο τη μείωση του κόστους επικοινωνίας για ακόμα μεγαλύτερα σύνολα δεδομένων και πολλούς κόμβους που εκτελούν γενικές συνδέσεις. 47

6.2 Μελλοντικές επεκτάσεις Η παρούσα εργασία θα μπορούσε να επεκταθεί μελλοντικά με διάφορους τρόπους. Θα μπορούσε να εξεταστεί η μείωση του κόστους επικοινωνίας με πολύ μεγαλύτερη είσοδο δεδομένων και σε ένα πολύ μεγαλύτερο υπολογιστικό σύστημα. Παράλληλα, μπορούν να εξεταστούν εναλλακτικές μέθοδοι για τη βελτιστοποίηση του κόστους επικοινωνίας, οι οποίες ενδεχομένως θα μπορούσαν να επεκταθούν στην εύρεση μίας πιο αποδοτικότερης διαμέρισης του αρχικού join matrix που θα οδηγούσε σε καλύτερες μεθόδους από αυτές που παρουσιάστηκαν. Ο χώρος της βελτιστοποίησης γενικών συνδέσεων με συστήματα Spark είναι σχετικά καινούριος, οπότε οποιαδήποτε ενασχόληση σε αυτή την κατεύθυνση μπορεί να αποδειχτεί αρκετά αποδοτική για την εξέλιξη των συστημάτων Spark και της χρήσης τους στην ανάλυση και επεξεργασία μεγάλων δεδομένων. 48

7 Βιβλιογραφία [1] A. Okcan και M. Riedewald, «Processing Theta-Joins using MapReduce,» σε SIGMOD'11, Athens, Greece, 2011. [2] A. Metwally και C. Faloutsos, «V-SMART-Join: A Scalable MapReduce Framework for All-Pair Similarity Joins of Multisets and Vectors,» Proceedings of the VLDB Endowment, Vol. 5, No. 8, 2012. [3] H. Karau, A. Konwinski, P. Wendell και M. Zaharia, Learning Spark, O'Reilly, 2015. [4] I. Koumarelas, A. Naskos και A. Gounaris, «Binary Theta-Joins using MapReduce: Efficiency Analysis and Improvements,» Workshop Proceedings of the EDBT/ICDT Joint Conference, 2014. [5] O. Polychroniou, R. Sen και K. Ross, «Track Join: Distributed Joins with Minimal Network Traffic,» σε SIGMOD'14, Snowbird, UT, USA, 2014. [6] «Apache Spark,» [Ηλεκτρονικό]. Available: http://spark.apache.org/. [7] «Apache,» [Ηλεκτρονικό]. Available: http://apache.org/. [8] P. Arabie και L. Hubert, «The bond energy algorithm revisited,» IEEE Trans. Syst. Man., αρ. 20, pp. 268-274, 1990. [9] W. McCormick, P. Schweitzer και T. White, «Problem decomposition and data reorganization by a clustering technique,» Oper. Res., αρ. 20, pp. 993-1009, 1972. 49