Project for Distributed Systems 2016
Ανάπτυξη ενός συστήματος που θα αξιοποιεί MapReduce και Android το οποίο θα μπορεί να βρει τις δημοφιλέστερες τοποθεσίες και τα τα τοπία, στα οποία οι χρήστες βγάζουν φωτογραφίες σε ένα συγκρεκριμμένο χρονικό διάστημα και περιοχή.
- Mapper: Μετράει τον αριθμό των δημοσιευμένων φωτογραφιών σε κάθε γεωγραφικό σημείο του εύρους για το οποίο είναι υπέυθυνος και θα τα ταξινομήσει. Προωθεί τα πρώτα k αποτελέσματα.
- Reducer: Συγχωνεύει τα ενδιάμεσα αποτελέσματα. Υπολογίζει τα συνολικά πρώτα k αποτελέσματα, αφαιρεί πιθανά διπλότυπα.
(key, value) => (τοποθεσία, #δημοσιευμένων_φωτογραφιών_στην_τοποθεσία)
τοποθεσία = (latitude, longitude) = (μήκος, πλάτος)
MAP
___________________________________________________________
| .. |. ..... | .|
| .....|......... .|. . ... . ..| CPU_core1
|________________|____________________|___________________|
| |....... .. | . . |
| | .. . . .. | . | CPU_core2
|________________|____________________|___________________|
| .. | | . |
| .. | .. ..... . . ..| . . | CPU_core3
|________________|____________________|___________________|
| . | . | . |
| ... | | . | CPU_core4
|________________|____________________|___________________|
mapper1 mapper2 mapper3
- Σε κάθε κόμβο θα υπάρχει ένας ή περισσότεροι map workers που θα ακούνε σε κάποιο (προκαθορισμένο) port για συνδέσεις.
- Κάθε map worker θα λαμβάνει συνδέσεις οι οποίες θα περέχουν ένα συγκεκριμένο χωρικό και χρονικό εύρος. Αυτά θα έχουν καθοριστεί από τον "πελάτη" που έκανε τη σύνδεση.
- Στη συνέχεια, ο map worker θα εξάγει τα δεδομένα για το συγκεκριμένο εύρος από τη βάση που θα σας δοθεί.
- Ο κάθε map worker θα καταμετρήσει τον αριθμό των δημοσιευμένων φωτογραφιών σε κάθε γεωγραφικό σημείο και θα τα ταξινομήσει. Μόλις ολοκληρωθεί η επεξεργασία θα προωθήσει τα top-K αποτελέσματα στη reduce συνάρτηση ως key-value pair και θα ενημερώσει τον πελάτη που κάλεσε τη map συνάρτηση ότι ολοκληρώθηκε.
- Στη δική μας περίπτωση κάθε κλειδί αναφέρεται σε μία τοποθεσία και το value είναι ο αριθμός των φωτογραφιών που βρέθηκαν σε αυτό το μέρος.
- Όταν ο πελάτης ενημερωθεί ότι όλες οι map συναρτήσεις έχουν τελειώσει δίνει εντολή στην reduce συνάρτηση να επεξεργαστεί τα ενδιάμεσα ζεύγη key/values pairs, που έχει πάρει ως είσοδο. Έτσι η reduce συνάρτηση, θα υπολογίσει τα συνολικά top-K γεωγραφικά σημεία με βάση το πλήθος των φωτογραφιών στην συγκεκριμένη περιοχή, καθώς και να αφαιρέσει τυχόν διπλότυπες εικόνες.
- Όταν η reduce συνάρτηση ολοκληρωθεί το τελικό αποτέλεσμα επιστρέφεται στον χρήστη.
- (Bonus1) Στα βήματα 2 και 6 για κάθε νέο αίτημα για Map και Reduce, οι αντίστοιχοι κόμβοι ξεκινάνε ένα νέο νήμα για κάθε client, έτσι ώστε να μπορούν να εξυπηρετήσουν πολλούς clients ταυτόχρονα.
Περιγραφή: Αυτό το βήµα αναφέρεται στην υλοποίηση µιας εφαρµογής που θα εκτελείται σε συσκευές µε λειτουργικό Android και θα τους εµφανίζει τις δηµοφιλέστερες τοποθεσίες όπου οι χρήστες βγάζουν φωτογραφίες. Η εφαρµογή θα υλοποιηθεί στην πλατφόρµα Android και θα επωφελείται από το Map Raduce framework, το οποίο θα τρέχει ανεξάρτητα.
- Κάθε χρήστης θα πρέπει να µπορεί να ορίσει µια τοποθεσία ως γεωγραφικό τετράγωνο και µια χρονική διάρκεια µέσα από την εφαρµογή.
- Η εφαρµογή θα είναι υπεύθυνη για να δηµιουργήσει το block των ορίων αναζήτησης που απαιτούνται να γίνουν map, δηλαδή, θα πρέπει να τεµαχίσει το γεωγραφικό τετράγωνο σε n (>= 3) ίσα µέρη τα οποία θα αναλάβει να στείλει στους map workers.
- Τέλος, µόλις λάβει τις πιο συχνές τοποθεσίες τις εµφανίζει µε κάποιο γραφικό τρόπο (πάνω σε χάρτη).
- (Bonus2) Δηµιουργία διεπαφής (και του αντίστοιχου service) µέσω τις οποίας ο χρήστης θα µπορεί να τραβήξει µια νέα φωτογραφία σε κάποιο σηµείο ενδιαφέροντος και να την στείλει στον αντίστοιχο εξυπηρετητή όπου θα προσθέσει το checkin στη βάση µε τα υπόλοιπα checkins.
- (Βοnus3) Error Handling: Σε περίπτωση που κάποιος κόµβος έχει ‘πέσει’, ή η απάντηση αργήσει πολύ, η εφαρµογή να είναι σε θέση να διαχειριστεί αυτή την κατάσταση(Αν κάποιος map worker έχει πέσει τότε το ερώτηµα να σταλεί σε κάποιον άλλο διαθέσιµο, σε περίπτωση που όλοι οι map κόµβοι ή ο reducer έχουν πέσει τότε να ειδοποιηθεί ο χρήστης γι αυτό)
Ο πηγαίος κώδικας της εφαρµογής Android µαζί µε ένα blog στο οποίο θα παρέχετε αναλυτική τεκµηρίωση του συστήµατος που αναπτύξατε στο οποίο θα πρέπει να περιγράφονται αναλυτικά:
- Ποιά αρχεία αποτελούν την τελική εφαρµογή και πώς σχετίζονται µεταξύ τους
- Αρχιτεκτονική της εφαρµογής και τυχόν αποκλίσεις από τις αρχικές προδιαγραφές
- Πώς εκτελείται ακριβώς η εφαρµογή µαζί µε παραδείγµατα και screen shots
- Τί σας δυσκόλεψε περισσότερο κατα την υλοποίηση
- Τι θα θέλατε να προσθέσετε ακόµα στην εφαρµογή ή οτιδήποτε άλλο θεωρείτε ενδιαφέρον