Τεχνικές επεξεργασίας ροών δεδομένων μεγάλου όγκου με χρήση Apache Spark

datacite.contributor.RelatedPersonΝικόλαος Αβούρης
datacite.contributor.RelatedPersonΧρήστος Φείδας
datacite.contributor.SupervisorΧρήστος Μακρής
dc.contributor.authorΜαγειράκος, Βασίλειος
dc.contributor.otherMageirakos, Vasileios
dc.date.accessioned2022-09-22T09:02:36Z
dc.date.available2022-09-22T09:02:36Z
dc.date.issued2022-09
dc.degreegraduateThesis
dc.description.abstractΤα τελευταία χρόνια ο όγκος, η ποικιλία και η ταχύτητα συνεχόμενων ροών δεδομένων, αυξάνονται με πρωτοφανή ρυθμό. Αυτό έχει ωθήσει ερευνητές και έμπειρους μηχανικούς, στην δημιουργία πολλών νέων συστημάτων και τεχνικών επεξεργασίας ροών δεδομένων. Ως αποτέλεσμα, η πιθανή προστιθέμενη αξία για τις επιχειρήσεις που μπορούν να τα αξιοποιήσουν είναι τεράστια. Συνεπώς, υπάρχει αντίστοιχα μεγάλη ανάγκη εκπαίδευσης όλο και περισσότερων νεών μηχανικών, οι οποίοι κατανοούν και μπορούν να χρησιμοποιήσουν αυτά τα εργαλεία. Η συσταδοποίηση ροών είναι ένα από τα πιο σημαντικά προβλήματα που αντιμετωπίζουν οι επιχειρήσεις, καθώς χρησιμοποιείται για την εύρεση μοτίβων σε συνεχώς εξελισσόμενα δεδομένα πραγματικού χρόνου. Όμως, η υλοποίηση πολύπλοκων αλγορίθμων μηχανικής μάθησης και εξόρυξης δεδομένων είναι πολύ πιο δύσκολη όταν γίνεται σε ροές. Βασικοί λόγοι είναι η ανάγκη απόκρισης σε πραγματικό χρόνο, ο περιορισμένος αποθηκευτικός χώρος και ότι κάθε στοιχείο από τα δεδομένα επεξεργάζεται μόνο μια φορά. Συνεπώς, ένας νέος μηχανικός θα πρέπει (α) να κατανοεί την σχετική δύσκολη θεωρία, και (β) να μάθει την μυριάδα πολύπλοκων συστημάτων που χρησιμοποιούνται για την επίλυση του προβλήματος. Πιστεύουμε πως ο καλύτερος και ταχύτερος τρόπος για νέους μηχανικούς να εντρυφούν με τον συγκεκριμένο τομέα, είναι η άμεση ενασχόληση τους με ένα πλήρες σύστημα που επιτρέπει τον πειραματισμό. Για αυτόν τον λόγο, υλοποιούμε ένα ολοκληρωμένο προγραμματιστικό πλαίσιο για κατανεμημένη συσταδοποίηση ροών δεδομένων. Το βασικό σχεδιαστικό κριτήριο είναι η μείωση της πολυπλοκότητας και ανομοιογένειας της αρχιτεκτονικής, χωρίς να παραβλέψουμε βασικές εγγυήσεις που αυτό πρέπει να προσφέρει (συνοχή δεδομένων, ανοχή σε σφάλματα κ.α.). Για αυτό, επιλέγουμε η υλοποίηση να γίνει στην 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.
dc.description.translatedabstractIn recent years the volume, variety and velocity of continuous data streams have been increasing at an unprecedented rate. This has prompted researchers and experienced engineers to develop many novel stream processing systems and techniques. As a result, the potential added value for businesses that leverage these systems and techniques is enormous. Thus, there is a correspondingly great need to train more young engineers who understand and can use data streaming tools. Stream clustering is one of the most important problems, related to big data, that businesses face, as it is used to find patterns in constantly evolving streams. Implementing complex machine learning and data mining algorithms is a much more difficult task when done for data streams. The key reasons are the need for real-time processing with low latency, the limited storage, and the requirement that each element of the data is processed only once. Thus, a young engineer should first be able to understand the difficult theory involved, and secondly learn the myriad of complex systems that are used in real world data streaming workloads. We believe that the best and fastest way, for young engineers, to learn a new field, is to directly start tinkering with a complete system that allows for experimentation. Thus, we develop an end-to-end programming framework for distributed stream clustering. The main design criterion is the minimization of the complexity and heterogeneity of the distributed stream processing architecture, without neglecting important system guarantees (data consistency, fault tolerance, etc.). For these reasons, we choose to implement the framework in Python while utilizing Apache Spark and Kafka. The framework provides the young engineer with all the tools she needs, such as automatic creation of a distributed environment, tools to create synthetic data of any distribution, online monitoring, visualization of the final results and tools to compare different stream clustering algorithms. Using our proposed framework, we also offer a refactored implementation of DistStream/DenStream [4, 15] in Python. In our review, despite the extent of Python’s library ecosystem, we did not find any equivalent tool that allows for high quality distributed clustering in large data streams. Therefore, we chose to implement DistStream/DenStream, because according to the literature it produces high-quality clusters and much greater scalability, compared to other algorithms. We present a comparison of our implementation, in terms of clustering quality and ability to handle distribution shifts, with the most popular algorithms currently available in Python. Specifically, CluStream [1] and Stream-Kmeans [11, 51] of the River [40] online machine learning library. Also, since these algorithms offered in Python do not work in distributed environments, we choose to compare the scalability of our refactored Python implementation with the existing Scala implementation of DistStream/DenStream.
dc.identifier.urihttps://nemertes.library.upatras.gr/handle/10889/23289
dc.language.isoel
dc.rightsAttribution-NonCommercial-ShareAlike 3.0 United States*
dc.rights.urihttp://creativecommons.org/licenses/by-nc-sa/3.0/us/*
dc.subjectΡοές δεδομένων
dc.subjectΜηχανική μάθηση
dc.subject.alternativeData streams
dc.subject.alternativeDistStream/DenStream
dc.titleΤεχνικές επεξεργασίας ροών δεδομένων μεγάλου όγκου με χρήση Apache Spark
dc.title.alternativeProcessing big data streaming using Apache Spark
Files
Original bundle
Now showing 1 - 1 of 1
No Thumbnail Available
Name:
Nemertes_Mageirakos(ele).pdf
Size:
3.3 MB
Format:
Adobe Portable Document Format
Description:
License bundle
Now showing 1 - 1 of 1
No Thumbnail Available
Name:
license.txt
Size:
4.53 KB
Format:
Item-specific license agreed upon to submission
Description: