Απομυθοποίηση Διαμερισμάτων στο Spark



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

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

Spark's Ανθεκτικά κατανεμημένα σύνολα δεδομένων (η αφαίρεση προγραμματισμού) αξιολογούνται χαλαρά και οι μετασχηματισμοί αποθηκεύονται ως κατευθυνόμενα ακυκλικά γραφήματα (DAG). Έτσι, κάθε ενέργεια στο RDD θα κάνει το Spark να υπολογίζει εκ νέου το DAG. Έτσι επιτυγχάνεται η ανθεκτικότητα στο Spark, διότι εάν κάποιος κόμβος εργαζομένου αποτύχει, τότε το DAG πρέπει απλώς να υπολογιστεί εκ νέου.





c ++ αλγόριθμος συγχώνευσης

Είναι επίσης υποχρεωτική για κρυφή μνήμη (επιμείνετε με κατάλληλο επίπεδο αποθήκευσης) το RDD έτσι ώστε οι συχνές ενέργειες στο RDD να μην αναγκάζουν το Spark να υπολογίσει ξανά το DAG.Τα θέματα που καλύπτονται σε αυτό το ιστολόγιο απαιτούνται ουσιαστικά για την πιστοποίηση Apache Spark και Scala. Τα θέματα που καλύπτονται σε αυτό το ιστολόγιο είναι ουσιαστικά απαραίτητα για .

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

Στο cluster computing, η κεντρική πρόκληση είναι η ελαχιστοποίηση της κίνησης δικτύου. Όταν τα δεδομένα είναι προσανατολισμένα στην τιμή-κλειδί, η κατάτμηση καθίσταται επιτακτική, διότι για μεταγενέστερους μετασχηματισμούς στο RDD, υπάρχει αρκετή αναδιάταξη δεδομένων στο δίκτυο. Εάν παρόμοια πλήκτρα ή εύρος κλειδιών αποθηκεύονται στο ίδιο διαμέρισμα, τότε η ανακατεύθυνση ελαχιστοποιείται και η επεξεργασία γίνεται ουσιαστικά γρήγορη.



Οι μετασχηματισμοί που απαιτούν ανακατεύθυνση δεδομένων σε κόμβους εργαζομένων επωφελούνται σε μεγάλο βαθμό από το διαχωρισμό. Τέτοιοι μετασχηματισμοί είναι cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, μείωσηByKey, CombByKey και ψάχνω .

Τα διαμερίσματα είναι διαμορφώσιμα υπό την προϋπόθεση ότι το RDD βασίζεται στην τιμή-κλειδί.

Ιδιότητες κατατμήσεων

  1. Τα Tuples στο ίδιο διαμέρισμα είναι εγγυημένα ότι βρίσκονται στο ίδιο μηχάνημα.
  2. Κάθε κόμβος σε ένα σύμπλεγμα μπορεί να περιέχει περισσότερα από ένα διαμερίσματα.
  3. Ο συνολικός αριθμός διαμερισμάτων είναι διαμορφώσιμος, από προεπιλογή ορίζεται στον συνολικό αριθμό πυρήνων σε όλους τους κόμβους εκτελεστών.

Τύποι διαμερισμάτων στο Spark

Το Spark υποστηρίζει δύο τύπους διαμερισμάτων,

  • Διαχωρισμός κατακερματισμού : Χρησιμοποιεί Java Object.hashCode μέθοδος για τον προσδιορισμό του διαμερίσματος ως partition = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



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

Παράδειγμα κώδικα

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

Ακολουθούν ορισμένα δεδομένα δοκιμής 12 συντεταγμένων (ως πλειάδες),

Δημιουργήστε ένα org.apache.spark.HashPartitioner του μεγέθους 2, όπου τα πλήκτρα θα χωριστούν σε αυτά τα δύο διαμερίσματα με βάση τον κωδικό κατακερματισμού των κλειδιών.

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

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

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

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

Γιατί πρέπει να μάθετε Spark μετά την απόκτηση του Hadoop

τι είναι μαριονέτα και σεφ

Apache Spark εναντίον Hadoop MapReduce