Περίληψη: | Τα τελευταία χρόνια ο όγκος, η ποικιλία και η ταχύτητα συνεχόμενων ροών δεδομένων, αυξάνονται με πρωτοφανή ρυθμό. Αυτό έχει ωθήσει ερευνητές και έμπειρους μηχανικούς, στην δημιουργία πολλών νέων συστημάτων και τεχνικών επεξεργασίας ροών δεδομένων. Ως αποτέλεσμα, η πιθανή προστιθέμενη αξία για τις επιχειρήσεις που μπορούν να τα αξιοποιήσουν είναι τεράστια. Συνεπώς, υπάρχει αντίστοιχα μεγάλη ανάγκη εκπαίδευσης όλο και περισσότερων νεών μηχανικών, οι οποίοι κατανοούν και μπορούν να χρησιμοποιήσουν αυτά τα εργαλεία.
Η συσταδοποίηση ροών είναι ένα από τα πιο σημαντικά προβλήματα που αντιμετωπίζουν οι επιχειρήσεις, καθώς χρησιμοποιείται για την εύρεση μοτίβων σε συνεχώς εξελισσόμενα δεδομένα πραγματικού χρόνου. Όμως, η υλοποίηση πολύπλοκων αλγορίθμων μηχανικής μάθησης και εξόρυξης δεδομένων είναι πολύ πιο δύσκολη όταν γίνεται σε ροές. Βασικοί λόγοι είναι η ανάγκη απόκρισης σε πραγματικό χρόνο, ο περιορισμένος αποθηκευτικός χώρος και ότι κάθε στοιχείο από τα δεδομένα επεξεργάζεται μόνο μια φορά. Συνεπώς, ένας νέος μηχανικός θα πρέπει (α) να κατανοεί την σχετική δύσκολη θεωρία, και (β) να μάθει την μυριάδα πολύπλοκων συστημάτων που χρησιμοποιούνται για την επίλυση του προβλήματος.
Πιστεύουμε πως ο καλύτερος και ταχύτερος τρόπος για νέους μηχανικούς να εντρυφούν με τον συγκεκριμένο τομέα, είναι η άμεση ενασχόληση τους με ένα πλήρες σύστημα που επιτρέπει τον πειραματισμό. Για αυτόν τον λόγο, υλοποιούμε ένα ολοκληρωμένο προγραμματιστικό πλαίσιο για κατανεμημένη συσταδοποίηση ροών δεδομένων. Το βασικό σχεδιαστικό κριτήριο είναι η μείωση της πολυπλοκότητας και ανομοιογένειας της αρχιτεκτονικής, χωρίς να παραβλέψουμε βασικές εγγυήσεις που αυτό πρέπει να προσφέρει (συνοχή δεδομένων, ανοχή σε σφάλματα κ.α.). Για αυτό, επιλέγουμε η υλοποίηση να γίνει στην Python με χρήση των Apache Spark και Kafka. Το προγραμματιστικό πλαίσιο παρέχει στον νέο μηχανικό όλα τα εργαλεία που χρειάζεται, όπως η αυτόματη δημιουργία κατανεμημένου περιβάλλοντος, συνθετικών δεδομένων ροής οποιασδήποτε μορφής, δυναμική παρακολούθηση της συσταδοποίησης, οπτικοποίηση των αποτελεσμάτων και σύγκριση με διαφορετικούς αλγορίθμους συσταδοποίησης ροών.
Χρησιμοποιώντας το προτεινόμενο προγραμματιστικό πλαίσιο, προσφέρουμε επίσης refactored υλοποίηση του DistStream/DenStream [4, 15] σε Python. Στον έλεγχο μας, παρά το εκτενές σύνολο βιβλιοθηκών που προσφέρει η Python, δεν βρήκαμε να υπάρχει κανένα αντίστοιχο εργαλείο που να επιτρέπει την ποιοτική κατανεμημένη συσταδοποίηση ροών δεδομένων μεγάλου όγκου. Επομένως, επιλέξαμε να υλοποιήσουμε τον DistStream/DenStream, επειδή σύμφωνα με τη βιβλιογραφία παράγει υψηλής ποιότητας συσταδοποίηση και μεγαλύτερη επεκτασιμότητα, σε σύγκριση με άλλους αλγορίθμους. Παρουσιάζουμε σύγκριση της υλοποίησης μας, ως προς την ποιότητα συσταδοποίησης και την ικανότητα διαχείρισης μεταβαλλόμενων κατανομών, με τους πιο δημοφιλείς αλγορίθμους που είναι αυτήν την στιγμή διαθέσιμοι στην Python. Συγκεκριμένα, τους CluStream [1] και Stream-Kmeans [11, 51] του πακέτου μηχανικής μάθησης σε ροές River [40]. Επίσης, καθώς οι αλγόριθμοι που προσφέρονται στην Python δεν λειτουργούν σε κατανεμημένα περιβάλλοντα, επιλέγουμε να συγκρίνουμε, ως προς την επεκτασιμότητα, την refactored σε Python υλοποίηση μας, με την υπάρχουσα σε Scala υλοποίηση του DistStream/DenStream.
|