Stateful Transformations with Windowing in Spark Streaming



Αυτή η ανάρτηση ιστολογίου ασχολείται με μετασχηματισμούς με την κατάσταση στο Spark Streaming. Μάθετε τα πάντα σχετικά με την παρακολούθηση δεδομένων κατά παρτίδες χρησιμοποιώντας D-Streams state-ful.

Συνεισφορά από τον Prithviraj Bose

Σε αυτό το blog θα συζητήσουμε την εκπληκτική ιδέα των κρατικών μετασχηματισμών του Apache Spark.





Τι είναι ο κρατικός μετασχηματισμός;

Η ροή σπινθήρα χρησιμοποιεί αρχιτεκτονική μικρο παρτίδων όπου τα εισερχόμενα δεδομένα ομαδοποιούνται σε μικρο δέσμες που ονομάζονται Discretized Streams (DStreams), η οποία χρησιμεύει επίσης ως βασική αφαίρεση προγραμματισμού. Τα DStreams έχουν εσωτερικά ανθεκτικά κατανεμημένα σύνολα δεδομένων (RDD) και ως αποτέλεσμα αυτού του τυπικού RDD μπορούν να γίνουν μετασχηματισμοί και ενέργειες.



Στη ροή, εάν έχουμε μια περίπτωση χρήσης για την παρακολούθηση δεδομένων μεταξύ παρτίδων, τότε χρειαζόμαστε κρατικές DStreams.

Για παράδειγμα, ενδέχεται να παρακολουθούμε την αλληλεπίδραση ενός χρήστη σε έναν ιστότοπο κατά τη διάρκεια της περιόδου λειτουργίας του χρήστη ή μπορεί να παρακολουθούμε ένα συγκεκριμένο hashtag twitter στο πέρασμα του χρόνου και να δούμε ποιοι χρήστες σε όλο τον κόσμο μιλούν για αυτό.

Τύποι μετασχηματισμού state-ful.



Τα State-ful DStreams είναι δύο τύπων - παρακολούθηση βάσει παραθύρου και παρακολούθηση πλήρους περιόδου σύνδεσης.

Για την κατάσταση παρακολούθησης όλα τα εισερχόμενα δεδομένα πρέπει να μετατραπούν σε ζεύγη τιμών-κλειδιών έτσι ώστε οι καταστάσεις κλειδιών να μπορούν να παρακολουθούνται κατά παρτίδες. Αυτή είναι μια προϋπόθεση.

Περαιτέρω θα πρέπει επίσης να επιτρέψουμε τον έλεγχο σημείων, μια έννοια που θα συζητήσουμε στα επόμενα ιστολόγια.

> Παρακολούθηση βάσει παραθύρου

Στην παρακολούθηση βάσει παραθύρου, οι εισερχόμενες παρτίδες ομαδοποιούνται σε χρονικά διαστήματα, δηλαδή ομαδικές ομάδες κάθε «x» δευτερόλεπτα. Περαιτέρω υπολογισμοί σε αυτές τις παρτίδες γίνονται χρησιμοποιώντας διαστήματα ολίσθησης.

Για παράδειγμα, εάν το διάστημα παραθύρου = 3 δευτερόλεπτα και το διάστημα ολίσθησης = 2 δευτερόλεπτα, τότε όλα τα εισερχόμενα δεδομένα θα ομαδοποιούνται σε παρτίδες κάθε 3 δευτερόλεπτα και οι υπολογισμοί σε αυτές τις παρτίδες θα πραγματοποιούνται κάθε 2 δευτερόλεπτα. Εναλλακτικά μπορούμε να πούμε, να κάνουμε υπολογισμούς κάθε 2 δευτερόλεπτα στις παρτίδες που έφτασαν τα τελευταία 3 δευτερόλεπτα.

spark-streaming-dstream-window

Στο παραπάνω διάγραμμα βλέπουμε ότι οι εισερχόμενες παρτίδες ομαδοποιούνται κάθε 3 μονάδες χρόνου (διάστημα παραθύρου) και οι υπολογισμοί γίνονται κάθε 2 μονάδες χρόνου (διάστημα διαφανειών).
Σημείωση: Σε αντίθεση με το Apache Flink, το Apache Spark δεν έχει την έννοια της ανατροπής, όλα τα παράθυρα γλιστρούν.

ΦΩΤΙΑ

Ένα δημοφιλές API για μετασχηματισμούς βάσει παραθύρων είναι

PairDStreamFunctions.reduceByKeyAndWindow .

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

Επιστροφές: Το μετασχηματισμένο DStream [(K, V)]

μείωFunc : Η συνάρτηση μειωμένης λειτουργίας.

invReduceFunc : Το αντίστροφο της παραπάνω λειτουργίας μείωσης. Αυτό απαιτείται για τον αποτελεσματικό υπολογισμό των εισερχόμενων και εξερχόμενων παρτίδων. Με τη βοήθεια αυτής της συνάρτησης, η αξία των παρτίδων που εξέρχονται αφαιρείται από τη συσσωρευμένη τιμή της παραπάνω συνάρτησης μείωσης. Για παράδειγμα, εάν υπολογίζουμε το άθροισμα των εισερχόμενων τιμών για τα αντίστοιχα κλειδιά, τότε για τις εξερχόμενες παρτίδες θα αφαιρέσουμε τις τιμές για τα αντίστοιχα κλειδιά (υπό την προϋπόθεση ότι υπάρχουν στην τρέχουσα παρτίδα αλλιώς αγνοήστε).

window Διάρκεια : Μονάδες χρόνου για την ομαδοποίηση των παρτίδων, αυτό θα πρέπει να είναι πολλαπλάσιο του διαστήματος παρτίδας.

πώς να ανεβείτε σε μια δύναμη στο java

slideDuration : Μονάδες χρόνου για υπολογισμό, αυτό θα πρέπει να είναι πολλαπλάσιο του διαστήματος παρτίδας. χωρίσματα : Το διαμέρισμα που θα χρησιμοποιηθεί για την αποθήκευση του προκύπτοντος DStream. Για περισσότερες πληροφορίες σχετικά με την κατάτμηση διαβάστε Αυτό .

φίλτροFunc : Λειτουργία για να φιλτράρετε τα ζεύγη τιμών-κλειδιών που έχουν λήξει, δηλαδή για παράδειγμα εάν δεν λάβουμε κάποια ενημέρωση για κάποιο κλειδί για κάποια στιγμή, ίσως θέλουμε να το καταργήσουμε.

Εδώ είναι πρόγραμμα για να μετρήσετε τις λέξεις που προέρχονται από μια ροή υποδοχής Έχουμε χρησιμοποιήσει την υπερφορτωμένη έκδοση της παραπάνω λειτουργίας με ένα διάστημα παραθύρου 4 δευτερολέπτων και ένα διάστημα διαφάνειας 2 δευτερολέπτων.

Στο επόμενο ιστολόγιό μου θα γράψω για την πλήρη παρακολούθηση συνεδρίας και τον έλεγχο.

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων και θα επικοινωνήσουμε μαζί σας.

Σχετικές αναρτήσεις:

Κατανεμημένη προσωρινή μνήμη με μεταβλητές εκπομπής