Κατανεμημένος Προγραμματισμός



Σχετικά έγγραφα
Εισαγωγή. Κατανεµηµένα Συστήµατα 01-1

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

Κατανεμημένα Συστήματα: Θεωρία και Προγραμματισμός. Ενότητα # 1: Εισαγωγή Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Τεχνολογικά Επιτεύγµατα. Πλεονεκτήµατα. Ορισµός Κατανεµηµένου Συστήµατος. Μειονεκτήµατα. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο

Σχολή Προγραµµατιστών Ηλεκτρονικών Υπολογιστών (ΣΠΗΥ) Τµήµα Προγραµµατιστών Σειρά 112

EPL 660: Lab 4 Introduction to Hadoop

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

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

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

Κεφάλαιο 3. Διδακτικοί Στόχοι

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

SNMP ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΙΙ

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

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

Αρχιτεκτονικές κατανεμημένων συστημάτων. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 12

Αρχές Δικτύων Επικοινωνιών. Επικοινωνίες Δεδομένων Μάθημα 4 ο

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

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

ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ Ι. Σημειώσεις Θεωρίας

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

ΚΕΦΑΛΑΙΟ 1.7. Πρωτόκολλα και Αρχιτεκτονική Δικτύου

Διάρθρωση. Δίκτυα Υπολογιστών I Βασικές Αρχές Δικτύωσης. Διάρθρωση. Δίκτυο Υπολογιστών: ένας απλός ορισμός. Ευάγγελος Παπαπέτρου

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Πρότυπο Αναφοράς Open Systems Interconnection (OSI) Επικοινωνίες Δεδομένων Μάθημα 5 ο

Δίκτυα Υπολογιστών Firewalls. Χάρης Μανιφάβας

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

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Αρχιτεκτονικές κατανεμημένων συστημάτων. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 12

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

Εργαλεία ανάπτυξης εφαρμογών internet Ι

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

Θέματα διπλωματικών εργασιών σε. Συστοιχίες παράλληλης εξυηρέτησης εφαρμογών Διαδικτύου

Νέες Επικοινωνιακές Τεχνολογίες

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

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

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

Linux Terminal Server Project

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Όλες οι υπηρεσίες είναι διαθέσιμες μέσω διαδικτύου.

Λιβανός Γιώργος Εξάμηνο 2017Β

Ειδικά Θέματα Δικτύων ΙΙ

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος

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

Κεφάλαιο 7. ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης

Τεχνολογίες & Εφαρμογές Πληροφορικής Ενότητα 7: Τοπικά δίκτυα

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

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές

1.5.1 ΓΕΦΥΡΑ (BRIDGE) Εικόνα Επίπεδα λειτουργίας επαναλήπτη, γέφυρας, δρομολογητή και πύλης ως προς το μοντέλο OSI.

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού

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

6.1 Επεκτείνοντας το δίκτυο 6.2 Επιλεγόμενες τηλεφωνικές γραμμές modems Πλεονεκτήματα Μειονεκτήματα Βασική χρήση

ΕΝΙΑΙΟ ΠΛΑΙΣΙΟ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΠΟΥΔΩΝ

Ιστορική Αναδρομή Λειτουργικών Συστημάτων (ΛΣ) Εισαγωγή : ο πυρήνας (kernel) / ο φλοιός (shell) Β ΕΠΑΛ

7.9 ροµολόγηση. Ερωτήσεις

Περιεχόμενα. Visio / White paper 1

Τεχνολογία Δικτύων Επικοινωνιών (Ενότητα Πρωτόκολλα και Αρχιτεκτονική Δικτύου)

Λειτουργικά Συστήματα Η/Υ

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

Επαναληπτικές Ασκήσεις Μαθήματος

Διαχείριση Πολιτισμικών Δεδομένων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

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

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

Μάθημα 4: Πρότυπα, Πρωτόκολλα & Υπηρεσίες

AEI Πειραιά Τ.Τ. Τμ. Μηχ/κων Αυτοματισμού ΤΕ. Δίκτυα Μετάδοσης Δεδομένων. Διάλεξη 1: Εισαγωγή στα δίκτυα υπολογιστών και βασικές αρχές

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

Κάντε κλικ για έναρξη

AEI Πειραιά Τ.Τ. Τμ. Μηχ/κων Αυτοματισμού ΤΕ. Δίκτυα Υπολογιστών. Διάλεξη 1: Εισαγωγή στα δίκτυα υπολογιστών και βασικές αρχές

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ 1 ο ΚΕΦΑΛΑΙΟ

ΔΙΚΤΥΑ (15-17) Π. Φουληράς

ΔΙΑΣΥΝΔΕΣΗ ΔΙΚΤΥΩΝ (INTERNETWORKING)

Κεφάλαιο 4 Λογισμικό συστήματος. Εφαρμογές Πληροφορικής Κεφ.4 Καραμαούνας Πολύκαρπος 1

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

STORAGE AREA NETWORK. Σπουδαστές: Δόση Νικολέτα Καρακούση Πελαγία 30/5/2014 1

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

Περίληψη Λαμπρόπουλος

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

Λειτουργικά Συστήματα Ι. Κεφάλαιο 1 Βασικές Έννοιες Λειτουργικών Συστημάτων

Επίπεδο Δικτύου: Διαδικτύωση

Κατανεμημένα Συστήματα με Java. Ενότητα # 4: Αμοιβαίος αποκλεισμός Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Σχεδίαση Δικτύων Υπολογιστών

Ειδικά Θέματα Δικτύων ΙΙ. Ενότητα 8: Δρομολόγηση κατάστασης ζεύξης (Μέρος 2) Νικολάου Σπύρος Τμήμα Μηχανικών Πληροφορικής ΤΕ

Βασίλειος Κοντογιάννης ΠΕ19

Ενότητα 1. Εισαγωγή στις βασικές έννοιες των ικτύων ΗΥ

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ - Π.Μ.Σ. ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εισαγωγή στη Σχεδίαση Λογισμικού

Κεφάλαιο 7 Διαδικτύωση-Internet. 7.2 Τεχνολογία TCP/IP

Εισαγωγή στην επιστήμη των υπολογιστών. Υλικό Υπολογιστών Κεφάλαιο 6ο ίκτυα υπολογιστών

ΒΑΣΙΚΕΣ ΥΠΗΡΕΣΙΕΣ Βελώνης Γεώργιος ΤΟΥ ΔΙΑΔΙΚΤΥΟΥ. Μάθημα 2ο. Βελώνης Γεώργιος - 1ο Τ.Ε.Ε. Κατερίνης. Καθηγητής Πληροφορικής ΠΕ20 2-1

Σύστημα Διαχείρισης, Ελέγχου και Παρακολούθησης Ασθενοφόρων και Περιστατικών

EM 361: Παράλληλοι Υπολογισμοί

ΤΕΙ Στερεάς Ελλάδας Τμ. Ηλ.γων Μηχ/κων ΤΕ. Δίκτυα Υπολογιστών. Διάλεξη 1: Εισαγωγή στα δίκτυα υπολογιστών και βασικές αρχές

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

Υπολογιστική Νέφους Cloud computing

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Αρχιτεκτονική Λογισμικού

Transcript:

ΑΤΕΙ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ Τμήμα Μηχανικών Πληροφορικής ΤΕ Κατανεμημένος Προγραμματισμός με Hadoop ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Χατζής Νικόλαος (ΑΜ: T-1984) Επιβλέπων: <Σάββας Ηλίας, Phd In Computer Science, Αναπληρωτής καθηγητής> ΛΑΡΙΣΑ 2015

«Εγώ ο/η Χατζής Νικόλαος, δηλώνω υπεύθυνα ότι η παρούσα Πτυχιακή Εργασία με τίτλο Κατανεμημένος Προγραμματισμός με Hadoop είναι δική μου και βεβαιώνω ότι: Σε όσες περιπτώσεις έχω συμβουλευτεί δημοσιευμένη εργασία τρίτων, αυτό επισημαίνεται με σχετική αναφορά στα επίμαχα σημεία. Σε όσες περιπτώσεις μεταφέρω λόγια τρίτων, αυτό επισημαίνεται με σχετική αναφορά στα επίμαχα σημεία. Με εξαίρεση τέτοιες περιπτώσεις, το υπόλοιπο κείμενο της πτυχιακής αποτελεί δική μου δουλειά. Αναφέρω ρητά όλες τις πηγές βοήθειας που χρησιμοποίησα. Σε περιπτώσεις που τμήματα της παρούσας πτυχιακής έγιναν από κοινού με τρίτους, α- ναφέρω ρητά ποια είναι η δική μου συνεισφορά και ποια των τρίτων. Γνωρίζω πως η λογοκλοπή αποτελεί σοβαρότατο παράπτωμα και είμαι ενήμερος(-η) για την επέλευση των νομίμων συνεπειών» Χατζής Νικόλαος

Εγκρίθηκε από την τριμελή εξεταστική επιτροπή Τόπος: Ημερομηνία: ΕΠΙΤΡΟΠΗ ΑΞΙΟΛΟΓΗΣΗΣ 1. 2. 3.

Περίληψη Στην παρούσα πτυχιακή, το αντικείμενο το οποίο μελετάται είναι η εγκατάσταση ενός Hadoop cluster, η ρύθμισή του, καθώς και η εκτέλεση ενός προγράμματος στο περιβάλλον του. Έχοντας ως αφετηρία μία απλή εισαγωγή στην έννοια των Big Data, προχωράμε σε μία ανάλυση των κατανεμημένων συστημάτων,καταλήγοντας σε μια παρουσίαση του Apache Hadoop και των επιμέρους τεχνολογιών του. Ακολουθεί ένας πλήρης οδηγός εγκατάστασης ενός Μulti-node cluster, παρουσιάζοντας αναλυτικά τα βήματα που θα ακολουθήσουμε. Στη συνέχεια εκτελούμε ένα πρόγραμμα σε γλώσσα προγραμματισμού Python, παρουσιάζοντας ταυτόχρονα τον τρόπο λειτουργίας του Hadoop. Στο τέλος, θα παρουσιάσουμε τα αποτελέσματα της εκτέλεσης του προγράμματος καθώς και μερικά συμπεράσματα από την χρήση του Apache Hadoop. -i-

Ευχαριστίες Θα ήθελα να ευχαριστήσω προτίστως τον υπεύθυνο καθηγητή μου, κ. Ηλία Σάββα για την υπομονή, και την βοήθεια που μου παρείχε για την ολοκλήρωση αυτής της πτυχιακής. Επίσης, όσους ενεπλάκησαν και βοήθησαν στην εγκατάσταση του Hadoop στα εργαστήρια της σχολής : Συμφοιτητές, καθηγητές και συνέργάτες μου κατά τη διάρκεα της πρακτικής μου άσκησης.τελευταία, θα ήθελα να ευχαριστήσω τους γονείς μου, οι οποίοι στάθηκαν δίπλα μου καθ όλη τη διάρκεια των σπουδών μου. Χατζής Νικόλαος 28/5/2015 -iii-

Περιεχόμενα ΠΕΡΙΛΗΨΗ... I ΕΥΧΑΡΙΣΤΙΕΣ... III ΠΕΡΙΕΧΟΜΕΝΑ... V 1 ΕΙΣΑΓΩΓΗ... 1 1.1 ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗ... 1 1.1.1 Big Data... 5 1.2 ΔΙΑΡΘΡΩΣΗ ΠΤΥΧΙΑΚΗΣ... 6 2 ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ... 9 2.1 ΠΑΡΑΛΛΗΛΗ ΕΠΕΞΕΡΓΑΣΙΑ... 10 2.2 ΣΥΣΤΗΜΑΤΑ ΠΟΛΥΕΠΕΞΕΡΓΑΣΤΩΝ... 12 2.3 ΠΟΛΥΥΠΟΛΟΓΙΣΤΕΣ... 13 2.3.1 Εξειδικευμένο δίκτυο υψηλής απόδοσης... 14 2.3.2 Συνηθισμένο δίκτυο υπολογιστών (LAN,WAN)... 14 2.4 ΜΗ ΣΥΝΕΚΤΙΚΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ... 15 2.5 ΛΟΓΙΣΜΙΚΟ ΚΑΙ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΚΑΤΑΝΕΜΗΜΕΝΩΝ ΣΥΣΤΗΜΑΤΩΝ... 17 2.6 ΜΟΝΤΕΛΑ ΚΑΤΑΝΕΜΗΜΕΝΩΝ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ... 19 2.6.1 Μοντέλο πελάτη διακομιστή (Client - Server model)... 19 2.6.2 Μοντέλο Ομότιμης επικοινωνίας (Peer-to-peer model)... 22 2.6.3 Πλεονεκτήματα-Μειονεκτήματα... 25 3 APACHE HADOOP... 28 3.1 HADOOP COMMON... 29 3.2 HADOOP DISTRIBUTED FILE SYSTEM (HDFS)... 30 3.3 HADOOP MAPREDUCE... 34 3.3.1 Λειτουργία του μοντέλου MapReduce... 35 3.3.2 Επισκόπηση της εκτέλεσης μιας MAPREDUCE εργασίας... 35 3.4 ΠΟΙΟΙ ΤΟ ΧΡΗΣΙΜΟΠΟΙΟΥΝ :... 37 -v-

4 ΕΓΚΑΤΑΣΤΑΣΗ HADOOP... 39 4.1 ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ - ΕΓΚΑΤΑΣΤΑΣΗ ΕΡΓΑΛΕΙΩΝ ΑΠΟ ΤΟΝ PACKAGE MANAGER... 40 4.2 SSH ΚΑΙ CLUSTER SHH - ΕΓΚΑΤΑΣΤΑΣΗ ΚΑΙ ΡΥΘΜΙΣΗ... 42 4.2.1 Δημιουργία χρηστών και groups... 45 4.2.2 Passwordless SSH installation... 46 4.2.3 Clusterssh... 48 4.3 ΚΑΤΕΒΑΣΜΑ ΚΑΙ ΕΞΑΓΩΓΗ ΤΟΥ HADOOP... 50 4.4 ΒΑΣΙΚΕΣ ΡΥΘΜΙΣΕΙΣ, ΟΡΙΣΜΟΣ MASTER-SLAVE ΥΠΟΛΟΓΙΣΤΩΝ... 51 4.5 ΕΚΚΙΝΗΣΗ ΤΟΥ HADOOP... 56 4.6 ΕΠΙΜΕΡΟΥΣ ΡΥΘΜΙΣΗ ΤΟΥ HADOOP... 59 4.6.1 Ρύθμιση του περιβάλλοντος του Hadoop... 59 4.6.2 Ρύθμιση των Δαιμόνων του Hadoop... 60 5 PYTHON... 67 5.1 ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΤΗΣ PYTHON... 67 5.2 ΕΓΚΑΤΑΣΤΑΣΗ ΣΕ ΠΕΡΙΒΑΛΛΟΝ LINUX... 67 5.3 HELLO, WORLD!... 68 5.4 ΠΩΣ ΔΟΥΛΕΥΕΙ... 69 5.5 ΕΚΤΕΛΕΣΙΜΑ ΠΡΟΓΡΑΜΜΑΤΑ PYTHON... 69 5.6 ΠΡΟΓΡΑΜΜΑ HADOOP ΜΕ ΤΗ ΧΡΗΣΗ ΤΗΣ PYTHON... 70 6 ΑΠΟΤΕΛΕΣΜΑ, ΣΥΜΠΕΡΑΣΜΑΤΑ ΤΗΣ ΠΤΥΧΙΑΚΗΣ ΕΡΓΑΣΙΑΣ... 75 6.1 ΑΠΟΤΕΛΕΣΜΑΤΑ... 75 6.2 ΣΥΜΠΕΡΑΣΜΑΤΑ ΕΠΙΛΟΓΟΣ... 79 -vi-

1 Εισαγωγή 1.1 ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗ Πρίν μερικές δεκαετίες, η έννοια του υπολογιστικού συστήματος(υ.σ.) εκφραζόταν με την ύπαρξη ενός μεγάλου ενιαίου κεντρικού υπολογιστικού συστήματος(mainframe),το οποίο ήταν υπεύθυνο για την επεξεργασία των δεδομένων και στο οποίο τρέχανε όλες οι εφαρμογές οι οποίες προσπελάζονταν από τους χρήστες μέσω τερματικών(clients). Εικόνα 1 : Ένα Mainframe της IBM, το 7094 Αυτού του είδους οι υλοποιήσεις, ήταν ικανοποιητικές για την εποχή, γιατί η πολυπλοκότητα των εφαρμογών, ο όγκος των δεδομένων όπως και η επεξεργαστική ισχύς των κεντρικών Υ.Σ. ήταν δεδομένη, και γενικά απλοϊκά δομημένη Με την εμφάνιση των προσωπικών υπολογιστών, με την ραγδαία εξέλιξη τους σε επεξεργαστική ισχύ, χωρητικότητα αποθήκευσης δεδομένων κτλ., διαφάνηκε η ανάγκη για αλλαγή των προγραμματιστικών μεθόδων. Οι εφαρμογές άρχισαν σιγά σιγά να διασπώνται σε μικρότερα υποπρογράμματα τα οποία συνεργάζονται μεταξύ τους, αντί για -1-

ένα μεγάλο ενιαίο κομμάτι κώδικα. Με αυτόν τον τρόπο, οι εφαρμογές ήταν πιο εύκολο να διατηρηθούν, αλλά το πιο βασικό, ήταν πολύ αποδοτικότερες σε θέματα διαχείρισης και εκμετάλλευσης πόρων. Εικόνα 2 : Ένας προσωπικός υπολογιστής της RadioShack, ο TRS-80 Έπειτα, όταν τα δίκτυα μεταξύ υπολογιστών άρχισαν να εξελίσσονται, να γίνονται αξιόπιστα και επαρκώς γρήγορα, δεν άργησε πολύ να υλοποιηθεί μια νέα ιδέα. Αντί, οι υπολογιστές να επικοινωνούν μεταξύ τους, θα μπορούσαν πλέον να μοιράσουν τον υ- πολογιστικό τους φόρτο, στο δίκτυο, κάνοντας κάθε υπολογιστή να μπορεί να αναλάβει ένα κομμάτι επεξεργασίας των δεδομένων. Έτσι, η επεξεργαστική ισχύς και η εκμετάλλευση των πόρων του δικτύου αυξήθηκε κατακόρυφα και οι ανάγκες σε hardware των μεμονωμένων μονάδων του δικτύου ήταν πλέον περιορισμένες. Πάραυτα, το μέγεθος του λογισμικού που χρησιμοποιούταν παρέμενε ακόμη μεγάλο, όπως επίσης και το κόστος του. Πλέον, θα χρειαζόταν για κάθε μονάδα του δικτύου να υπάρχει λογισμικό το οποίο θα ήταν βαρύ, ακριβό και δυσκίνητο, κάτι το οποίο έκανε όλο αυτό το εγχείρημα να μην είναι αποδοτικό. Λόγω αυτού, δημιουργήθηκε η ανάγκη για μια μέθοδο ανάπτυξης λογισμικού, η οποία, θα βοηθούσε στην αρθρωτή αυτήν δομή συστημάτων. -2-

Η νέα αυτή μέθοδος, έπρεπε να έχει σαν βασικό της γνόμωνα το κόστος ανάπτυξης, την λειτουργία του κώδικα σε πολλά διαφορετικά μηχανήματα, την ικανότητα του κώδικα να χρησιμοποιηθεί και να επικοινωνήσει με κώδικα διαφορετικών προγραμματιστών και τέλος να μπορεί να γραφτεί ο κώδικας σε διαφορετικές γλώσσες προγραμματισμού. Αυτό το μοντέλο προγραμματισμού με εξαρτήματα (software components technology) έχει επικρατήσει μέχρι και σήμερα με τα πλεονεκτήματά του να είναι καταλυτικά στην ανάπτυξη της τεχνολογίας στον τομέα του software, διευκολύνοντας τον προγραμματισμό, την συντήρηση του κώδικα, την επικοινωνία μεταξύ προγραμμάτων, ακόμα και τη δημιουργία κοινών κανόνων, μέσω των οποίων προάγεται η ομοιογένεια στο λογισμικό. Μέσω της ανάπτυξης του software,της object-component oriented φιλοσοφίας και της αποκεντροποίησης του hardware, πλέον στις μέρες μας έχουμε φτάσει σε ένα επίπεδο το οποίο το λογισμικό μπορεί και τρέχει σε όλα τα λειτουργικά συστήματα, με ο- ποιονδήποτε συνδυασμό hardware χωρίς να χρειάζεται να αλλαχθεί ούτε μια γραμμή κώδικα. Από συστήματα πολυεπεξεργαστών και υπερυπολογιστές, μέχρι ακόμα και στους οικιακούς μας υπολογιστές και στα έξυπνα τηλέφωνα μας, η φιλοσοφία του κατανεμημένου προγραμματισμού, έχει δώσει λύσεις σε πάρα πολλές προκλήσεις του σύγχρονου προγραμματιστικού κόσμου. Έχουμε λοιπόν πλέον, φτάσει στο σημείο που ορίζουμε ένα κατανεμημένο σύστημα με τον εξής απλοϊκό τρόπο(tanenbaum) : Κατανεμημένο σύστημα, είναι μια συλλογή ανεξάρτητων υπολογιστών ή υπολογιστικών μονάδων οι οποίοι φαίνονται στον χρήστη σαν ένα ενιαίο συνεκτικό σύστημα (Andrew S. Tanenbaum,Maarten van Steen, Κατανεμημένα Συστήματα ). Αυτό από μόνο του, αποτελεί δείγμα του πόσο πολύ έχει -3-

αναπτυχθεί η συγκεκριμένη φιλοσοφία. Εικόνα 3 : Μια συστάδα υπολογιστών Beowolf. Σε προγράμματα όπως το SETI@HOME, το οποίο χρησιμοποιεί το διαδίκτυο για επεξεργασία δεδομένων με σκοπό την εύρεση εξωγήινης νοημοσύνης μέσω υπολογιστικών συστημάτων σε όλο τον κόσμο, ή το Folding@Home, που με τον ίδιο τρόπο -4-

ψάχνει μέσω αλγορίθμων να αναλύσει λειτουργίες των πρωτεϊνών ώστε να βρεθούν θεραπείες σε διάφορες ασθένειες, ο κατανεμημένος προγραμματισμός δείχνει την δύναμη του. Σήμερα, η επεξεργαστική ισχύς, η χωρητικότητα και το μέγεθος των υπολογιστών έχουν φτάσει σε ένα επίπεδο, που είναι πολύ λίγα πράγματα που ένας υπολογιστής δεν μπορεί να φέρει σε πέρας μόνος του. Η ισχύς υπερδιπλασιάζεται κάθε μόλις μερικά χρόνια και τα προγράμματα γίνονται όλο και πιο ολοκληρωμένα και δυνατά, χωρίς να χρειάζεται η χρήση κατανεμημένων τεχνικών. Γιατί τότε υπάρχει η ανάγκη εξέλιξης και υιοθεσίας αυτού του μοντέλου στις μέρες μας; Γιατί χρειαζόμαστε τον κατανεμημένο προγραμματισμό; Πέρα από το γεγονός οτι ένα μεγάλο πλέον ποσοστό του internet βασίζεται στην αποκεντρωμένη φιλοσοφία των δεδομένων(π.χ. torrent protocol, προγράμματα επικοινωνίας), ο λόγος που ο κατανεμημένος προγραμματισμός ανθεί και εξελίσσεται συνεχώς είναι τα Big Data. 1.1.1 Big Data Εικόνα 4 : Big data Με την ευρεία εξάπλωση του Internet στις μέρες μας, που πλέον έχει κατακλύσει όλους τους τομείς της καθημερινότητας, με δισεκατομμύρια υπολογιστές, smartphones, tablets και άλλες συσκευές να ανταλλάσσουν πληροφορίες μέσω διαδικτύου, ο όγκος των πληροφοριών που διακινούνται,είναι εξωπραγματικά μεγάλος, και διογκώνεται με ταχύτατους ρυθμούς μέρα με τη μέρα. Η διείσδυση της τεχνολογίας σε όλες τις ομάδες -5-

ανθρώπων, κυρίως μέσω κοινωνικών δικτύων όπως το Facebook και το Google+,αλλά και μέσω ιστοσελίδων όπως το Υoutube που δίνουν στον καθένα την ελευθερία να ανεβάσει και να μοιραστεί πολύ εύκολα έναν μεγάλο όγκο πληροφοριών, εγείρεται ο προβληματισμός, για το πώς θα μπορέσουμε να διαχειριστούμε όλον αυτόν τον όγκο πληροφοριών. Τα δεδομένα και οι χρήστες πληθαίνουν εκθετικά, με αποτέλεσμα η χωρητικότητα των τυπικών server, σταδιακά, να μην επαρκεί. Όπως παρατηρούμε, προβλήματα χωρητικότητας, ταχύτητας, αλλά και ασφάλειας κάνουν σιγά-σιγά την εμφάνισή τους, ενώ η διαχείριση όλων αυτών, είναι πάρα πολύ δύσκολη. Όσο περισσότεροι servers προστίθενται, τόσο πιο δύσκολη είναι και η διαχείρισή τους. Σε αυτό εδώ λοιπόν το σημείο, έρχονται να δώσουν τη λύση οι κατανεμημένες υλοποιήσεις. Με τη χρήση ενός κατανεμημένου συστήματος, όλα αυτά τα προβλήματα εκμηδενίζονται. Η προοπτική ενός φαινομενικά ενιαίου συστήματος για την διαχείριση εκατοντάδων ή χιλιάδων διαφορετικών server, με δυνατότητα προσθήκης η αφαίρεσης διαφόρων υπομονάδων χωρίς απώλειες δεδομένων, προσφέρει ασφάλεια, ταχύτητα και μεγάλη ευκολία, καθιστώντας εφικτή τη διαχείριση αυτού του εκρηκτικού βαθμού πληροφοριών. Πλέον, η ανάλυση των πληροφοριών, η αποθήκευσή τους, η αναζήτηση τους και οποιαδήποτε άλλη επεξεργασία τους, γίνονται σαν να βρίσκονται όλες οι πληροφορίες σε ένα σύστημα. Το εξελιγμένο κατανεμημένο σύστημα, φροντίζει για όλες τις τεχνικές λεπτομέρειες, όσο εμείς απολαμβάνουμε την απλότητα και την ταχύτητα της διαφανούς αρχιτεκτονικής του. Αναμφίβολλα, τα κατανεμημένα συστήματα, είναι μονόδρομος πλέον στη διαχείριση μεγάλου όγκου πληροφοριών, και χωρίς αυτά, η έννοια του κόσμου των πληροφοριών όπως έχει εξελιχθεί, θα καταρρεύσει. 1.2 Διάρθρωση πτυχιακής Το υπόλοιπο της παρούσας πτυχιακής διαμορφώνεται ως εξής: Στο 2 ο κεφάλαιο γίνεται αναφορά στο τι είναι τα κατανεμημένα συστήματα. Στο 3 ο κεφάλαιο γίνεται αναφορά στο τι είναι το Apache Hadoop. Στο 4 ο κεφάλαιο παρουσιάζεται η εγκατάσταση του Hadoop Στο 5 ο κεφάλαιο παρουσιάζεται η γλώσσα προγραμματισμού Python και η εκτέλεση ενός προγράμματος στο Hadoop Στο 6 ο κεφάλαιο εκθέτονται τα συμπεράσματα της πτυχιακής -6-

Βιβλιογραφία Andrew S. Tanenbaum,Maarten van Steen, Κατανεμημένα Συστήματα,Εκδόσεις Κλειδάριθμος, Έτος έκδοσης : 2005, Κωδικός ISBN: 9602099240 Big Data, IBM - http://www.ibm.com/big-data/us/en/ Big Data, Wikipedia - http://en.wikipedia.org/wiki/big_data Παράλληλα και κατανεμημένα συστήματα, Wikipedia - http://el.wikipedia.org/wiki/%ce%a0%ce%b1%cf%81%ce%ac%ce%bb %CE%BB%CE%B7%CE%BB%CE%B1_%CE%BA%CE%B1%CE%B9_%C E%BA%CE%B1%CF%84%CE%B1%CE%BD%CE%B5%CE%BC%CE%B7 %CE%BC%CE%AD%CE%BD%CE%B1_%CF%83%CF%85%CF%83%CF% 84%CE%AE%CE%BC%CE%B1%CF%84%CE%B1 Seti@Home, Berkeley university http://setiathome.ssh.berkeley.edu Folding@Home,Stanford University https://folding.stanford.edu -7-

-8-

2 Κατανεμημένα Συστήματα Στην πληροφορική, παράλληλα, κατανεμημένα ή ταυτόχρονα συστήματα ονομάζονται υπολογιστές οι οποίοι επιτρέπουν την ταυτόχρονη εκτέλεση πολλαπλών συνεργαζόμενων προγραμμάτων σε μία ή περισσότερες επεξεργαστικές μονάδες. Οι διαφορές μεταξύ αυτών των όρων είναι λεπτές, με την έμφαση να δίνεται κάποιες φορές στον σχεδιασμό και στην ανάλυση αλγορίθμων, άλλοτε στην κατασκευή υποστηρικτικού λογισμικού και άλλοτε στη σχεδίαση των υποδομών υλικού που απαιτούνται για την επίτευξη του ταυτοχρονισμού. Ακόμη και από τη δεκαετία του 1960, τα νέα πολυδιεργασιακά λειτουργικά συστήματα και η εδραίωση-χρήση της έννοιας των διεργασιών έφεραν στην επιφάνεια τον ταυτοχρονισμό, μία λειτουργία των υπολογιστικών συστημάτων η οποία έχει να κάνει με την ταυτόχρονη εκτέλεση διαφορετικών διεργασιών που επικοινωνούν μεταξύ τους, για την εκτέλεση ενός υπολογισμού. Η καινοτόμος αυτή ιδέα, δημιούργησε κάποιες προκλήσεις στον χώρο της πληροφορικής σε ζητήματα σχεδιασμού και υλοποίησης, όπως ο αμοιβαίος αποκλεισμός, η εκλογή αρχηγού,ο συγχρονισμός και η ομοφωνία μεταξύ συνεργαζόμενων, ταυτοχρόνως εκτελούμενων διεργασιών(το πεδίο αυτό σήμερα προσδιορίζεται με τον όρο κατανεμημένος υπολογισμός). Πέρα από την σκοπιά του λογισμικού, που αντιμετώπιζε τα προβλήματα μέσω μιας ψευδοπαράλληλης προσέγγισης διεργασιών, εμφανίζονται σταδιακά και εδραιώνονται υπολογιστές με περισσότερους από έναν επεξεργαστές. Οι επιστήμονες πλέον έχουν να αντιμετωπίσουν και τις προκλήσεις της πραγματικής παράλληλης επεξεργασίας, από τη σκοπιά του υλικού αυτή τη φορά. Έτσι δημιουργείται ένα νέο επιστημονικό πεδίο,αυτό της παράλληλης επεξεργασίας, στο οποίο μελετάται η πραγματική ταυτόχρονη εκτέλεση διεργασιών σε συστήματα πολλαπλών επεξεργαστών με κοινό χώρο μνήμης. Ταυτόχρονα, με την εξέλιξη των δικτύων, παρουσιάζεται η λύση της κατανομής των διεργασιών μέσω του δικτύου και της παράλληλης επεξεργασίας τους σε διαφορετικούς κόμβους.σε αυτήν την κατανεμημένη επεξεργασία, εφόσον δεν υπάρχει μία ε- νιαία μνήμη όπως στα παράλληλα, όλες οι CPU έχουν ιδιωτικές, τοπικές μνήμες με ξεχωριστούς χώρους διευθύνσεων (είναι δηλαδή ανεξάρτητοι, δικτυωμένοι υπολογιστές) και παρέχουν στον χρήστη την ψευδαίσθηση του ενιαίου, μοναδικού συστήματος. Ο όρος «κατανεμημένο σύστημα», αναφέρεται τόσο στο υλικό, όσο και στο λογισμικό, -9-

που είναι απαραίτητα για να υλοποιηθεί, με περισσότερη έμφαση, στο λογισμικό. Στα κατανεμημένα συστήματα, σε αντίθεση με τα παράλληλα, η διαφάνεια, δηλαδή η ψευδαίσθηση ενός ενιαίου συνεκτικού συστήματος, είναι μεγαλύτερος στόχος από την αύξηση των υπολογιστικών επιδόσεων που επιτυγχάνεται με τον παραλληλισμό. Ενδέχεται ας πούμε, να μη συμμετέχουν καν μερικοί κόμβοι σε κάποιον από κοινού υπολογισμό αλλά να εκτελούν άλλες σχετικές εργασίες, παρουσιαζόμενοι όμως στο εξωτερικό περιβάλλον ως ενιαίο σύστημα. Αυτά ονομάζονται μη συνεκτικά κατανεμημένα συστήματα (π.χ. ο Παγκόσμιος Ιστός ή οι ομότιμες εφαρμογές ανταλλαγής αρχείων μέσω Διαδικτύου), σε αντίθεση με τα συνεκτικά κατανεμημένα συστήματα, τα οποία αξιοποιούνται περισσότερο ως απλά παράλληλα συστήματα για τη μεγιστοποίηση των υπολογιστικών επιδόσεων. Εικόνα 5 : Προκλήσεις ενός κατανεμημένου συστήματος 2.1 Παράλληλη επεξεργασία Για την παράλληλη επεξεργασία υπάρχουν τέσσερα είδη υπολογιστικών συστημάτων (ταξινόμηση Φλυν, 1966), τα οποία διαχωρίζονται με βάση το πόσες ταυτόχρονες ροές επεξεργασίας εντολών και δεδομένων υποστηρίζουν: 1. Οι υπολογιστές SISD (Μία Εντολή - Ένα Δεδομένο): οι συνήθεις σειριακοί υ- πολογιστές Φον Νόιμαν, όπου κάθε στιγμή ένας μοναδικός επεξεργαστής εκτε- -10-

λεί μία εντολή σε ένα δεδομένο το οποίο έχει προσκομίσει από την κύρια μνήμη. 2. Οι υπολογιστές SIMD (Μία Εντολή - Πολλαπλά Δεδομένα): μία σπάνια κατηγορία, όπου κάθε στιγμή πολλαπλοί επεξεργαστές εκτελούν μία μόνο κοινή ε- ντολή σε πολλαπλά διαφορετικά δεδομένα. Ο όρος σήμερα περιγράφει σε σημαντικό βαθμό τη λειτουργία των σύγχρονων επεξεργαστών γραφικών. 3. Οι υπολογιστές MISD (Πολλαπλές Εντολές - Ένα Δεδομένο): ασυνήθιστη αρχιτεκτονική, όπου κάθε στιγμή πολλαπλοί επεξεργαστές τροποποιούν με διαφορετικό τρόπο την ίδια ροή δεδομένων συνήθως αξιοποιείται με γνώμονα την αύξηση της ανοχής σφαλμάτων μίας εφαρμογής και όχι την αύξηση των υπολογιστικών επιδόσεων. 4. Οι υπολογιστές MIMD (Πολλαπλές Εντολές - Πολλαπλά Δεδομένα): οι πλήρως παράλληλοι υπολογιστές, όπου πολλαπλοί αυτόνομοι επεξεργαστές εκτελούν ταυτοχρόνως πολλαπλές διαφορετικές ροές εντολών σε διαφορετικά δεδομένα. Τα συστήματα MIMD διακρίνονται σε : 1. Πολυεπεξεργαστές κοινής μνήμης, όπου πολλαπλοί επεξεργαστές επικοινωνούν με μία κοινή μνήμη ενιαίου χώρου διευθύνσεων. Οι επεξεργαστικές μονάδες α- νταλλάσσουν πληροφορίες προσπελαύνοντας κοινόχρηστες μεταβλητές στην κοινή μνήμη(π.χ. πολλαπλές διεργασίες ή νήματα, OpenMP).Στην παρούσα κατηγορία, υπάρχει συνήθως ένα μόνο λειτουργικό σύστημα το οποίο αναλαμβάνει να διανείμει τις διεργασίες στους διάφορους επεξεργαστές. 2. Πολυυπολογιστές κατανεμημένης μνήμης, όπου πολλαπλά πακέτα επεξεργαστή-ιδιωτικής μνήμης, με τον δικό του χώρο διευθύνσεων το καθένα, διασυνδέονται και επικοινωνούν μεταξύ τους ανταλλάσσοντας μηνύματα (Μοντέλο μεταβίβασης μηνυμάτων, π.χ. PVM,MPI). Σε αυτήν την κατηγορία, κάθε αυτόνομη επεξεργαστική μονάδα του συστήματος, τρέχει το δικό της λειτουργικό σύστημα, και εφόσον έχουν εγκατεστημένο το κατάλληλο λογισμικό, λειτουργούν ώς ενιαίο κατανεμημένο σύστημα. -11-

Εικόνα 6: Τα τέσσερα είδη υπολογιστικών συστημάτων, κατά Flynn 2.2 Συστήματα Πολυεπεξεργαστών Στα συστήματα πολυεπεξεργαστών, η μνήμη συνήθως διαιρείται σε πολλά τμήματα προκειμένου να επιτρέπονται ταυτόχρονες προσπελάσεις σε αυτά από διαφορετικούς επεξεργαστές (χωρίς αυτό να αναιρεί φυσικά την ύπαρξη ενιαίου χώρου διευθύνσεων), ενώ το δίκτυο διασύνδεσης είναι στην απλούστερη περίπτωση ένας δίαυλος, δηλαδή ένα κοινό μέσο μετάδοσης, το οποίο κάθε δεδομένη στιγμή μόνο ένας επεξεργαστής μπορεί να χρησιμοποιεί για επικοινωνία με κάποιο τμήμα μνήμης. Βλέπουμε λοιπόν οτι οι πολυεπεξεργαστές διαύλου, δεν παρουσιάζουν επαρκή κλιμακωσιμότητα, καθώς ο δίαυλος δεν έχει αρκετή χωρητικότητα ώστε να εξυπηρετεί ταυτόχρονα πολλούς διαφορετικούς επεξεργαστές. Συμπερασματικά, οι επιδόσεις δεν αυξάνονται αναλογικά με το πλήθος των επεξεργαστών, καθώς με την προσθήκη επεξεργαστών πολλαπλασιάζονται και τα διαστήματα αναμονής για κατάληψη του διαύλου. Στην περίπτωση που χρειαζόμαστε ένα σύστημα με περισσότερες από 10-20 CPU πρέπει να καταφύγουμε σε δίκτυα μεταγωγής, όπου μεταξύ κάθε επεξεργαστή και κάθε τμήματος της μνήμης δημιουργείται μία μοναδική διαδρομή. -12-

Κάθε CPU, διαθέτει τη δική της τοπική κρυφή μνήμη για την αύξηση των επιδόσεων και την αποφυγή υπερφόρτωσης του δικτύου. Στα παράλληλα συστήματα, όμως, παρουσιάζεται το λεγόμενο «πρόβλημα της συνεκτικότητας» (cache coherence): ένα κοινόχρηστο δεδομένο που έχει αντιγραφεί σε πολλές κρυφές μνήμες και μπορεί να μεταβληθεί στην καθεμία χωρίς να το γνωρίζει η κύρια ή οι άλλες κρυφές μνήμες, με αποτέλεσμα να υπάρχει ασάφεια ως προς το ποιά είναι η σωστή τιμή του κάθε στιγμή. Το πρόβλημα αυτό επιλύεται στην περίπτωση ύπαρξης διαύλου με «πρωτόκολλα παρακολούθησης», όπου το υλικό κάθε επεξεργαστή παρακολουθεί όλη την πληροφορία που διακινείται στο κοινό μέσο και δρα ανάλογα, ενώ στην περίπτωση δικτύου μεταγωγής με «πρωτόκολλα καταλόγων», στους οποίους κάθε τμήμα της μνήμης διατηρεί έναν πίνακα με πληροφορίες για το ποιοι επεξεργαστές έχουν κάθε δεδομένο στην κρυφή τους μνήμη, ώστε όποτε χρειάζεται, να γίνονται οι κατάλληλες ενημερώσεις. Σε κάθε περίπτωση πάντως,τα πρωτόκολλα συνεκτικότητας επιβαρύνουν το σύστημα, αφού αυξάνουν την κίνηση στο δίκτυο διασύνδεσης, με το πρόβλημα να μειώνεται μόνο αν καταβληθεί προσπάθεια ώστε τα παράλληλα προγράμματα να μην τροποποιούν συχνά κοινόχρηστα δεδομένα. Τα παράλληλα συστήματα κοινής μνήμης με δίαυλο στα οποία όλες οι CPU είναι ισότιμες και μπορούν όλες να αναλάβουν την εκτέλεση του λειτουργικού συστήματος ονομάζονται «συμμετρικοί πολυεπεξεργαστές» (SMP). Πάντως, α- κόμη και οι πολυεπεξεργαστές μεταγωγής, στην πράξη έχουν περιορισμένη κλιμακωσιμότητα, λόγω του τετραγωνικά αυξανόμενου ως προς το πλήθος των επεξεργαστών κόστους κατασκευής του δικτύου διασύνδεσης, με αποτέλεσμα αν χρειαζόμαστε ένα σύστημα με αρκετούς επεξεργαστές, να καταφεύγουμε, συνήθως, σε πολυυπολογιστές. 2.3 Πολυυπολογιστές Στο μοντέλο των πολυυπολογιστών, έχουμε ένα σύνολο ανεξάρτητων υπολογιστών (είτε απλώς πακέτα επεξεργαστή και ιδιωτικής μνήμης, είτε πλήρη και αυτοτελή συστήματα) που επικοινωνούν μεταξύ τους μέσω ενός δικτύου διασύνδεσης. Οι κόμβοι, μπορούν μεταξύ τους να είναι είτε ομογενείς, είτε ετερογενείς. Στην περίπτωση των ομογενών,έχουμε κόμβους οι οποίοι είναι πανομοιότυποι, και λειτουργούν συνήθως για την επίτευξη μεγάλων υπολογιστικών επιδόσεων, ενώ στην περίπτωση των ετερογενών, έχουμε διαφορετικούς υπολογιστές, ακόμη και με διαφορετικά λειτουργικά συστήματα ή αρχιτεκτονικές, τα οποία λειτουργούν διαφανώς ώς ένα ενιαίο σύνολο. -13-

Για την επικοινωνία μεταξύ των συστημάτων χρησιμοποιούνται 2 είδη διασύνδεσης: 1. Εξειδικευμένο δίκτυο υψηλής απόδοσης. 2. Συνηθισμένο δίκτυο υπολογιστών (LAN,WAN). 2.3.1 Εξειδικευμένο δίκτυο υψηλής απόδοσης Στην περίπτωση αυτή υπάγονται συνήθως ολοκληρωμένοι ομοιογενείς πολυυπολογιστές εξειδικευμένης αρχιτεκτονικής υπερυψηλών επιδόσεων, όπου κάθε κόμβος συνίσταται σε ένα πακέτο επεξεργαστή / μνήμης. Οι πολυυπολογιστές αυτού του τύπου, με δίκτυο διασύνδεσης μεταγωγής, μπορούν να κλιμακωθούν ακόμη και σε αρκετές χιλιάδες επεξεργαστές στο ίδιο σύστημα, γι' αυτό και σπανίως γίνεται χρήση διαύλου. Η διαφορά με τα δίκτυα διασύνδεσης των πολυεπεξεργαστών κοινής μνήμης, είναι οτι εδώ υπάρχουν άμεσες συνδέσεις μεταξύ ορισμένων μόνο κόμβων και η επικοινωνία μεταξύ δύο έμμεσα συνδεδεμένων επεξεργαστών γίνεται με δρομολόγηση του μηνύματος μέσω ενδιάμεσων σταθμών. Για να λειτουργήσει αυτή η προσέγγιση, χρησιμοποιούμε για την επικοινωνία των κόμβων ένα μικρό κύκλωμα μεταγωγής, το οποίο ονομάζεται δρομολογητής, και είναι υπεύθυνο για να μεταφέρει τα μηνύματα από τον έναν κόμβο στον άλλον, ακόμα κι αν χρειαστεί το μήνυμα να περάσει μέσα από άλλους κόμβους. Τα δίκτυα, μπορεί να έχουν διάφορες τοπολογίες (πλέγμα, υπερκύβος κ.α.), ενώ η μορφή μηνυμάτων καθορίζεται από συγκεκριμένα πρωτόκολλα, ορισμένα από τον κάθε κατασκευαστή. Τέτοιοι πολυυπολογιστές, παρουσιάζουν πολλές ομοιότητες με ένα κοινό τοπικό δίκτυο υπολογιστών, στο οποίο η τοπολογία είναι αυστηρά στατική, οι αποστάσεις πολύ μικρές και η ανάγκη για ταχύτητα εξαιρετικά αυξημένη. Έτσι, οι δρομολογητές, που παίζουν ταυτόχρονα τον ρόλο των καρτών δικτύου ενός συνήθους LAN και των δρομολογητών ενός WAN, έχουν όλη τη λειτουργικότητά τους τυπωμένη σε κυκλώματα υλικού ώστε να ελαχιστοποιούνται οι καθυστερήσεις, ενώ οι αλγόριθμοι δρομολόγησης που υλοποιούν είναι εξαιρετικά απλοί και γρήγοροι. 2.3.2 Συνηθισμένο δίκτυο υπολογιστών (LAN,WAN) Στην κατηγορία αυτή, υπάγονται ανοιχτής αρχιτεκτονικής ετερογενείς πολυυπολογιστές που προκύπτουν από τη δικτύωση συνηθισμένων υπολογιστών, που ονομάζονται υπολογιστικές συστάδες. Αυτό ως λύση, αν και χαμηλότερων επιδόσεων, έχει πολύ μικρό- -14-

τερο κόστος ενώ τα δίκτυα διασύνδεσης που επί το πλείστον αξιοποιεί (Lan, Internet κ.α.) είναι συνηθισμένα και εύκολα προσπελάσιμα. Δηλαδή, η μορφή του πολυυπολογιστή δεν διαφέρει από ένα τυπικό δίκτυο υπολογιστών, το οποίο χρησιμοποιεί το κοινό TCP/IP πρωτόκολλο, ενώ κάθε κόμβος αποτελεί έναν πλήρη συμμετρικό πολυεπεξεργαστή. Κατ αυτόν τον τρόπο, το δίκτυο διασύνδεσης μοιάζει κάπως με WAN και κάθε κόμβος με αυτόνομο LAN που συμμετέχει στο ολικό δίκτυο μέσω του δρομολογητή του. Εν πάσει περιπτώσει, εφόσον καταφέρουμε και έχουμε μια εικόνα συνεκτικού συστήματος το οποίο εξασφαλίζει διαφανή διαχείριση πόρων, έστω και σε περιπτώσεις ενός μόνο προγράμματος, τότε κάνουμε λόγο για κατανεμημένο σύστημα. 2.4 Μη συνεκτικά κατανεμημένα συστήματα Όπως αναφέρθηκε και προηγουμένως, τα μη συνεκτικά κατανεμημένα συστήματα συναντώνται συνήθως σε ετερογενείς δικτυωμένους υπολογιστές και βασίζονται σε λογισμικό το οποίο παρέχει υπηρεσίες σε χρήστες, αποκρύπτοντας όμως την ύπαρξη πολλαπλών υπολογιστών και τη χρήση του υποκείμενου δικτύου (διαφάνεια). Στόχος αυτών των συστημάτων, συνήθως, είναι η διαφανής παροχή κάποιας υπηρεσίας παρά η αύξηση των υπολογιστικών επιδόσεων κατά την επίλυση ενός προβλήματος, ενώ συνήθως για αυτόν τον σκοπό χρησιμοποιούνται κυρίως πολυεπεξεργαστές ή συνεκτικοί πολυυπολογιστές με τοπικά δίκτυα διασύνδεσης χαμηλής υστέρησης. Όλα αυτά θα μπορούσαμε ωστόσο να τα υλοποιήσουμε και με ένα συγκεντρωτικό σύστημα, δηλαδή για παράδειγμα έναν κεντρικό υπολογιστή στον οποίον να συνδέονται οι πελάτες μέσω δικτύου. Τα κατανεμημένα συστήματα όμως, έχουν αρκετά πλεονεκτήματα σχετικά με αυτήν την υλοποίηση όπως: Οικονομία, αφού ένας κεντρικός υπολογιστής μεγάλης ισχύος μπορεί να είναι πολύ ακριβότερος. Ευελιξία διαμοιρασμού φόρτου μεταξύ των κόμβων του συστήματος. Αξιοπιστία, αφού αν ένας κόμβος δυσλειτουργεί η τεθεί εκτός λειτουργίας δεν επηρεάζονται οι υπόλοιποι. Κλιμακωσιμότητα, αφού μπορεί να προστεθεί σταδιακά περισσότερη ισχύς με την προσθήκη νέων κόμβων. Την κοινοχρησία δεδομένων ή συσκευών μεταξύ απομακρυσμένων χρηστών. -15-

Προκύπτουν, όμως, διάφορα ζητήματα για την λειτουργία των συστημάτων αυτών. Για παράδειγμα, το λογισμικό και γενικά ο τρόπος προγραμματισμού πρέπει είναι προσαρμοσμένος για τέτοιου είδους συστήματα και να εκμεταλλεύεται τη φύση τους. Το δίκτυο επίσης, αποκτά ζωτική σημασία για τη λειτουργία του. Σε περιπτώσεις σφάλματος, το σύστημα μπορεί να δυσλειτουργήσει ή ακόμη και να καταρρεύσει. Επιπλέον, πρέπει να λάβουμε υπόψιν και τον τομέα της ασφάλειας και της έκθεσης των δεδομένων σε ένα κατανεμημένο σύστημα. Εφόσον οι πληροφορίες διακινούνται ασταμάτητα μέσω του δικτύου, αυτόματα υπάρχει πλέον ένα ακόμα επίπεδο ασφαλείας που πρέπει να διαμορφωθεί. Πλέον, για την δημιουργία ενός μη συνεκτικού κατανεμημένου συστήματος, έχουν θεσπιστεί κάποιοι κανόνες, οι οποίοι αν ακολουθηθούν παρέχουν λύσεις σε όλα τα ζητήματα που αναφέρθηκαν πιο πάνω. 1. Λογισμικό : Πρέπει το λογισμικό του κατανεμημένου συστήματος, να μην βασίζεται σε συγκεντρωτικούς αλγόριθμους, συγκεντρωτικές μονάδες και πίνακες, αλλά να είναι ώς επί το πλείστον κατανεμημένης φιλοσοφίας. Επειδή κάθε κόμβος αναλαμβάνει την επεξεργασία και παίρνει αποφάσεις ανάλογα με τις τοπικές πληροφορίες, πρέπει το λογισμικό να μπορεί να διαχειριστεί αυτήν την ασύγχρονη φύση της επεξεργασίας. 2. Κλιμακωσιμότητα - Αξιοπιστία : Πρέπει το σύστημα να έχει επαρκή κλιμακωσιμότητα, ώστε να καλύπτει τις ανάγκες των χρηστών, και το πιο σημαντικό, να μπορεί να επεκταθεί αν χρειαστεί με σχετική ευκολία. Εφόσον το σύστημα βασίζεται κατά πολύ στο δίκτυο διασύνδεσης του, πρέπει να μπορεί να αντιμετωπίζει τυχόν προβλήματα ταχύτητας και αξιοπιστίας δεδομένων με ασφάλεια. Τα σύγχρονα Κ.Σ. χρησιμοποιούν διάφορες τεχνικές προκειμένου να αντιμετωπίσουν τέτοιου είδους προβλήματα όπως π.χ. η αντιγραφή δεδομένων σε πολλούς κόμβους του συστήματος έτσι ώστε να μην υπάρχει απώλεια δεδομένων σε πιθανό σφάλμα ενός κόμβου, και επίσης να είναι ταχύτερη η ανάκτησή τους από διάφορους κόμβους καθώς θα υπάρχουν πιο πολλά και πιο προσιτά σημεία στο σύστημα για να ανακτηθεί η πληροφορία. 3. Προσφέρει στους χρήστες του κάποιους ή όλους από τους παρακάτω τύπους διαφάνειας: Διαφάνεια πρόσβασης, δηλαδή απόκρυψη των πιθανών διαφορών στην αναπαράσταση των δεδομένων και του πώς προσπελαύνονται μεταξύ των κόμβων του συστήματος. Διαφάνεια θέσης, δηλαδή απόκρυψη της πληροφορίας σχετικά με το σε ποιον κόμβο τοποθετείται ένας πόρος. Διαφάνεια μετανάστευσης, δηλαδή παροχή δυνατότητας στους πόρους να μετακινούνται κατά βούληση μεταξύ των κόμβων χωρίς να αλλάζουν ι- διότητες ή όνομα. Διαφάνεια επανατοποθέτησης, δηλαδή παροχή δυνατότητας κινητικότητας στους πόρους ενώ χρησιμοποιούνται. Διαφάνεια αντιγραφής, δηλαδή απόκρυψη του πλήθους αντιγράφων που μπορεί να έχει ένας πόρος για λόγους ασφάλειας ή αξιοπιστίας (ανοχής σφαλμάτων). -16-

Διαφάνεια ταυτοχρονισμού, δηλαδή παροχή δυνατότητας αυτόματου και συνεπούς διαμοιρασμού των πόρων την ίδια στιγμή μεταξύ διαφορετικών χρηστών. Διαφάνεια βλαβών, δηλαδή απόκρυψη αστοχίας πόρων. Διαφάνεια διατήρησης, δηλαδή απόκρυψη της κατάστασης αποθήκευσης ενός πόρου (προσωρινός, σε μνήμη RAM, ή μόνιμος, σε δίσκο). Διαφάνεια παραλληλισμού, δηλαδή απόκρυψη του αν μία εφαρμογή ε- κτελείται σε έναν ή πολλαπλούς επεξεργαστές. 2.5 Λογισμικό και λειτουργικά συστήματα κατανεμημένων συστημάτων Στον τομέα των κατανεμημένων συστημάτων,τα λειτουργικά συστήματα διακρίνονται σε συνεκτικά, στα οποία το λογισμικό διατηρεί και εμφανίζει στους χρήστες μία ενιαία εικόνα των πόρων, και μη συνεκτικά, στα οποία οι κόμβοι είναι θεμελιωδώς ανεξάρτητοι μεταξύ τους και επικοινωνούν σε κάποιον περιορισμένο βαθμό. Έτσι διακρίνουμε τους εξής τύπους Λ.Σ.: 1. Κατανεμημένα λειτουργικά συστήματα(dos) : Αυτού του είδους τα λειτουργικά συστήματα είναι συνεκτικά και αφορούν συστήματα πολυεπεξεργαστών ή ομοιογενών υπολογιστών. Είναι ένα πραγματικό καθαρά κατανεμημένο σύστημα. -17-

Εικόνα 7 : Στιγμιότυπο του λειτουργικού συστήματος Plan 9 της Dell Labs 2. Λειτουργικά συστήματα δικτύου(nos): Μη συνεκτικά συστήματα, στα οποία οι κόμβοι είναι ετερογενείς και η λειτουργία τους ώς κατανεμημένα συστήματα βασίζεται στην επικοινωνία των συστημάτων μέσω της δικτυακής υποδομής. Εικόνα 8: Cisco s NX-OS -18-

3. Ενδιάμεσο λογισμικό: Σε αυτού του τύπου τα συστήματα, ένα στρώμα λογισμικού, παρεμβάλλεται μεταξύ της εκάστοτε εφαρμογής και του λειτουργικού συστήματος δικτύου, παρέχοντάς μας την ψευδαίσθηση ενός ομοιογενούς κατανεμημένου συστήματος DOS. Με αυτήν την υλοποίηση, έχουμε τα πλεονεκτήματα ενός DOS σε θέματα παραμετροποίησης, ομοιογένειας και διαχείρισης πόρων, και του NOS σε θέματα ετερογενούς hardware και διαρθρωσιμότητας. Ώς παραδείγματα ενδιάμεσου λογισμικού έχουμε το MPI, ένα σύνολο βιβλιοθηκών για την ανταλλαγή μηνυμάτων μεταξύ των κόμβων ενός δικτύου, και του HADOOP με το οποίο θα ασχοληθούμε στην παρούσα πτυχιακή. Εικόνα 9: Δομή λειτουργίας του MPI 2.6 Μοντέλα κατανεμημένων λειτουργικών συστημάτων Στο σχεδιασμό των κατανεμημένων λειτουργικών συστημάτων, ο πιο βασικός παράγοντας είναι η διαδιεργασική επικοινωνία και η ανταλλαγή πληροφοριών μεταξύ των κόμβων του συστήματος. Υπάρχουν 2 βασικά μοντέλα που είναι υπεύθυνα για την διαχείριση και την διεκπεραίωση αυτών των λειτουργιών. Το μοντέλο πελάτηδιακομιστή(client-server), και το μοντέλο ομότιμης επικοινωνίας(peer-to-peer). 2.6.1 Μοντέλο πελάτη διακομιστή (Client - Server model) -19-

Εικόνα 10: Το μοντέλο Client-Server Το μοντέλο πελάτη διακομιστή, περιγράφει την σχέση μεταξύ συνεργαζόμενων προγραμμάτων σε μια εφαρμογή. Ο πελάτης δε μοιράζεται κανέναν από τους πόρους του και απλά ζητάει περιεχόμενα ή υπηρεσίες από τον διακομιστή. Ο διακομιστής από τη μεριά του, παρέχει μια λειτουργία ή υπηρεσία σε έναν η περισσότερους πελάτες οι οποίοι είναι αυτοί που αιτούνται από τον διακομιστή αυτές τις υπηρεσίες. Οι διακομιστές, χαρακτηρίζονται από τις υπηρεσίες και τις λειτουργίες που παρέχουν. Για παράδειγμα, υπάρχουν διακομιστές ιστοσελίδων, διακομιστές ηλεκτρονικού ταχυδρομείου, διακομιστές αρχείων και γενικά οποιοσδήποτε hardware ή software πόρος του διακομιστή μπορεί να μοιραστεί στους πελάτες. Το αν ένας υπολογιστής είναι πελάτης, διακομιστής ή και τα δύο, αποφασίζεται από τη φύση της εφαρμογής που χρειάζεται τις υπηρεσίες. Για παράδειγμα, ένας μόνο υπολογιστής, μπορεί να δρα ώς διακομιστής ιστοσελίδων, διακομιστής αρχείων, ενώ την ίδια στιγμή να απαντάει σε κλήσεις διαφορετικής φύσης άλλων πελατών. Λογισμικό πελάτη και λογισμικό διακομιστή, μπορούν να βρίσκονται και να επικοινωνούν μεταξύ τους στον ίδιο υπολογιστή για την καλύτερη και πιο αρθρωτή κατανομή των πόρων και των διεργασιών. Επικοινωνία πελάτη/διακομιστή Μια υπηρεσία διακομιστή, ενώ χρησιμοποιεί ένα μέρος των πόρων του διακομιστή για να εκτελεστεί, πρέπει, αυτή η διαδικασία απάντησης του αιτήματος του πελάτη και παροχής της υπηρεσίας, να μην απασχολεί καθόλου τον πελάτη. Το μόνο που πρέπει να καταλάβει ο πελάτης είναι η απάντηση από τον διακομιστή, δηλαδή το περιεχόμενο της υπηρεσίας(να καταλαβαίνει το πρωτόκολλο επικοινωνίας όπως και το πώς είναι διαμορφωμένα τα δεδομένα που λαμβάνει από τον διακομιστή). -20-

Οι πελάτες και οι διακομιστές ανταλλάσσουν μηνύματα μέσω ενός μοτίβου μηνυμάτων αιτήματος/απάντησης: ο πελάτης στέλνει ένα αίτημα, ενώ ο διακομιστής επιστρέφει μια απάντηση. Η ανταλλαγή αυτή μηνυμάτων, είναι ένα παράδειγμα διαδιεργασικής επικοινωνίας. Συμπεραίνουμε λοιπόν ότι για να επικοινωνήσουν οι υπολογιστές(η τα προγράμματα) πρέπει να έχουν μια κοινή γλώσσα και να ακολουθούν συγκεκριμένους κανόνες έτσι ώστε και οι δύο να ξέρουν τι θα περιμένουν. Η γλώσσα και οι κανόνες αυτοί, ορίζονται από το πρωτόκολλο επικοινωνίας. Όλα τα πρωτόκολλα επικοινωνίας, λειτουργούν στο επίπεδο εφαρμογών. Το πρωτόκολλο επιπέδου εφαρμογής, ορίζει το βασικό μοτίβου του διαλόγου. Για την διαμόρφωση των δεδομένων, ώστε να είναι κατανοητά και σταθερά δομημένα, ο διακομιστής μπορεί να χρησιμοποιεί μια διεπαφή προγραμματισμού εφαρμογών(api/δπε). Η ΔΠΕ είναι ένα στρώμα αφαίρεσης (abstraction layer) στο οποίο τα δεδομένα διαμορφώνονται, ώστε κατά την επικοινωνία, τα δεδομένα να είναι δομημένα με έναν σταθερό και προσχεδιασμένο τρόπο, και έτσι να είναι δυνατή η επικοινωνία ανεξαρτήτως της πλατφόρμας στην οποία τρέχει ο εκάστοτε διακομιστής πελάτης. Ο διακομιστής μπορεί να λάβει αιτήματα από πολλούς διαφορετικούς πελάτες σε πολύ σύντομο χρονικό διάστημα. Επειδή ο αριθμός των διεργασιών που μπορεί να ε- κτελέσει είναι περιορισμένος, βασίζεται σε ένα σύστημα χρονοπρογραμματισμού, το οποίο διαχειρίζεται την προτεραιότητα και την εκτέλεση των αιτημάτων. Μέσω του χρονοπρογραμματισμού και των περιορισμό υπερκατανάλωσης πόρων από πελάτες, ο διακομιστής μπορεί και παραμένει λειτουργικός κάτω από μεγάλο φόρτο. -21-

2.6.2 Μοντέλο Ομότιμης επικοινωνίας (Peer-to-peer model) Εικόνα 11: Το μοντέλο P2P. Το μοντέλο ομότιμης επικοινωνίας, περιγράφει την εφαρμογή της διάδρασης μεταξύ κόμβων ενός κατανεμημένου συστήματος, κατά την οποία μοιράζεται ο φόρτος και οι διεργασίες μεταξύ τους ενώ ο κάθε κόμβος συμμετέχει ισοδύναμα στην εκτέλεση της εφαρμογής. Οι κόμβοι, κάνουν άμεσα διαθέσιμο ένα μέρος των πόρων τους, όπως την επεξεργαστική ισχύ, τον χώρο αποθήκευσής τους και το εύρος δικτύου τους, χωρίς να χρειάζεται συντονισμός για αυτό από κάποιον διακομιστή. Σε αντίθεση με το μοντέλο πελάτηδιακομιστή όπου υπάρχει σαφής διαχωρισμός του παροχέα υπηρεσιών και του αιτούμενου, οι κόμβοι είναι ταυτόχρονα προμηθευτές και καταναλωτές των πόρων, δηλαδή δρουν σαν έναν αυτόνομο πακέτο πελάτη διακομιστή. Θα λέγαμε οτι το P2P μοντέλο, είναι ένα δίκτυο αυτόνομων κόμβων πελάτη-διακομιστή φέροντας πολλά κοινά τόσο στην αρχιτεκτονική όσο και στον τρόπο λειτουργίας του μοντέλου. Για την σύνδεση μεταξύ των κόμβων, επί το πλείστον εφαρμόζεται μια τεχνική κατά την οποία δημιουργούμε ένα εικονικό δίκτυο επικάλυψης πάνω από το φυσικό στρώμα δικτύωσης. Στο εικονικό αυτό δίκτυο, οι κόμβοι αποτελούν ένα υποσύνολο των κόμβων του φυσικού δικτύου. Τα δεδομένα ωστόσο, ανταλλάζονται απευθείας μέσω του υποκείμενου TCP/IP δικτύου, αλλά στο στρώμα εφαρμογής (application layer), οι κόμβοι μπορούν να επικοινωνούν μεταξύ τους απευθείας, μέσω των λογικών συνδέσμων του δικτύου επικάλυψης(για κάθε λογικό σύνδεσμο του δικτύου επικάλυψης, α- -22-

ντιστοιχεί ένα μονοπάτι του υποκείμενου φυσικού δικτύου). Το δίκτυο επικάλυψης, χρησιμοποιείται για την ευρετηρίαση και την ανακάλυψη των κόμβων του δικτύου, καθιστώντας έτσι το δίκτυο ανεξάρτητο από την φυσική τοπολογία του δικτύου. Με βάση το πώς οι κόμβοι συνδέονται μεταξύ τους εντός του δικτύου επικάλυψης, και το πως οι πόροι αναπροσαρμόζονται και τοποθετούνται, μπορούμε να διαχωρίσουμε τα δίκτυα σε αδόμητα και δομημένα (ή ως ένα υβρίδιο των δύο). Μη δομημένα δίκτυα Τα μη δομημένα δίκτυα δεν χαρακτηρίζονται από μία συγκεκριμένη δομή στο δίκτυο επικάλυψης στο σχεδιασμό τους, αλλά σχηματίζονται από κόμβους που δημιουργούν τυχαία συνδέσεις μεταξύ τους. Επειδή δεν υπάρχει συγκεκριμένη δομή στο σχεδιασμό τους, τα αδόμητα δίκτυα P2P είναι πολύ εύκολο να δημιουργηθούν και επιτρέπουν τοπικές βελτιστοποιήσεις σε διαφορετικές περιοχές του δικτύου επικάλυψης. Επίσης, λόγω του ότι ο ρόλος του κάθε κόμβου στο δίκτυο είναι ο ίδιος, τα δίκτυα αυτά είναι πολύ ανθεκτικά και αποδοτικά σε καταστάσεις όπου υπάρχει μεγάλος αριθμός κόμβων που μπαίνουν και βγαίνουν συχνά απο το δίκτυο. Στον αντίποδα, αυτή η έλλειψη δομής, δημιουργεί και κάποια μειονεκτήματα τα οποία εντοπίζονται κυρίως στον τομέα της απόδοσης. Πιο συγκεκριμένα, όταν ένας κόμβος θέλει να βρει κάποια δεδομένα στο δίκτυο, το ερώτημα αναζήτησης που θα σταλεί, πρέπει να διατρέξει όλους τους κόμβους του δικτύου, μέχρι να βρεθούν αυτοί που θα έχουν τα δεδομένα. Επιπροσθέτως, αφού δεν υπάρχει αντιστοίχηση μεταξύ των κόμβων και των δεδομένων που εμπεριέχουν, υπάρχει το ενδεχόμενο να μην βρεθούν τα δεδομένα οπότε όλη η διαδικασία είναι άσκοπη. Αυτό σημαίνει αυξημένη κίνηση στο δίκτυο, και άσκοπη χρήση επεξεργαστικής ισχύος. Δομημένα δίκτυα Στα δομημένα peer-to-peer δίκτυα, το στρώμα επικάλυψης είναι οργανωμένο σε μια συγκεκριμένη τοπολογία, ενώ το πρωτόκολλο εξασφαλίζει ότι κάθε κόμβος μπορεί να αναζητήσει αποτελεσματικά στο δίκτυο για δεδομένα/πόρους, ακόμη και εάν αυτά είναι εξαιρετικά σπάνια. Ο πιο κοινός τύπος δομημένων δικτύων P2P, είναι αυτά που χρησιμοποιούν έναν κατανεμημένο πίνακα κατακερματισμού (DHT), στον οποίο μια παραλλαγή του μοντέλου συνεπούς κατακερματισμού (Data hashing) χρησιμοποιείται για να ανατεθεί η ιδιοκτησία του κάθε αρχείου σε έναν συγκεκριμένο κόμβο. Αυτό, επιτρέπει στους συνεργά- -23-

ζοντες πόρους να ψάξουν πόρους στο δίκτυο χρησιμοποιώντας τον πίνακα κατακερματισμού: Δηλαδή, τα πεδία (κλειδί, τιμή) αποθηκεύονται στο DHT ώς ζεύγη, έτσι ώστε ο κάθε κόμβος μπορεί να ανακτήσει τα δεδομένα που χρειάζεται, χρησιμοποιώντας το κλειδί που αντιστοιχεί σε αυτά. Ωστόσο, προκειμένου να δρομολογούν αποτελεσματικά μέσω του δικτύου, οι κόμβοι σε ένα δομημένο επικάλυψης πρέπει να διατηρούν καταλόγους των γειτονικών κόμβων που πληρούν συγκεκριμένα κριτήρια. Κάτι τέτοιο, καθιστά το μοντέλο αυτό λιγότερο ισχυρό σε δίκτυα με υψηλό ποσοστό αποσυνδέσεων, δηλαδή σε δίκτυα στα οποία κόμβοι εισέρχονται και εξέρχονται συχνά. Σε συνθήκες, λοιπόν, πραγματικού φόρτου εργασίας, δημιουργούνται διάφορα προβλήματα χρήσης αυτού του δομημένου μοντέλου, όπως υψηλό κόστος διαφήμισηςανεύρεσης πόρων, ή η στατική/δυναμική ανισορροπία φόρτου. Στον τομέα της ασφάλειας, τα δίκτυα p2p, λόγω της δομής τους παρουσιάζουν αρκετές προκλήσεις, διότι η ισότητα μεταξύ των κόμβων, όπως και η μη κεντρική διαχείριση δεδομένων, καθιστά πολύ εύκολη την παραβίαση της ασφάλειας ενός κόμβου, με αποτέλεσμα να υπάρχει πρόσβαση στο δίκτυο. Για τους ίδιους λόγους, οποιοδήποτε είδος κακόβουλου λογισμικού μπορεί, πολύ εύκολα, να μεταδοθεί μέσω των δικτύων αυτών. Αν και έχουν αναπτυχθεί διάφορες λύσεις για θέματα ασφαλείας, το client-server μοντέλο, είναι πιο ασφαλές και πολύ πιο εύκολα διαχειρίσιμο. Υβριδικής δομής δίκτυα Το υβριδικό μοντέλο, είναι ένας συνδυασμός των peer-to-peer και client-server μοντέλων. Το πιο κοινό υβριδικό μοντέλο, είναι να έχουμε έναν κεντρικό server που βοηθά τους κόμβους να βρουν ο ένας τον άλλον. Υπάρχει μια ποικιλία των υβριδικών μοντέλων, τα οποία κάνουν συμβιβασμούς μεταξύ της κεντρικής λειτουργικότητας που παρέχεται από ένα δομημένο διακομιστή και την ισότητα κόμβων που παρέχεται από τα καθαρά μη δομημένα δίκτυα peer-to-peer. Τα υβριδικά μοντέλα έχουν καλύτερη απόδοση από οποιοδήποτε είτε καθαρό αδόμητο δίκτυο ή καθαρό δομημένο δίκτυο από μόνο του, επειδή ορισμένες λειτουργίες, όπως η έρευνα, χρειάζονται μια κεντρική λειτουργικότητα, αλλά επωφελούνται από την αποκεντρωμένη ομαδοποίηση των κόμβων που παρέχονται από μη δομημένα δίκτυα. -24-

2.6.3 Πλεονεκτήματα-Μειονεκτήματα Το client-server μοντέλο, όπως και το peer2peer, παρουσιάζουν συγκεκριμένα πλεονεκτήματα και μειονεκτήματα και ανάλογα με τις απαιτήσεις της επιχείρησης, θα πρέπει να αποφασιστεί ποιο μοντέλο θα την εξυπηρετεί καλύτερα λαμβάνοντας υπόψιν παράγοντες όπως κόστος, απόδοση, ασφάλεια, απαιτήσεις χρηστών κτλ. Στον παρακάτω πίνακα παρουσιάζονται κάποιες ιδιότητες των δύο μοντέλων, με σκοπό να υπάρξει μια άμεση όψη των προτερημάτων και μειονεκτημάτων των 2 βασικών μοντέλων: Client/Server Model Δικαιώματα πρόσβασης Μέσω λιστών/χρηστών και α- δειών. Κάθε χρήστης/ομάδα έχει τα δικαιώματα που του χορηγούνται από τον διαχειριστή κι έτσι κάθε χρήστης μπορεί να έχει διαφορετικά επίπεδα πρόσβασης. Peer-to-Peer Οι πόροι διαχειρίζονται ξεχωριστά από τον κάθε κόμβο του δικτύου. Ανάλογα με το ΛΣ,η πρόσβαση ορίζεται με κωδικούς α- σφαλείας Για συγκεκριμένους πόρους, με λίστες κωδικών χρηστών ανά σύστημα,ακόμα και μερικές φορές χωρίς τίποτα από τα δύο, καθιστώντας οποιονδήποτε στο δίκτυο να αποκτά πρόσβαση στους πόρους του δικτύου. Ασφάλεια Απόδοση Κόστος Hardware Υψηλή: Η πρόσβαση στους πόρους-υπηρεσίες είναι αυστηρά ελεγχόμενη μέσω αδειών πρόσβασης ανά χρήση - ομάδα. Υψηλή: Ο server χρησιμοποιείται αποκλειστικά για την εξυπηρέτηση πελατών και χρησιμοποιεί όλους τους απαραίτητους πόρους για αυτό. Υψηλό: Ένας συνήθης server υψηλής απόδοσης με δυνατότητες πλεονασμού, έχει πολύ υψηλό κόστος Εξαρτάται : Αν χρησιμοποιούνται κωδικοί, τότε όποιος έχει τον κωδικό έχει πρόσβαση. Αν όχι, ο- ποιοσδήποτε στο δίκτυο έχει πρόσβαση. Αν πάλι χρησιμοποιείται μοντέλο αδειών χρηστών/ομάδων, τότε η ασφάλεια είναι εφάμιλλη με το μοντέλο πελάτη/διακομιστή. Χαμηλότερη: Ο κάθε κόμβος, εκτελεί συνήθως και χρέη workstation έτσι οι πόροι που μπορεί να διαθέσει είναι περιορισμένοι. Χαμηλό: Χρήση της υπάρχουσας υποδομής του δικτύου. Οι σταθμοί εργασίας λειτουργούν ώς servers. Κόστος Software Υψηλότερο : Σε μερικές περι- Χαμηλότερο: Συνήθως το λογι- -25-

Αντίγραφα ασφαλείας Πλεονασμός πτώσεις το κόστος του λογισμικού αυξάνεται ανάλογα με τις άδειες χρηστών. Εφόσον όλα τα δεδομένα βρίσκονται στον server,η διαχείρισή τους γίνεται από τον διαχειριστή του, και η λήψη αντίγραφων α- σφαλείας είναι μια πολύ εύκολη και σίγουρη διαδικασία. Δυνατότητες εφεδρικής τροφοδοσίας,άμεσης αλλαγής δίσκων, ακόμα και εφεδρικοί servers είναι κοινές πρακτικές στο χώρο του μοντέλου server/client. Έτσι ακόμα και το λογισμικό του server μπορεί στις περισσότερες περιπτώσεις και διαχειρίζεται τα προβλήματα αυτόματα. σμικό είναι μέρος του λειτουργικού συστήματος. Αποκεντροποιημένη προσέγγιση.η λήψη αντιγράφων ασφαλείας πρέπει να γίνεται σε κάθε κόμβο και η διαδικασία γίνεται από τον εκάστοτε χρήστη. Στο μοντέλο αυτό δεν υπάρχει αληθινός πλεονασμός μεταξύ των κόμβων. Συνήθως χρειάζεται χειροκίνητη επίλυση των προβλημάτων,με μεγάλες πιθανότητες απώλειας δεδομένων. Ωστόσο, πλέον, στις περισσότερες περιπτώσεις χρησιμοποιούμε υβριδικές λύσεις μεταξύ των δύο, όπως το Apache Hadoop με το οποίο ασχολείται η παρούσα πτυχιακή εργασία. Αξιοποιώντας αυτές τις λύσεις, έχουμε φτάσει σε ένα σημείο που μπορούμε πλέον να πούμε οτι τα μειονεκτήματα και των δύο μοντέλων, είτε έχουν εξαλειφθεί, είτε έχουν περιοριστεί σε πολύ μεγάλο βαθμό. Μέσω του Hadoop, παρέχεται μεγάλη ταχύτητα, αποδοτικότητα και ευκολία διαχείρισης, μεγάλη ασφάλεια σε θέματα απώλειας δεδομένων, και όλα αυτά σε μηδενικό πολλές φορές κόστος με τη χρήση παρούσας υποδομής. ΒΙΒΛΙΟΓΡΑΦΙΑ Abdul Rehman Aslam, distributed computing, 2012- http://www.slideshare.net/itsmeabd/distributed-computing-16085721 Andrew S. Tanenbaum,Maarten van Steen, Κατανεμημένα Συστήματα,Εκδόσεις Κλειδάριθμος, Έτος έκδοσης : 2005, Κωδικός ISBN: 9602099240 Client-Server Model, Wikipedia - http://en.wikipedia.org/wiki/client%e2%80%93server_model -26-

Distributed Computing, Wikipedia - http://en.wikipedia.org/wiki/distributed_computing Peer to Peer, Wikipedia - http://en.wikipedia.org/wiki/peer-to-peer Ι. Κ. Κάβουρας, Ι. Ζ. Μήλης, Γ. Β. Ξυλωμένος, Α. Α. Ρουκουνάκη, «Κατανεμημένα συστήματα με Java - 3η έκδοση»,κωδικός ISBN: 978-960-461-463-9 Παράλληλα και κατανεμημένα συστήματα, Wikipedia - http://el.wikipedia.org/wiki/%ce%a0%ce%b1%cf%81%ce%ac%ce%bb %CE%BB%CE%B7%CE%BB%CE%B1_%CE%BA%CE%B1%CE%B9_%C E%BA%CE%B1%CF%84%CE%B1%CE%BD%CE%B5%CE%BC%CE%B7 %CE%BC%CE%AD%CE%BD%CE%B1_%CF%83%CF%85%CF%83%CF% 84%CE%AE%CE%BC%CE%B1%CF%84%CE%B1 Παράλληλος προγραμματισμός, Wikipedia - http://el.wikipedia.org/wiki/%ce%a0%ce%b1%cf%81%ce%ac%ce%bb %CE%BB%CE%B7%CE%BB%CE%BF%CF%82_%CF%80%CF%81%CE% BF%CE%B3%CF%81%CE%B1%CE%BC%CE%BC%CE%B1%CF%84%CE %B9%CF%83%CE%BC%CF%8C%CF%82-27-

3 Apache Hadoop Εικόνα 12: Το λογότυπο του Apache Hadoop. Η βιβλιοθήκη λογισμικού Apache Hadoop, είναι ένα framework που επιτρέπει την κατανεμημένη επεξεργασία μεγάλων συνόλων δεδομένων σε συστάδες υπολογιστών με τη χρήση απλών μοντέλων προγραμματισμού. Είναι σχεδιασμένο για να χρησιμοποιείται από έναν απλό server εώς και σε χιλιάδες μηχανές, η καθεμία με τις δικές τις υπολογιστικές και αποθηκευτικές δυνατότητες. Αντί να βασίζεται σε υλικό για την παροχή υψηλής διαθεσιμότητας, η ίδια η βιβλιοθήκη έχει σχεδιαστεί για να εντοπίζει και να χειρίζεται τις αποτυχίες σε επίπεδο εφαρμογών, έτσι ώστε να προσφέρει μια υψηλά διαθέσιμη υπηρεσία που τρέχει σε ένα σύμπλεγμα από ηλεκτρονικούς υπολογιστές, καθένας από τους οποίους μπορεί να είναι επιρρεπής σε αποτυχίες. Δημιουργήθηκε το 2005 από τους Doug Cutting και Mike Cafarella σαν απάντηση στα προβλήματα ισχύος και αποθήκευσης που αντιμετώπιζαν κατά τη δημιουργία του Nutch project, ουσιαστικά μιας μηχανής αναζήτησης της Yahoo. Ήταν το σύνολο τεχνολογιών που προήλθε από το Nutch στα κομμάτια κατανεμημένης επεξεργασίας και αποθήκευσης, υλοποιώντας τα MapReduce και GFS μοντέλα της Google. Ενώ στις αρχές της δημιουργίας του ήταν μια πολύ περιορισμένη πλατφόρμα, η εξέλιξή του ήταν τρομακτική σε όλα τα επίπεδα. Πλέον, είναι ένα πανίσχυρο εργαλείο του οποίου η αξία υπολογίζεται οτι στην αγορά μέχρι το 2016 θα πλησιάσει τα 813 εκατομμύρια δολάρια. Συμπεριλαμβάνει τα ακόλουθα modules : 1) Hadoop Common : Τα γενικά εργαλεία τα οποία χρειάζονται να υποστηρίζουν τα υπόλοιπα modules. -28-

2) Hadoop Distributed File System (HDFS ): Ένα κατανεμημένο σύστημα αρχείων το οποίο παρέχει υψηλής ταχύτητας και διαθεσιμότητας πρόσβαση στα δεδομένα. 3) Hadoop Yarn : Ένα framework για τον προγραμματισμό και την διαχείριση των διεργασιών στα επιμέρους υπολογιστικά κομμάτια του Hadoop. 4) Hadoop MapReduce: Ένα σύστημα βασισμένο στο YARN το οποίο αναλαμβάνει την παράλληλη επεξεργασία των δεδομένων. Τα modules αυτά δεν είναι τα μόνα που σχετίζονται με το Hadoop. Υπάρχει μια πληθώρα τεχνολογιών και προγραμμάτων όπως π.χ. το Ambari, ένα πρόγραμμα το όποιο δημιουργήθηκε με σκοπό να παρακολουθεί την κατάσταση διάφορων επιμέρους τμημάτων ενός Hadoop cluster, όπως το HDFS, τη διαχείριση διεργασιών του YARN αλλά και άλλων modules. Δεν είναι στα πλαίσια της πτυχιακής εργασίας να επεκταθεί σε αυτές τις τεχνολογίες, αλλά αξίζει να αναφερθεί, οτι πολλά από αυτά τα εργαλεία χρησιμοποιούνται σε εγκαταστάσεις τεράστιας κλίμακας από εταιρίες κολοσσούς, και υπάρχει πολύ ενδιαφέρον για το μέλλον αυτών των τεχνολογιών παγκόσμια. Εικόνα 13: Το οικοσύστημα του Hadoop. 3.1 Hadoop Common Περιέχει τα απαραίτητα Java (JAR) τα αρχεία και τα scripts που χρειάζονται για να ξεκινήσει Hadoop. Το πακέτο παρέχει επίσης τον πηγαίο κώδικα, τεκμηρίωση, και ένα τμήμα συνεισφορών που περιλαμβάνει έργα από την κοινότητα Hadoop. Για τον αποτελεσματικότερο προγραμματισμό των εργασιών, κάθε σύστημα αρχείων συμβατό με το Hadoop θα πρέπει να παρέχει συνειδητοποίηση τοποθεσίας: Το όνο- -29-

μα του rack (ακριβέστερα, του switch ), όπου ένας κόμβος εκτελεί εφαρμογές Hadoop μπορεί να χρησιμοποιηθεί για να εκτελεστούν εργασίες στον κόμβο όπου τα δεδομένα βρίσκονται, και, ελλείψει αυτού, στο ίδιο rack/switch,για να επιτευχθεί μείωση κυκλοφορίας δεδομένων στο δίκτυο. Το HDFS χρησιμοποιεί αυτή τη μέθοδο για αναπαραγωγή δεδομένων, έτσι ώστε να κρατήσει αντίγραφα των δεδομένων σε διαφορετικά racks. Ο στόχος είναι να μειωθούν οι επιπτώσεις της διακοπής ενέργειας ή καταστροφής ενός rack/switch, με τα δεδομένα να εξακολουθήσουν να είναι αναγνώσιμα. Ένα απλό Hadoop cluster περιλαμβάνει ένα master και πολλαπλά worker nodes. Ο master κόμβος αποτελείται από έναν JobTracker, TaskTracker, NameNode και DataNode. Ένας slave ή worker κόμβος δρα ως DataNode και TaskTracker, αν και είναι δυνατόν να έχουμε slave nodes τα οποία λειτουργούν ώς μόνο DataNodes ή μόνο TaskNodes. Αυτές οι περιπτώσεις είναι πιο σπάνιες και χρησιμοποιούνται μόνο σε λιγότερο συνηθισμένες εφαρμογές. Για να τρέξει, απαιτεί το Java Runtime Environment (JRE) 1.6 ή νεότερη έκδοση. Τα scripts εκκίνησης και τερματισμού προαπαιτούν ότι έχει δημιουργηθεί επικοινωνία Secure Shell (SSH) μεταξύ των κόμβων του συμπλέγματος. Σε ένα μεγαλύτερο cluster, τo HDFS διαχειρίζεται μέσω ενός primary dedicated NameNode server, το οποίο φιλοξενεί το index του συστήματος αρχείων, και εντός δευτερεύοντος NameNode που μπορεί να αποθηκεύσει στιγμιότυπα του primary NameNode, εμποδίζοντας έτσι τη φθορά του συστήματος αρχείων και μειώνοντας την απώλεια δεδομένων. Στην περίπτωση αυτή, ένας αυτόνομος JobTracker, μπορεί να διαχειριστεί τις διεργασίες. Σε περιπτώσεις cluster, στους οποίος η Hadoop MapReduce engine έχει αναπτυχθεί πάνω σε ένα εναλλακτικό σύστημα αρχείων οι NameNode, secondary NameNode, και DataNode του HDFS αντικαθίστανται από τα αντίστοιχα ισοδύναμα του εκάστοτε συστήματος αρχείων. 3.2 Hadoop Distributed File System (HDFS) Το HDFS είναι ένα κατανεμημένο, επεκτάσιμο και φορητό σύστημα αρχείων γραμμένο σε Java για το έργο Hadoop, το οποίο διαφοροποιείται από τα υπόλοιπα κατανεμημένα συστήματα αρχείων, ως προς το ότι έχει ώς βασικούς του στόχους την ανοχή λαθών και το ότι τα τρέχει με διαφάνεια σε μηχανήματα χαμηλού κόστους. Συνήθως, εμπεριέχει ένα NameNode συν ένα σύμπλεγμα DataNodes, αν και υπάρχουν διάφορες δυνατές ε- πιλογές για λόγους κρισιμότητας και ασφάλειας (secondary NameNodes etc.). Κάθε -30-

DataNode σερβίρει blocks δεδομένων μέσω του δικτύου χρησιμοποιώντας ένα πρωτόκολλο block, ειδικά φτιαγμένο για το HDFS, ενώ το σύστημα αρχείων χρησιμοποιεί το πρωτόκολλο TCP / IP για επικοινωνία. Οι πελάτες χρησιμοποιούν κλήσεις απομακρυσμένης διαδικασίας (RPC) για να επικοινωνούν μεταξύ τους. Το HDFS αποθηκεύει μεγάλα αρχεία (συνήθως στο εύρος από gigabytes σε terabytes) σε πολλαπλές μηχανές. Επιτυγχάνει αξιοπιστία με την αντιγραφή δεδομένων σε πολλούς υπολογιστές, και ως εκ τούτου, θεωρητικά δεν απαιτεί αποθήκευση RAID(αλλά για να αυξηθεί η απόδοση Input/Output μερικές διαμορφώσεις RAID εξακολουθούν να είναι χρήσιμες). Με την προεπιλεγμένη τιμή αντιγραφής, (που ισούται με 3), τα δεδομένα αποθηκεύονται σε τρεις διαφορετικούς κόμβους: δύο στο ίδιο rack, και μία σε διαφορετικό. Οι DataNodes, μπορούν να επικοινωνούν μεταξύ τους για να εξισορροπήσουν τα δεδομένα, για να μετακινήσουν αντίτυπα μεταξύ των κόμβων και για να κρατήσουν την επανάληψη (replication) των δεδομένων σε υψηλά επίπεδα. Το HDFS δεν είναι πλήρως συμβατό με το POSIX, γιατί οι απαιτήσεις και οι στόχοι ενός POSIX συστήματος αρχείων διαφέρουν από τους στόχους μιας εφαρμογής Hadoop. Το κέρδος της μη POSIX συμβατότητας, είναι η αυξημένη απόδοση για τη διαμεταγωγή δεδομένων και υποστήριξη για μη-posix λειτουργίες όπως είναι η προσάρτηση (Append). Εικόνα 14:Απλοποιημένη άποψη της δομής του HDFS -31-

Το σύστημα αρχείων HDFS, περιλαμβάνει προαιρετικά ένα δευτερεύων NameNode, ένα παραπλανητικό όνομα που μερικοί ερμηνεύουν εσφαλμένα ως εφεδρικό NameNode, σε περίπτωση που ο πρωτεύων NameNode τεθεί εκτός σύνδεσης. Στην πραγματικότητα, ο δευτερεύων NameNode συνδέεται τακτικά με τον πρωτεύων NameNode και αποθηκεύει στιγμιότυπα των πληροφοριών καταλόγου του πρωτογενούς NameNode σε τοπικούς ή απομακρυσμένους καταλόγους. Αυτά τα στιγμιότυπα μπορούν να χρησιμοποιηθούν για να επανεκκινήσουμε έναν πρωτογενή NameNode, χωρίς να χρειάζεται να επαναληφθεί ολόκληρη η διαδικασία εκκίνησης του συστήματος αρχείων. Στη συνέχεια απλά επεξεργαζόμαστε το μητρώο για να δημιουργηθεί μια up-todate δομή καταλόγων. Ένα πλεονέκτημα της χρήσης του HDFS είναι το data awareness μεταξύ του job tracker και του task tracker. Ο job tracker προγραμματίζει την ανάθεση map και reduce εργασιών στους task trackers,γνωρίζοντας επακριβώς την θέση των δεδομένων. Με αυτήν την ιδιότητα μπορεί οι εργασίες να προγραμματιστούν με τέτοιον τρόπο, ώστε οι κοντινότεροι κόμβοι να επεξεργαστούν τα δεδομένα ανάλογα με την θέση τους. Αυτό μειώνει το ποσό της κίνησης που πηγαίνει πέρα από το δίκτυο και αποτρέπει την άσκοπη μεταφορά δεδομένων. Όταν το Hadoop χρησιμοποιείται με άλλα συστήματα αρχείων, δεν είναι πάντα δυνατό να υπάρξει αυτού του είδους το πλεονέκτημα. Αυτό μπορεί να έχει σημαντικές επιπτώσεις στο χρόνο εργασίας και ολοκλήρωσης, κάτι το οποίο έχει αποδειχθεί, ιδιαίτερα κατά την επεξεργασία μεγάλου όγκου δεδομένων. Το HDFS μπορεί να προσαφθεί πολύ εύκολα μέσω FUSE σε περιβάλλον Linux, κάτι που το κάνει πολύ ευέλικτο και εύκολα εγκαταστάσιμο σε οποιοδήποτε σύγχρονο Unix σύστημα. Μία απλή προσάρτηση κατά την εκκίνηση του Hadoop είναι ό,τι χρειάζεται ώστε να ξεκινήσει και να είναι πλήρως λειτουργικό σε όλους τους κόμβους. Έχει σχεδιαστεί για μεγάλο όγκο δεδομένων, τα οποία κατά βάση είναι σχετικά α- μετάβλητα. Συνεπώς δεν ενδείκνυται για εργασίες οι οποίες χρειάζονται συνεχή επεξεργασία και μεταβολή αρχείων. Η πρόσβαση στα αρχεία μπορεί να γίνει με διάφορους τρόπους και συνεχώς δημιουργούνται καινούρια εργαλεία ώστε να ικανοποιούν τις εκάστοτε απαιτήσεις. Υπάρχουν για παράδειγμα, το native Java API του Hadoop, το Thrift API, το commandline interface, web-interface μέσω HTTP κ.α. Συνοψίζοντας, τα χαρακτηριστικά που κάνουν τόσο λειτουργικό και χρήσιμο το HDFS είναι η αρθρωτή δομή του, το rack awareness όπως και η ασφάλεια σε περιπτώ- -32-

σεις αποτυχίας. Είναι από τα πιο ευρέως διαδεδομένα κατανεμημένα συστήματα αρχείων, και λόγω αυτού έχει γίνει η βάση για πάρα πολλά custom made συστήματα που χρησιμοποιούν εταιρίες όπως η Amazon, Facebook, Yahoo. Εντολές διαχείρισης αρχείων στο HDFS : Στην παράγραφο αυτήν θα παρουσιάσουμε μερικές εντολές στο command line interface για να δείξουμε τον τρόπο που λειτουργεί και πως αλληλοεπιδρούμε με το σύστημα αρχείων. Δεν διαφέρει ουσιαστικά από ένα τυπικό σύστημα αρχείων Unix, παρέχοντας μας αρκετές από τις πολύ χρήσιμες εντολές ενός τυπικού π.χ. bash shell. Δημιουργία φακέλου : hadoop fs -mkdir /hadoop_user/testfolder/dir1 /hadoop_user/testfolder/dir2 (όπως παρατηρούμε, η δομή του συστήματος αρχείων είναι πανομοιότυπη με ένα σύστημα αρχείων unix) Παρουσίαση περιεχομένων φακέλου : hadoop fs -ls /hadoop_user/testfolder Ανέβασμα(αντιγραφή προς HDFS) αρχείου στο κατανεμημένο σύστημα αρχείων : hadoop fs -put /home/user/test.txt /hadoop_user/testfolder/dir1/ Το πρώτο path μετά την εντολή put δείχνει στο αρχείο που θέλουμε να μεταφέρουμε από το τοπικό σύστημα αρχείων, ενώ το δεύτερο είναι το path του HDFS στο οποίο θα μεταφερθεί το αρχείο. Όμοια με την εντολή copyfromlocal Κατέβασμα(αντιγραφή από HDFS) αρχείου από το κατανεμημένο σύστημα αρχείων: hadoop fs -get /hadoop_user/testfolder/dir1/samplefile.txt /home/ Το πρώτο path μετά την εντολή get δείχνει στο αρχείο που θέλουμε να μεταφέρουμε από το HDFS,ενώ το δεύτερο είναι ο φάκελος του τοπικού συστήματος αρχείων. Όμοια με την εντολή copytolocal Εμφάνιση περιεχομένων αρχείου: hadoop fs -cat /hadoop_user/testfolder/dir1/abc.txt Αντιγραφή αρχείων εντός του HDFS: hadoop fs -cp /hadoop_user/testfolder/dir1/abc.txt /hadoop_user/testfolder/dir2 Μετακίνηση αρχείου εντός του HDFS: hadoop fs -cp /hadoop_user/testfolder/dir1/abc.txt /hadoop_user/testfolder/dir2 Διαγραφή αρχείων ή άδειων φακέλων: hadoop fs -rm /hadoop_user/testfolder/dir1/abc.txt Διαγραφή φακέλων με περιεχόμενα(recursive delete): hadoop fs -rmr /hadoop_user/testfolder/dir1/ -33-

Εμφάνιση τελευταίων γραμμών ενός αρχείου : hadoop fs -tail /hadoop_user/testfolder/dir1/abc.txt Αυτή η εντολή είναι ιδιαίτερα συνηθισμένη για την εμφάνιση διαφόρων αρχείων καταγραφής ενεργειών. Εμφάνιση μεγέθους αρχείου : hadoop fs -du /hadoop_user/testfolder/dir1/abc.txt Στην ιστοσελίδα του Hadoop μπορεί να βρεθεί μία πλήρης λίστα με όλες τις εντολές που υπάρχουν για το HDFS ακολουθούμενες από επεξήγηση της λειτουργίας τους. 3.3 Hadoop MapReduce Η MapReduce Engine, η οποία αποτελείται από ένα JobTracker, στον οποίο οι εκάστοτε εφαρμογές υποβάλλουν εργασίες MapReduce. Ο JobTracker σπρώχνει τις εργασίες στους διαθέσιμους TaskTracker κόμβους, προσπαθώντας να τις κρατήσει όσο πιο κοντά στα δεδομένα γίνεται. Ο JobTracker γνωρίζει ποιός κόμβος περιέχει τα δεδομένα, και ποιά άλλα μηχανήματα βρίσκονται κοντά. Αν οι εργασίες δεν μπορούν να φιλοξενηθούν στους κόμβους που περιέχουν τα δεδομένα, δίνεται προτεραιότητα στους κόμβους στο ίδιο rack. Αυτό μειώνει την κυκλοφορία του δικτύου και την ταχύτητα διαμεταγωγής. Εάν ένας TaskTracker για κάποιο λόγο δεν μπορεί να ανταποκριθεί σε κάποιο μέρος των εργασιών, ειδοποιείται ο JobTracker και τις αποστέλλει αλλού. Ο TaskTracker σε κάθε κόμβο ξεκινά μία JVM διεργασία έτσι ώστε αν ο TaskTracker α- ποτύχει να εκτελέσει κάποια διεργασία, να μην σταματήσει η λειτουργία του συνολικά. Μία ειδοποίηση στέλνεται από τον TaskTracker στον JobTracker κάθε λίγα λεπτά ώστε να ενημερώσει για την κατάστασή του. Οι καταστάσεις και οι πληροφορίες των JobTrackers και TaskTrackers μπορούν ανά πάσα στιγμή να παρατηρηθούν μέσω web interface. Αν και γενικά η παραπάνω περιγραφή, καλύπτει τη γενική εικόνα της μηχανής MapReduce, κατά την πάροδο του χρόνου έχει υποστεί τεράστιες αλλαγές, με μεγαλύτερη αυτήν της μετάβασης στην 2η έκδοση της, που ονομάζεται και YARN-Mapreduce. Η μεγαλύτερη αλλαγή που δικαιολογεί την μετάβαση στην v2.0, είναι ο διαχωρισμός στον JobTracker των 2 βασικών λειτουργιών του σε διαφορετικούς δαίμονες(daemons),οι οποίοι είναι ο resource manager daemon, και ο job scheduler/manager daemon. -34-

Εικόνα 15: Διαχωρισμός του Yarn Mapreduce 3.3.1 Λειτουργία του μοντέλου MapReduce Η εκάστοτε εφαρμογή που εκτελείται, στέλνει τις map και reduce εργασίες της στον JobTracker, ο οποίος με πολιτική FIFO (First In First Out), τις στέλνει στους TaskTrackers για εκτέλεση ανάλογα με τα ελεύθερα slots του καθενός. Οι TaskTrackers απλά εκτελούν τις εργασίες που τους αναθέτει ο JobTracker. Εάν ένας TaskTracker α- ποτύχει τότε στέλνεται ένα σήμα στον JobTracker που αναλαμβάνει να επιλύσει το πρόβλημα, χωρίς να χρειαστεί να τερματίσει ολόκληρη την εργασία. 3.3.2 Επισκόπηση της εκτέλεσης μιας MAPREDUCE εργασίας Αρχικά η είσοδος μοιράζεται σε Μ κομμάτια, που μπορούν να επεξεργαστούν παράλληλα, κάθε ένα από τα οποία θα πάει σε ξεχωριστή map διεργασία. Τα ενδιάμεσα κλειδιά μοιράζονται στους R Reducers με χρήση κάποιας συνάρτησης κατακερματισμού (π.χ. hash (key) mod R).Οι ενέργειες γίνονται με την εξής σειρά: 1. Η βιβλιοθήκη Map Reduce διασπά την είσοδο σε Μ κομμάτια, συνήθως μεγέθους 16-64Mb, και ξεκινά αρκετά αντίγραφα του προγράμματος στους κόμβους. 2. Ο JobTracker αναλαμβάνει την εύρεση των ανενεργών κόμβων, TaskTrackers, και να τους αναθέσει μια εργασία map ή reduce. 3. Εάν στο κόμβο, TaskTracker, έχει ανατεθεί μια εργασία map τότε διαβάζει το κομμάτι εισόδου που του αντιστοιχεί και το διαμορφώνει ως κλειδί-τιμή και το δίνει ως παράμετρο στην συνάρτηση map. Τα ενδιάμεσα αποτελέσματα κρατούνται στην μνήμη. -35-

4. Με βάση την συνάρτηση κατακερματισμού τα ενδιάμεσα αποτελέσματα γράφονται στο τοπικό δίσκο (σε R μέρη). Οι θέσεις των αποτελεσμάτων στέλνονται στον master - JobTracker ο οποίος είναι υπεύθυνος να τις διαμοιράσει στους R reducers - TaskTrackers. 5. Όταν κάποιος reducer ειδοποιηθεί για αυτές τις τοποθεσίες διαβάζει απομακρυσμένα τα δεδομένα από το δίσκο του αντίστοιχου mapper. Αφού διαβάσει όλα τα δεδομένα τα ταξινομεί με βάση το κλειδί και ομαδοποιεί τιμές που αντιστοιχούν στο ίδιο κλειδί. Εάν τα δεδομένα δεν χωράνε στην μνήμη τότε χρησιμοποιείται κάποιος αλγόριθμος εξωτερικής ταξινόμησης. 6. Τα ταξινομημένα ενδιάμεσα αποτελέσματα περνιούνται στην συνάρτηση reduce για να παραχθεί η τελική έξοδος η οποία γράφεται στο τέλος ενός αρχείου για την έξοδο της συγκεκριμένης διαμέρισης. 7. Αφού τελειώσουν όλες οι εργασίες στους TaskTrackers (map και reduce) ο JobTracker επιστρέφει και η εκτέλεση συνεχίζεται από τον κώδικα του χρήστη. Στο κατάλογο που έχει ορισθεί για την έξοδο υπάρχουν R αρχεία (ένα για κάθε reducer). Συνήθως αυτά χρησιμοποιούνται σαν είσοδος σε κάποια άλλη Map Reduce εργασία και δεν χρειάζεται να συγχωνευτούν. Τα ονόματα των αρχείων, ο αριθμός των reducers καθώς και ο διαμερισμός της εισόδου μπορούν να οριστούν από τον χρήστη. Σε όλες τις φάσεις εκτελείται διαχείριση σφαλμάτων και σε περίπτωση αποτυχίας το Hadoop μπορεί να επανεκκινήσει την εργασία που απέτυχε σε κάποιο άλλο κόμβο ή να ανακάμψει και να συνεχίσει την εκτέλεση με μικρό overhead. Όσο μεγαλύτερος ο αριθμός TaskTrackers, τόσο καλύτερο θα είναι και το load balancing. Εικόνα 16: Απλοποιημένη άποψη της λειτουργίας του MapReduce. -36-

3.4 Ποιοι το χρησιμοποιούν : Εικόνα 17: Άποψη της χρήσης του Hadoop, ανάλογα με το μέγεθος των cluster της κάθε εταιρίας Πλέον, δεν είναι υπερβολικό να πούμε ότι η συντριπτική πλειοψηφία των εταιριών που δραστηριοποιούνται άμεσα ή έμμεσα στον τομέα των Big Data, βασίζουν τις υποδομές τους στο Apache Hadoop ή κάποια τροποποιημένη έκδοσή του. Εταιρίες όπως Facebook, Amazon, Microsoft και Google δεν έχουν απλά υιοθετήσει την τεχνολογία του Hadoop, αλλα έχουν βελτιώσει την λειτουργία του, παρέχοντας α- κόμα και δικές τους λύσεις στα Big Data, όπως το EC2/3 Elastion MapReduce της Amazon. Μερικές από τις εταιρίες που έχουν επενδύσει, τροποποιήσει ή απλά χρησιμοποιήσει το Hadoop για τις ανάγκες τους είναι οι: Adobe Amazon Ebay Facebook Google IBM Last.fm LinkedIn Spotify -37-