Εξηγήθηκαν οι συσσωρευτές Spark: Apache Spark



Αυτό το blog Apache Spark εξηγεί λεπτομερώς τους συσσωρευτές Spark. Μάθετε τη χρήση του Spark συσσωρευτή με παραδείγματα. Οι συσσωρευτές σπινθήρων είναι σαν μετρητές Hadoop Mapreduce.

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

Ακολουθεί ένα ιστολόγιο σχετικά με τα πράγματα που πρέπει να γνωρίζετε για τους συσσωρευτές Spark.Με Όντας βασική δεξιότητα που αναζητούν οι περισσότεροι υπεύθυνοι προσλήψεων πληροφορικής, η ανάπτυξη και η ζήτησή της στον κλάδο υπήρξε εκθετική από την ίδρυσή της.





Τι είναι οι συσσωρευτές;

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

Για να καταλάβουμε γιατί χρειαζόμαστε συσσωρευτές, ας δούμε ένα μικρό παράδειγμα.



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

logs-Spark-accumulators

Υπάρχουν 4 πεδία,

Πεδίο 1 -> Πόλη



Πεδίο 2 -> Τοποθεσία

Πεδίο 3 -> Κατηγορία αντικειμένου που πωλήθηκε

Πεδίο 4 -> Τιμή πώλησης αντικειμένου

Ωστόσο, τα αρχεία καταγραφής μπορεί να είναι κατεστραμμένα. Για παράδειγμα, η δεύτερη γραμμή είναι μια κενή γραμμή, η τέταρτη γραμμή αναφέρει ορισμένα προβλήματα δικτύου και, τέλος, η τελευταία γραμμή εμφανίζει τιμή πώλησης μηδέν (κάτι που δεν μπορεί να συμβεί!).

Μπορούμε να χρησιμοποιήσουμε συσσωρευτές για να αναλύσουμε το αρχείο καταγραφής συναλλαγών για να μάθουμε τον αριθμό των κενών αρχείων καταγραφής (κενές γραμμές), τον αριθμό των φορών που το δίκτυο απέτυχε, οποιοδήποτε προϊόν που δεν έχει κατηγορία ή ακόμη και πόσες φορές καταγράφηκαν μηδενικές πωλήσεις. Μπορείτε να βρείτε το πλήρες αρχείο καταγραφής δείγματος εδώ .
Οι συσσωρευτές ισχύουν για οποιαδήποτε λειτουργία που είναι,
1. Υπολογιστική -> f (x, y) = f (y, x) , και
2. Συνεργάτης -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Για παράδειγμα, άθροισμα και Μέγιστη συναρτήσεις ικανοποιούν τις παραπάνω προϋποθέσεις, ενώ μέση τιμή δεν.

Γιατί να χρησιμοποιήσετε το Spark Accumulators;

Τώρα γιατί χρειαζόμαστε συσσωρευτές και γιατί να μην χρησιμοποιούμε μόνο μεταβλητές όπως φαίνεται στον παρακάτω κώδικα.

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

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

Μπορούμε να εφαρμόσουμε άλλους μετρητές για σφάλματα δικτύου ή μηδενική αξία πώλησης κ.λπ. Μπορείτε να βρείτε τον πλήρη πηγαίο κώδικα μαζί με την εφαρμογή των άλλων μετρητών εδώ .

Άτομα εξοικειωμένα με το Hadoop Map-Reduce θα παρατηρήσουν ότι οι συσσωρευτές του Spark είναι παρόμοιοι με τους μετρητές Map-Reduce της Hadoop.

αφαίρεση δεδομένων σε c ++

Προειδοποιήσεις

Όταν χρησιμοποιούμε συσσωρευτές, υπάρχουν ορισμένες προειδοποιήσεις που εμείς ως προγραμματιστές πρέπει να γνωρίζουμε,

  1. Υπολογισμοί μέσα μετασχηματισμοί αξιολογούνται τεμπέλη, οπότε εκτός αν δράση συμβαίνει στο RDD το μετασχηματισμοί δεν εκτελούνται. Ως αποτέλεσμα αυτού, οι συσσωρευτές που χρησιμοποιούνται μέσα λειτουργούν όπως χάρτης() ή φίλτρο() δεν θα εκτελεστεί, εκτός αν κάποια δράση συμβαίνει στο RDD.
  2. Εγγυήσεις Spark για ενημέρωση των συσσωρευτών μέσα Ενέργειες μόνο μία φορά . Έτσι, ακόμη και αν επανεκκινηθεί μια εργασία και υπολογίζεται ξανά η γενεαλογία, οι συσσωρευτές θα ενημερωθούν μόνο μία φορά.
  3. Το Spark δεν το εγγυάται μετασχηματισμοί . Επομένως, εάν επανεκκινηθεί μια εργασία και υπολογίζεται εκ νέου η γενεαλογία, υπάρχουν πιθανότητες ανεπιθύμητων παρενεργειών όταν οι συσσωρευτές θα ενημερωθούν περισσότερες από μία φορές.

Για να είστε στην ασφαλή πλευρά, χρησιμοποιείτε ΜΟΝΟ μόνο συσσωρευτές μέσα σε ενέργειες.
Ο κώδικας εδώ δείχνει ένα απλό αλλά αποτελεσματικό παράδειγμα για τον τρόπο επίτευξής του.
Για περισσότερες πληροφορίες σχετικά με τους συσσωρευτές, διαβάστε Αυτό .

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

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

Το Apache Spark CombByKey εξήγησε