Προγραμματισμός

Εκμάθηση: Αρχιτεκτονική και συστάδες εφαρμογών Spark

Αποκτήστε το πλήρες βιβλίο
Data Analytics με Spark Using Python (Addison-Wesley Data & Analytics Series) MSRP 44,99 $ Δείτε το

Αυτό το άρθρο είναι ένα απόσπασμα από το βιβλίο Pearson Addison-Wesley «Data Analytics with Spark Using Python» του Jeffrey Aven. Ανατυπώθηκε εδώ με άδεια από το Pearson © 2018. Για περισσότερες πληροφορίες, επισκεφθείτε τη διεύθυνση informit.com/aven/infoworld.

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

Ανατομία εφαρμογής Spark

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

Κάθε στοιχείο έχει συγκεκριμένο ρόλο στην εκτέλεση ενός προγράμματος Spark. Μερικοί από αυτούς τους ρόλους, όπως τα στοιχεία του πελάτη, είναι παθητικοί κατά την εκτέλεση. Άλλοι ρόλοι είναι ενεργοί στην εκτέλεση του προγράμματος, συμπεριλαμβανομένων των στοιχείων που εκτελούν λειτουργίες υπολογισμού.

Τα στοιχεία μιας εφαρμογής Spark είναι:

  • ο οδηγός
  • ο αφέντης
  • ο διαχειριστής συμπλέγματος
  • οι εκτελεστές

Όλα τρέχουν σε κόμβους εργαζομένων, γνωστά και ως εργαζόμενοι.

Το σχήμα 1 δείχνει όλα τα εξαρτήματα Spark στο πλαίσιο μιας αυτόνομης εφαρμογής Spark.

Pearson Addison-Wesley

Όλα τα στοιχεία Spark - συμπεριλαμβανομένων των διαδικασιών προγράμματος οδήγησης, κύριου και εκτελεστή - εκτελούνται σε εικονικές μηχανές Java. Το JVM είναι ένας κινητήρας χρόνου εκτέλεσης πολλαπλών πλατφορμών που μπορεί να εκτελέσει οδηγίες που έχουν συνταχθεί σε Java bytecode. Το Scala, στο οποίο είναι γραμμένο το Spark, μεταγλωττίζεται σε bytecode και εκτελείται σε JVM.

Είναι σημαντικό να γίνει διάκριση μεταξύ των στοιχείων της εφαρμογής χρόνου εκτέλεσης του Spark και των τοποθεσιών και των τύπων κόμβων στους οποίους εκτελούνται. Αυτά τα στοιχεία εκτελούνται σε διαφορετικά μέρη χρησιμοποιώντας διαφορετικούς τρόπους ανάπτυξης, οπότε μην σκέφτεστε αυτά τα στοιχεία σε φυσικούς κόμβους ή σε όρους εμφάνισης. Για παράδειγμα, κατά την εκτέλεση του Spark στο YARN, θα υπήρχαν πολλές παραλλαγές του Σχήματος 1. Ωστόσο, όλα τα στοιχεία που απεικονίζονται εξακολουθούν να εμπλέκονται στην εφαρμογή και έχουν τους ίδιους ρόλους.

Οδηγός σπινθήρα

Η διάρκεια ζωής μιας εφαρμογής Spark ξεκινά και τελειώνει με το πρόγραμμα οδήγησης Spark. Το πρόγραμμα οδήγησης είναι η διαδικασία που χρησιμοποιούν οι πελάτες για την υποβολή αιτήσεων στο Spark. Ο οδηγός είναι επίσης υπεύθυνος για τον προγραμματισμό και τον συντονισμό της εκτέλεσης του προγράμματος Spark και την επιστροφή της κατάστασης ή / και των αποτελεσμάτων (δεδομένων) στον πελάτη. Το πρόγραμμα οδήγησης μπορεί να βρίσκεται φυσικά σε έναν πελάτη ή σε έναν κόμβο του συμπλέγματος, όπως θα δείτε αργότερα.

SparkSession

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

Πριν από το Spark 2.0, τα σημεία εισόδου για εφαρμογές Spark περιελάμβαναν το SparkContext, που χρησιμοποιείται για εφαρμογές πυρήνα Spark. το SQLContext και HiveContext, που χρησιμοποιείται με εφαρμογές Spark SQL. και το StreamingContext, που χρησιμοποιείται για εφαρμογές Spark Streaming. Το αντικείμενο SparkSession που εισήχθη στο Spark 2.0 συνδυάζει όλα αυτά τα αντικείμενα σε ένα σημείο εισόδου που μπορεί να χρησιμοποιηθεί για όλες τις εφαρμογές του Spark.

Μέσω των θυγατρικών αντικειμένων SparkContext και SparkConf, το αντικείμενο SparkSession περιέχει όλες τις ιδιότητες διαμόρφωσης χρόνου εκτέλεσης που ορίζει ο χρήστης, συμπεριλαμβανομένων ιδιοτήτων διαμόρφωσης όπως το κύριο, το όνομα της εφαρμογής και ο αριθμός των εκτελεστών. Το σχήμα 2 δείχνει το αντικείμενο SparkSession και ορισμένες από τις ιδιότητες διαμόρφωσής του στο a pyspark κέλυφος.

Pearson Addison-Wesley

Όνομα SparkSession

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

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

από pyspark.sql εισαγωγή SparkSession

σπινθήρας = SparkSession.builder \

.master ("σπινθήρας: // σπινθήρας: 7077") \

.appName ("Η εφαρμογή μου Spark") \

.config ("spark.submit.deployMode", "client") \

.getOrCreate ()

numlines = spark.sparkContext.textFile ("αρχείο: /// opt / spark / license") \

.μετρώ()

εκτύπωση ("Ο συνολικός αριθμός γραμμών είναι" + str (αριθμοί))

Σχεδιασμός εφαρμογών

Μία από τις κύριες λειτουργίες του προγράμματος οδήγησης είναι ο προγραμματισμός της εφαρμογής. Το πρόγραμμα οδήγησης λαμβάνει την είσοδο επεξεργασίας της εφαρμογής και σχεδιάζει την εκτέλεση του προγράμματος. Ο οδηγός παίρνει όλα τα ζητούμενα μετασχηματισμοί(πράξεις χειρισμού δεδομένων) και Ενέργειες (αιτήσεις για έξοδο ή προτροπές για την εκτέλεση προγραμμάτων) και δημιουργεί ένα κατευθυνόμενο ακυκλικό γράφημα (DAG) κόμβων, καθένας από τους οποίους αντιπροσωπεύει ένα βήμα μετασχηματισμού ή υπολογισμού.

Κατευθυνόμενο ακυκλικό γράφημα (DAG)

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

Μια εφαρμογή Spark DAG αποτελείται από καθήκοντα και στάδια. Μια εργασία είναι η μικρότερη μονάδα προγραμματιζόμενης εργασίας σε ένα πρόγραμμα Spark. Ένα στάδιο είναι ένα σύνολο εργασιών που μπορούν να εκτελεστούν μαζί. Τα στάδια εξαρτώνται το ένα από το άλλο. με άλλα λόγια, υπάρχουν εξαρτήσεις σταδίου.

Με την έννοια του προγραμματισμού διαδικασίας, οι DAG δεν είναι μοναδικές για το Spark. Για παράδειγμα, χρησιμοποιούνται σε άλλα έργα οικοσυστήματος μεγάλων δεδομένων, όπως το Tez, το Drill και το Presto για προγραμματισμό. Τα DAG είναι θεμελιώδη για το Spark, άρα αξίζει να εξοικειωθείτε με την ιδέα.

Εφαρμογή ενορχήστρωσης

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

  • Παρακολούθηση των διαθέσιμων πόρων για την εκτέλεση εργασιών.
  • Προγραμματισμός εργασιών για εκτέλεση «κοντά» στα δεδομένα όπου είναι δυνατόν (η έννοια της τοποθεσίας δεδομένων).

Άλλες λειτουργίες

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

Το πρόγραμμα οδήγησης εξυπηρετεί επίσης την εφαρμογή UI στη θύρα 4040, όπως φαίνεται στο σχήμα 3. Αυτό το περιβάλλον εργασίας δημιουργείται αυτόματα. είναι ανεξάρτητο από τον κωδικό που υποβλήθηκε ή πώς υποβλήθηκε (δηλαδή, διαδραστική χρήση pysparkή μη αλληλεπιδραστική χρήση σπινθήρα).

Pearson Addison-Wesley

Εάν οι επόμενες εφαρμογές ξεκινούν στον ίδιο κεντρικό υπολογιστή, χρησιμοποιούνται διαδοχικές θύρες για τη διεπαφή χρήστη της εφαρμογής (για παράδειγμα, 4041, 4042 και ούτω καθεξής).

Εργαζόμενοι και εκτελεστές σπινθήρων

Οι εκτελεστές Spark είναι οι διαδικασίες στις οποίες εκτελούνται οι εργασίες του Spark DAG. Οι εκτελεστές διατηρούν πόρους CPU και μνήμης σε δευτερεύοντες κόμβους ή εργαζόμενους σε ένα σύμπλεγμα Spark. Ένας εκτελεστής είναι αφιερωμένος σε μια συγκεκριμένη εφαρμογή Spark και τερματίζεται όταν ολοκληρωθεί η εφαρμογή. Ένα πρόγραμμα Spark αποτελείται συνήθως από πολλούς εκτελεστές, που συχνά εργάζονται παράλληλα.

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

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

Το ποσό της μνήμης που έχει δεσμευτεί στο σωρό JVM για έναν εκτελεστή καθορίζεται από την ιδιότητα spark.executor.memory ή ως το - μνήμη εκτελεστή επιχείρημα προς το pyspark, σπινθήρα, ή σπινθήρα εντολές.

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

Χρησιμοποιώντας τη διεπαφή χρήστη της εφαρμογής Spark στη θύρα 404Χ του κεντρικού προγράμματος οδήγησης, μπορείτε να ελέγξετε τους εκτελεστές για την εφαρμογή, όπως φαίνεται στο Σχήμα 4.

Pearson Addison-Wesley

Για αυτόνομες αναπτύξεις συμπλέγματος Spark, ένας κόμβος εργαζόμενου εκθέτει μια διεπαφή χρήστη στη θύρα 8081, όπως φαίνεται στο Σχήμα 5.

Pearson Addison-Wesley

Ο μάστερ Spark και ο διαχειριστής συμπλέγματος

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

Ο κύριος και ο διαχειριστής συμπλέγματος είναι οι κεντρικές διαδικασίες που παρακολουθούν, διατηρούν και εκχωρούν τους κατανεμημένους πόρους συμπλέγματος (ή κοντέινερ, στην περίπτωση YARN ή Mesos) στις οποίες εκτελούνται οι εκτελεστές. Ο κύριος και ο διαχειριστής συμπλέγματος μπορούν να είναι ξεχωριστές διαδικασίες ή μπορούν να συνδυαστούν σε μία διαδικασία, όπως συμβαίνει όταν εκτελείτε το Spark σε αυτόνομη λειτουργία.

Κύριος σπινθήρα

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

Όταν εκτελείτε το Spark σε αυτόνομη λειτουργία, η βασική διαδικασία του Spark εξυπηρετεί ένα UI ιστού στη θύρα 8080 στον κεντρικό κεντρικό υπολογιστή, όπως φαίνεται στο Σχήμα 6.

Pearson Addison-Wesley

Πρόγραμμα οδήγησης Spark master έναντι Spark

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

Διευθυντής συμπλέγματος

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

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

Ένα καλό παράδειγμα της λειτουργίας διαχείρισης συμπλέγματος είναι η διαδικασία YARN ResourceManager για εφαρμογές Spark που εκτελούνται σε συστάδες Hadoop. Το ResourceManager προγραμματίζει, εκχωρεί και παρακολουθεί την υγεία των κοντέινερ που εκτελούνται στο YARN NodeManagers. Στη συνέχεια, οι εφαρμογές Spark χρησιμοποιούν αυτά τα κοντέινερ για να φιλοξενήσουν διεργασίες εκτελεστών, καθώς και την κύρια διαδικασία εάν η εφαρμογή εκτελείται σε clustermode.

Εφαρμογές Spark χρησιμοποιώντας τον αυτόνομο χρονοπρογραμματιστή

Στο Κεφάλαιο 2, "Ανάπτυξη Spark", εξήγησα τον αυτόνομο χρονοπρογραμματιστή ως επιλογή ανάπτυξης για το Spark. Εκεί, ανέπτυξα ένα πλήρως λειτουργικό αυτόνομο σύμπλεγμα πολλαπλών κωδικών Spark σε μία από τις ασκήσεις στο Κεφάλαιο 2. Όπως προαναφέρθηκε, σε ένα σύμπλεγμα Spark που εκτελείται σε αυτόνομη λειτουργία, η κύρια διαδικασία Spark εκτελεί επίσης τη λειτουργία διαχείρισης συμπλέγματος, διέποντας τους διαθέσιμους πόρους στο σύμπλεγμα και παραχώρηση τους στην κύρια διαδικασία για χρήση σε μια εφαρμογή Spark.

Εφαρμογές Spark που εκτελούνται στο YARN

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

ResourceManager ως διαχειριστής συμπλέγματος

Σε αντίθεση με τον αυτόνομο χρονοπρογραμματιστή, ο διαχειριστής συμπλέγματος σε ένα σύμπλεγμα YARN είναι το YARN ResourceManager. Το ResourceManager παρακολουθεί τη χρήση πόρων και τη διαθεσιμότητα σε όλους τους κόμβους σε ένα σύμπλεγμα. Οι πελάτες υποβάλλουν αιτήσεις Spark στο YARN ResourceManager. Το ResourceManager εκχωρεί το πρώτο κοντέινερ για την εφαρμογή, ένα ειδικό κοντέινερ που ονομάζεται ApplicationMaster.

ApplicationMaster ως Master Spark

Το ApplicationMaster είναι η κύρια διαδικασία Spark. Όπως κάνει η κύρια διαδικασία σε άλλες αναπτύξεις συμπλέγματος, το ApplicationMaster διαπραγματεύεται πόρους μεταξύ του προγράμματος οδήγησης της εφαρμογής και του διαχειριστή συμπλέγματος (ή ResourceManager σε αυτήν την περίπτωση). Στη συνέχεια καθιστά αυτούς τους πόρους (κοντέινερ) διαθέσιμα στο πρόγραμμα οδήγησης για χρήση ως εκτελεστές για την εκτέλεση εργασιών και την αποθήκευση δεδομένων για την εφαρμογή.

Το ApplicationMaster παραμένει για όλη τη διάρκεια της εφαρμογής.

Λειτουργίες ανάπτυξης για εφαρμογές Spark που εκτελούνται στο YARN

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

Λειτουργία πελάτη

Στη λειτουργία πελάτη, η διαδικασία προγράμματος οδήγησης εκτελείται στον πελάτη που υποβάλλει την αίτηση. Είναι ουσιαστικά μη διαχειριζόμενο. εάν ο κεντρικός υπολογιστής προγράμματος οδήγησης αποτύχει, η εφαρμογή αποτυγχάνει. Η λειτουργία προγράμματος-πελάτη υποστηρίζεται και για τις δύο διαδραστικές συνεδρίες κελύφους (pyspark, σπινθήρακαι ούτω καθεξής) και μη αλληλεπιδραστική υποβολή αίτησης (σπινθήρα). Ο παρακάτω κώδικας δείχνει πώς να ξεκινήσετε ένα pyspark συνεδρία χρησιμοποιώντας τη λειτουργία ανάπτυξης προγράμματος-πελάτη.

$ SPARK_HOME / bin / pyspark \

- κύριο νήμα-πελάτη \

- αριθμός εκτελεστών 1 \

- μνήμη οδηγού 512m \

- executor-memory 512m \

- εκτελεστές-πυρήνες 1

# Ή

$ SPARK_HOME / bin / pyspark \

- νήματα για μάστερ \

- πελάτης λειτουργίας ανάπτυξης

- αριθμός εκτελεστών 1 \

- μνήμη οδηγού 512m \

- executor-memory 512m \

- εκτελεστές-πυρήνες 1

Το Σχήμα 7 παρέχει μια επισκόπηση μιας εφαρμογής Spark που εκτελείται στο YARN σε λειτουργία πελάτη.

Pearson Addison-Wesley

Τα βήματα που φαίνονται στο Σχήμα 7 είναι:

  1. Ο πελάτης υποβάλλει μια εφαρμογή Spark στον διαχειριστή συμπλεγμάτων (το YARN ResourceManager). Η διαδικασία προγράμματος οδήγησης, το SparkSession και το SparkContext δημιουργούνται και εκτελούνται στον υπολογιστή-πελάτη.
  2. Το ResourceManager εκχωρεί ένα ApplicationMaster (το Spark master) για την εφαρμογή.
  3. Το ApplicationMaster ζητά κοντέινερ να χρησιμοποιηθούν για εκτελεστές από το ResourceManager. Με τα κοντέινερ που έχουν εκχωρηθεί, οι εκτελεστές γεννήθηκαν.
  4. Το πρόγραμμα οδήγησης, που βρίσκεται στον υπολογιστή-πελάτη, στη συνέχεια επικοινωνεί με τους εκτελεστές για τη διερεύνηση των εργασιών και των σταδίων του προγράμματος Spark. Το πρόγραμμα οδήγησης επιστρέφει την πρόοδο, τα αποτελέσματα και την κατάσταση στον πελάτη.

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

Λειτουργία συμπλέγματος

Σε αντίθεση με τη λειτουργία ανάπτυξης πελάτη, με μια εφαρμογή Spark που εκτελείται σε λειτουργία συμπλέγματος YARN, το ίδιο το πρόγραμμα οδήγησης εκτελείται στο σύμπλεγμα ως υποεπεξεργασία του ApplicationMaster. Αυτό παρέχει ανθεκτικότητα: Εάν η διαδικασία ApplicationMaster που φιλοξενεί το πρόγραμμα οδήγησης αποτύχει, μπορεί να επανεγκατασταθεί σε έναν άλλο κόμβο του συμπλέγματος.

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

$ SPARK_HOME / bin / σπινθήρα-υποβολή \

- μάστερ νήματα-σύμπλεγμα \

- αριθμός εκτελεστών 1 \

- μνήμη οδηγού 512m \

- executor-memory 512m \

- εκτελεστές-πυρήνες 1

$ SPARK_HOME / παραδείγματα / src / main / python / pi.py 10000

# Ή

- νήματα για μάστερ \

- σύμπλεγμα λειτουργίας ανάπτυξης \

- αριθμός εκτελεστών 1 \

- μνήμη οδηγού 512m \

- executor-memory 512m \

- εκτελεστές-πυρήνες 1

$ SPARK_HOME / παραδείγματα / src / main / python / pi.py 10000

Το Σχήμα 8 παρέχει μια επισκόπηση μιας εφαρμογής Spark που εκτελείται στο YARN σε λειτουργία συμπλέγματος.

Pearson Addison-Wesley

Τα βήματα που φαίνονται στο Σχήμα 8 είναι:

  1. Ο πελάτης, μια διαδικασία χρήστη που επικαλείται σπινθήρα, υποβάλλει μια εφαρμογή Spark στο cluster manager (το YARN ResourceManager).
  2. Το ResourceManager εκχωρεί ένα ApplicationMaster (το Spark master) για την εφαρμογή. Η διαδικασία του προγράμματος οδήγησης δημιουργείται στον ίδιο κόμβο συμπλέγματος.
  3. Το ApplicationMaster ζητά κοντέινερ για εκτελεστές από το ResourceManager. Οι εκτελεστές γεννιούνται στα κοντέινερ που έχουν εκχωρηθεί στο ApplicationMaster από το ResourceManager. Στη συνέχεια, ο οδηγός επικοινωνεί με τους εκτελεστές για τη διαχείριση των εργασιών και των σταδίων του προγράμματος Spark.
  4. Το πρόγραμμα οδήγησης, που εκτελείται σε έναν κόμβο του συμπλέγματος, επιστρέφει την πρόοδο, τα αποτελέσματα και την κατάσταση στον πελάτη.

Η διεπαφή χρήστη Ιστού εφαρμογής Spark, όπως φαίνεται προηγουμένως, είναι διαθέσιμη από τον κεντρικό υπολογιστή ApplicationMaster στο σύμπλεγμα. Ένας σύνδεσμος προς αυτήν τη διεπαφή χρήστη είναι διαθέσιμος από το περιβάλλον εργασίας χρήστη YARN ResourceManager.

Επανεξετάστηκε η τοπική λειτουργία

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

Κατά την εκτέλεση του Spark σε τοπική λειτουργία, η διεπαφή χρήστη της εφαρμογής είναι διαθέσιμη στο // localhost: 4040. Οι κύριες διεπαφές χρήστη και εργαζόμενοι δεν είναι διαθέσιμες όταν εκτελούνται σε τοπική λειτουργία.

$config[zx-auto] not found$config[zx-overlay] not found