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

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

Πλήρης περιγραφή

Λεπτομέρειες βιβλιογραφικής εγγραφής
Κύριος συγγραφέας: Μαγειράκος, Βασίλειος
Άλλοι συγγραφείς: Mageirakos, Vasileios
Γλώσσα:Greek
Έκδοση: 2022
Θέματα:
Διαθέσιμο Online:https://nemertes.library.upatras.gr/handle/10889/23289
id nemertes-10889-23289
record_format dspace
institution UPatras
collection Nemertes
language Greek
topic Ροές δεδομένων
Μηχανική μάθηση
Data streams
DistStream/DenStream
spellingShingle Ροές δεδομένων
Μηχανική μάθηση
Data streams
DistStream/DenStream
Μαγειράκος, Βασίλειος
Τεχνικές επεξεργασίας ροών δεδομένων μεγάλου όγκου με χρήση Apache Spark
description Τα τελευταία χρόνια ο όγκος, η ποικιλία και η ταχύτητα συνεχόμενων ροών δεδομένων, αυξάνονται με πρωτοφανή ρυθμό. Αυτό έχει ωθήσει ερευνητές και έμπειρους μηχανικούς, στην δημιουργία πολλών νέων συστημάτων και τεχνικών επεξεργασίας ροών δεδομένων. Ως αποτέλεσμα, η πιθανή προστιθέμενη αξία για τις επιχειρήσεις που μπορούν να τα αξιοποιήσουν είναι τεράστια. Συνεπώς, υπάρχει αντίστοιχα μεγάλη ανάγκη εκπαίδευσης όλο και περισσότερων νεών μηχανικών, οι οποίοι κατανοούν και μπορούν να χρησιμοποιήσουν αυτά τα εργαλεία. Η συσταδοποίηση ροών είναι ένα από τα πιο σημαντικά προβλήματα που αντιμετωπίζουν οι επιχειρήσεις, καθώς χρησιμοποιείται για την εύρεση μοτίβων σε συνεχώς εξελισσόμενα δεδομένα πραγματικού χρόνου. Όμως, η υλοποίηση πολύπλοκων αλγορίθμων μηχανικής μάθησης και εξόρυξης δεδομένων είναι πολύ πιο δύσκολη όταν γίνεται σε ροές. Βασικοί λόγοι είναι η ανάγκη απόκρισης σε πραγματικό χρόνο, ο περιορισμένος αποθηκευτικός χώρος και ότι κάθε στοιχείο από τα δεδομένα επεξεργάζεται μόνο μια φορά. Συνεπώς, ένας νέος μηχανικός θα πρέπει (α) να κατανοεί την σχετική δύσκολη θεωρία, και (β) να μάθει την μυριάδα πολύπλοκων συστημάτων που χρησιμοποιούνται για την επίλυση του προβλήματος. Πιστεύουμε πως ο καλύτερος και ταχύτερος τρόπος για νέους μηχανικούς να εντρυφούν με τον συγκεκριμένο τομέα, είναι η άμεση ενασχόληση τους με ένα πλήρες σύστημα που επιτρέπει τον πειραματισμό. Για αυτόν τον λόγο, υλοποιούμε ένα ολοκληρωμένο προγραμματιστικό πλαίσιο για κατανεμημένη συσταδοποίηση ροών δεδομένων. Το βασικό σχεδιαστικό κριτήριο είναι η μείωση της πολυπλοκότητας και ανομοιογένειας της αρχιτεκτονικής, χωρίς να παραβλέψουμε βασικές εγγυήσεις που αυτό πρέπει να προσφέρει (συνοχή δεδομένων, ανοχή σε σφάλματα κ.α.). Για αυτό, επιλέγουμε η υλοποίηση να γίνει στην 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.
author2 Mageirakos, Vasileios
author_facet Mageirakos, Vasileios
Μαγειράκος, Βασίλειος
author Μαγειράκος, Βασίλειος
author_sort Μαγειράκος, Βασίλειος
title Τεχνικές επεξεργασίας ροών δεδομένων μεγάλου όγκου με χρήση Apache Spark
title_short Τεχνικές επεξεργασίας ροών δεδομένων μεγάλου όγκου με χρήση Apache Spark
title_full Τεχνικές επεξεργασίας ροών δεδομένων μεγάλου όγκου με χρήση Apache Spark
title_fullStr Τεχνικές επεξεργασίας ροών δεδομένων μεγάλου όγκου με χρήση Apache Spark
title_full_unstemmed Τεχνικές επεξεργασίας ροών δεδομένων μεγάλου όγκου με χρήση Apache Spark
title_sort τεχνικές επεξεργασίας ροών δεδομένων μεγάλου όγκου με χρήση apache spark
publishDate 2022
url https://nemertes.library.upatras.gr/handle/10889/23289
work_keys_str_mv AT mageirakosbasileios technikesepexergasiasroōndedomenōnmegalouonkoumechrēsēapachespark
AT mageirakosbasileios processingbigdatastreamingusingapachespark
_version_ 1771297357082656768
spelling nemertes-10889-232892022-09-24T06:23:45Z Τεχνικές επεξεργασίας ροών δεδομένων μεγάλου όγκου με χρήση Apache Spark Processing big data streaming using Apache Spark Μαγειράκος, Βασίλειος Mageirakos, Vasileios Ροές δεδομένων Μηχανική μάθηση Data streams DistStream/DenStream Τα τελευταία χρόνια ο όγκος, η ποικιλία και η ταχύτητα συνεχόμενων ροών δεδομένων, αυξάνονται με πρωτοφανή ρυθμό. Αυτό έχει ωθήσει ερευνητές και έμπειρους μηχανικούς, στην δημιουργία πολλών νέων συστημάτων και τεχνικών επεξεργασίας ροών δεδομένων. Ως αποτέλεσμα, η πιθανή προστιθέμενη αξία για τις επιχειρήσεις που μπορούν να τα αξιοποιήσουν είναι τεράστια. Συνεπώς, υπάρχει αντίστοιχα μεγάλη ανάγκη εκπαίδευσης όλο και περισσότερων νεών μηχανικών, οι οποίοι κατανοούν και μπορούν να χρησιμοποιήσουν αυτά τα εργαλεία. Η συσταδοποίηση ροών είναι ένα από τα πιο σημαντικά προβλήματα που αντιμετωπίζουν οι επιχειρήσεις, καθώς χρησιμοποιείται για την εύρεση μοτίβων σε συνεχώς εξελισσόμενα δεδομένα πραγματικού χρόνου. Όμως, η υλοποίηση πολύπλοκων αλγορίθμων μηχανικής μάθησης και εξόρυξης δεδομένων είναι πολύ πιο δύσκολη όταν γίνεται σε ροές. Βασικοί λόγοι είναι η ανάγκη απόκρισης σε πραγματικό χρόνο, ο περιορισμένος αποθηκευτικός χώρος και ότι κάθε στοιχείο από τα δεδομένα επεξεργάζεται μόνο μια φορά. Συνεπώς, ένας νέος μηχανικός θα πρέπει (α) να κατανοεί την σχετική δύσκολη θεωρία, και (β) να μάθει την μυριάδα πολύπλοκων συστημάτων που χρησιμοποιούνται για την επίλυση του προβλήματος. Πιστεύουμε πως ο καλύτερος και ταχύτερος τρόπος για νέους μηχανικούς να εντρυφούν με τον συγκεκριμένο τομέα, είναι η άμεση ενασχόληση τους με ένα πλήρες σύστημα που επιτρέπει τον πειραματισμό. Για αυτόν τον λόγο, υλοποιούμε ένα ολοκληρωμένο προγραμματιστικό πλαίσιο για κατανεμημένη συσταδοποίηση ροών δεδομένων. Το βασικό σχεδιαστικό κριτήριο είναι η μείωση της πολυπλοκότητας και ανομοιογένειας της αρχιτεκτονικής, χωρίς να παραβλέψουμε βασικές εγγυήσεις που αυτό πρέπει να προσφέρει (συνοχή δεδομένων, ανοχή σε σφάλματα κ.α.). Για αυτό, επιλέγουμε η υλοποίηση να γίνει στην 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. In 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. 2022-09-22T09:02:36Z 2022-09-22T09:02:36Z 2022-09 https://nemertes.library.upatras.gr/handle/10889/23289 el Attribution-NonCommercial-ShareAlike 3.0 United States http://creativecommons.org/licenses/by-nc-sa/3.0/us/ application/pdf