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

Τι είναι το Apache Spark; Η μεγάλη πλατφόρμα δεδομένων που συντρίβει το Hadoop

Ορίστηκε το Apache Spark

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

Από τις ταπεινές αρχές του στο AMPLab στο U.C. Μπέρκλεϊ το 2009, το Apache Spark έχει γίνει ένα από τα βασικά μεγάλα διανεμημένα πλαίσια επεξεργασίας δεδομένων στον κόσμο. Το Spark μπορεί να αναπτυχθεί με διάφορους τρόπους, παρέχει εγγενείς συνδέσεις για τις γλώσσες προγραμματισμού Java, Scala, Python και R και υποστηρίζει SQL, ροή δεδομένων, μηχανική εκμάθηση και επεξεργασία γραφημάτων. Θα το βρείτε από τράπεζες, εταιρείες τηλεπικοινωνιών, εταιρείες παιχνιδιών, κυβερνήσεις και όλους τους μεγάλους τεχνολογικούς γίγαντες όπως η Apple, το Facebook, η IBM και η Microsoft.

Αρχιτεκτονική Apache Spark

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

Εκτός από το κουτί, το Spark μπορεί να εκτελεστεί σε αυτόνομη λειτουργία συμπλέγματος που απαιτεί απλώς το πλαίσιο Apache Spark και ένα JVM σε κάθε υπολογιστή του συμπλέγματος σας. Ωστόσο, είναι πιο πιθανό να θέλετε να επωφεληθείτε από ένα πιο ισχυρό σύστημα διαχείρισης πόρων ή συστάδων για να φροντίσετε να κατανείμετε εργαζομένους κατά παραγγελία. Στην επιχείρηση, αυτό συνήθως σημαίνει να τρέχει στο Hadoop YARN (έτσι οι διανομές Cloudera και Hortonworks εκτελούν εργασίες Spark), αλλά το Apache Spark μπορεί επίσης να τρέξει σε Apache Mesos, Kubernetes και Docker Swarm.

Εάν αναζητήσετε μια διαχειριζόμενη λύση, τότε το Apache Spark μπορεί να βρεθεί ως μέρος των Amazon EMR, Google Cloud Dataproc και Microsoft Azure HDInsight. Η Databricks, η εταιρεία που απασχολεί τους ιδρυτές του Apache Spark, προσφέρει επίσης το Databricks Unified Analytics Platform, το οποίο είναι μια ολοκληρωμένη διαχειριζόμενη υπηρεσία που προσφέρει συστάδες Apache Spark, υποστήριξη ροής, ολοκληρωμένη ανάπτυξη φορητών υπολογιστών βασισμένων στον ιστό και βελτιστοποιημένη απόδοση cloud I / O μια τυπική διανομή Apache Spark.

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

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

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

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

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

Spark Core

Σε σύγκριση με το MapReduce και άλλα στοιχεία του Apache Hadoop, το Apache Spark API είναι πολύ φιλικό προς τους προγραμματιστές, κρύβοντας μεγάλο μέρος της πολυπλοκότητας μιας κατανεμημένης μηχανής επεξεργασίας πίσω από απλές κλήσεις μεθόδου. Το κανονικό παράδειγμα αυτού είναι πώς σχεδόν 50 γραμμές κώδικα MapReduce για την καταμέτρηση λέξεων σε ένα έγγραφο μπορούν να μειωθούν σε λίγες γραμμές του Apache Spark (εδώ φαίνεται στο Scala):

val textFile = sparkSession.sparkContext.textFile ("hdfs: /// tmp / λέξεις")

val counts = textFile.flatMap (line => line.split (""))

.map (λέξη => (λέξη, 1))

.reduceByKey (_ + _)

counts.saveAsTextFile ("hdfs: /// tmp / words_agg")

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

Spark RDD

Στην καρδιά του Apache Spark βρίσκεται η έννοια του Resilient Distributed Dataset (RDD), μια αφαίρεση προγραμματισμού που αντιπροσωπεύει μια αμετάβλητη συλλογή αντικειμένων που μπορούν να χωριστούν σε ένα σύμπλεγμα υπολογιστών. Οι λειτουργίες στα RDD μπορούν επίσης να χωριστούν σε όλο το σύμπλεγμα και να εκτελεστούν σε μια διαδικασία παράλληλης παρτίδας, οδηγώντας σε γρήγορη και επεκτάσιμη παράλληλη επεξεργασία.

Τα RDD μπορούν να δημιουργηθούν από απλά αρχεία κειμένου, βάσεις δεδομένων SQL, καταστήματα NoSQL (όπως Cassandra και MongoDB), κάδους Amazon S3 και πολλά άλλα. Μεγάλο μέρος του Spark Core API βασίζεται σε αυτήν την έννοια RDD, επιτρέποντας τον παραδοσιακό χάρτη και μειώνει τη λειτουργικότητα, αλλά παρέχει επίσης ενσωματωμένη υποστήριξη για τη σύνδεση συνόλων δεδομένων, φιλτραρίσματος, δειγματοληψίας και συγκέντρωσης.

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

Spark SQL

Αρχικά γνωστό ως Shark, το Spark SQL έγινε όλο και πιο σημαντικό για το έργο Apache Spark. Είναι πιθανότατα η διεπαφή που χρησιμοποιείται πιο συχνά από τους σημερινούς προγραμματιστές κατά τη δημιουργία εφαρμογών. Το Spark SQL εστιάζεται στην επεξεργασία δομημένων δεδομένων, χρησιμοποιώντας μια προσέγγιση πλαισίου δεδομένων που δανείστηκε από την R και την Python (στο Pandas). Αλλά όπως υποδηλώνει το όνομα, το Spark SQL παρέχει επίσης μια διεπαφή συμβατή με το SQL2003 για την αναζήτηση δεδομένων, φέρνοντας τη δύναμη του Apache Spark σε αναλυτές και προγραμματιστές.

Παράλληλα με την τυπική υποστήριξη SQL, το Spark SQL παρέχει μια τυπική διεπαφή για ανάγνωση και εγγραφή σε άλλους σταθμούς δεδομένων, συμπεριλαμβανομένων των JSON, HDFS, Apache Hive, JDBC, Apache ORC και Apache Parquet, όλα υποστηρίζονται από το κουτί. Άλλα δημοφιλή καταστήματα - Apache Cassandra, MongoDB, Apache HBase και πολλά άλλα - μπορούν να χρησιμοποιηθούν τραβώντας ξεχωριστά βύσματα από το οικοσύστημα Spark Packages.

Η επιλογή ορισμένων στηλών από ένα πλαίσιο δεδομένων είναι τόσο απλή όσο αυτή η γραμμή:

cityDF.select ("όνομα", "ποπ")

Χρησιμοποιώντας τη διεπαφή SQL, καταγράφουμε το πλαίσιο δεδομένων ως προσωρινό πίνακα, μετά τον οποίο μπορούμε να εκδώσουμε ερωτήματα SQL εναντίον του:

cityDF.createOrReplaceTempView ("πόλεις")

spark.sql ("ΕΠΙΛΕΞΤΕ όνομα, ποπ ΑΠΟ πόλεις")

Πίσω από τα παρασκήνια, το Apache Spark χρησιμοποιεί ένα εργαλείο βελτιστοποίησης ερωτημάτων που ονομάζεται Catalyst, το οποίο εξετάζει δεδομένα και ερωτήματα προκειμένου να δημιουργήσει ένα αποτελεσματικό σχέδιο ερωτημάτων για την τοποθεσία των δεδομένων και τον υπολογισμό που θα εκτελέσει τους απαιτούμενους υπολογισμούς στο σύμπλεγμα. Στην εποχή του Apache Spark 2.x, η διασύνδεση Spark SQL των πλαισίων δεδομένων και συνόλων δεδομένων (ουσιαστικά ένα τυποποιημένο πλαίσιο δεδομένων που μπορεί να ελεγχθεί κατά τον χρόνο μεταγλώττισης για ορθότητα και να εκμεταλλευτεί περαιτέρω βελτιστοποίηση μνήμης και υπολογισμού στο χρόνο εκτέλεσης) είναι η συνιστώμενη προσέγγιση για ανάπτυξη . Η διεπαφή RDD εξακολουθεί να είναι διαθέσιμη, αλλά συνιστάται μόνο εάν οι ανάγκες σας δεν μπορούν να αντιμετωπιστούν στο πρότυπο Spark SQL.

Το Spark 2.4 παρουσίασε ένα σύνολο ενσωματωμένων λειτουργιών υψηλότερης τάξης για άμεσο χειρισμό συστοιχιών και άλλων τύπων δεδομένων υψηλότερης τάξης.

Spark MLlib

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

Λάβετε υπόψη ότι ενώ το Spark MLlib καλύπτει τη βασική μηχανική εκμάθηση, συμπεριλαμβανομένης της ταξινόμησης, της παλινδρόμησης, της ομαδοποίησης και του φιλτραρίσματος, δεν περιλαμβάνει εγκαταστάσεις για μοντελοποίηση και εκπαίδευση βαθιών νευρωνικών δικτύων (για λεπτομέρειες δείτε την κριτική Spark MLlib) Ωστόσο, το Deep Learning Piplines βρίσκεται σε εξέλιξη.

Spark GraphX

Το Spark GraphX ​​συνοδεύεται από μια επιλογή κατανεμημένων αλγορίθμων για την επεξεργασία δομών γραφημάτων, συμπεριλαμβανομένης της εφαρμογής του PageRank της Google. Αυτοί οι αλγόριθμοι χρησιμοποιούν την προσέγγιση RDD του Spark Core για τη μοντελοποίηση δεδομένων. Το πακέτο GraphFrames σάς επιτρέπει να κάνετε λειτουργίες γραφημάτων σε πλαίσια δεδομένων, συμπεριλαμβανομένης της αξιοποίησης του Catalyst optimizer για ερωτήματα γραφημάτων.

Ροή σπινθήρων

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

Το Spark Streaming επέκτεινε την έννοια Apache Spark της επεξεργασίας παρτίδας σε ροή, διασπώντας τη ροή σε μια συνεχή σειρά μικροπαραγωγών, οι οποίες στη συνέχεια θα μπορούσαν να χρησιμοποιηθούν χρησιμοποιώντας το Apache Spark API. Με αυτόν τον τρόπο, ο κώδικας σε λειτουργίες παρτίδας και ροής μπορεί να μοιράζεται (κυρίως) τον ίδιο κώδικα, τρέχοντας στο ίδιο πλαίσιο, μειώνοντας έτσι τόσο τα γενικά έξοδα προγραμματιστή όσο και χειριστή. Όλοι κερδίζουν.

Μια κριτική για την προσέγγιση Spark Streaming είναι ότι η μικροπαρακολούθηση, σε σενάρια όπου απαιτείται απόκριση χαμηλού λανθάνοντος χρόνου σε εισερχόμενα δεδομένα, ενδέχεται να μην μπορεί να ταιριάζει με την απόδοση άλλων πλαισίων με δυνατότητα ροής, όπως Apache Storm, Apache Flink και Apache Apex, όλα τα οποία χρησιμοποιούν μια καθαρή μέθοδο ροής αντί για μικρο-παρτίδες.

Δομημένη ροή

Η δομημένη ροή (προστίθεται στο Spark 2.x) είναι το Spark Streaming που ήταν το Spark SQL στα API του Spark Core: Ένα API υψηλότερου επιπέδου και ευκολότερη αφαίρεση για τη σύνταξη εφαρμογών. Στην περίπτωση της ροής δομής, το API υψηλότερου επιπέδου επιτρέπει ουσιαστικά στους προγραμματιστές να δημιουργούν άπειρα πλαίσια δεδομένων ροής και σύνολα δεδομένων. Επιλύει επίσης μερικά πολύ αληθινά σημεία πόνου με τα οποία οι χρήστες αντιμετώπισαν προβλήματα στο προηγούμενο πλαίσιο, ειδικά όσον αφορά την αντιμετώπιση συγκεντρώσεων χρόνου εκδηλώσεων και την καθυστερημένη παράδοση μηνυμάτων. Όλα τα ερωτήματα σε δομημένες ροές περνούν από το εργαλείο βελτιστοποίησης ερωτημάτων Catalyst και μπορούν ακόμη και να εκτελεστούν με διαδραστικό τρόπο, επιτρέποντας στους χρήστες να εκτελούν ερωτήματα SQL έναντι δεδομένων ζωντανής ροής.

Η δομημένη ροή βασίστηκε αρχικά στο σχέδιο μικροπαρακολούθησης της Spark Streaming για τη διαχείριση δεδομένων ροής. Όμως στο Spark 2.3, η ομάδα του Apache Spark πρόσθεσε μια λειτουργία συνεχούς επεξεργασίας χαμηλού λανθάνοντος χρόνου στη Δομημένη ροή, επιτρέποντάς της να χειριστεί αποκρίσεις με καθυστέρηση τόσο χαμηλά όσο 1ms, κάτι που είναι πολύ εντυπωσιακό. Από το Spark 2.4, η συνεχής επεξεργασία θεωρείται ακόμη πειραματική. Ενώ η Δομημένη ροή είναι ενσωματωμένη στον κινητήρα Spark SQL, η Συνεχής ροή υποστηρίζει μόνο ένα περιορισμένο σύνολο ερωτημάτων.

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

Αγωγούς βαθιάς μάθησης

Το Apache Spark υποστηρίζει τη βαθιά μάθηση μέσω του Deep Learning Piplines. Χρησιμοποιώντας την υπάρχουσα δομή αγωγών του MLlib, μπορείτε να καλέσετε σε βιβλιοθήκες βαθιάς μάθησης χαμηλότερου επιπέδου και να δημιουργήσετε ταξινομητές σε λίγες γραμμές κώδικα, καθώς και να εφαρμόσετε προσαρμοσμένα γραφήματα TensorFlow ή μοντέλα Keras στα εισερχόμενα δεδομένα. Αυτά τα γραφήματα και τα μοντέλα μπορούν ακόμη και να καταχωρηθούν ως προσαρμοσμένα Spark SQL UDFs (λειτουργίες καθορισμένες από το χρήστη), έτσι ώστε τα μοντέλα βαθιάς μάθησης να μπορούν να εφαρμοστούν σε δεδομένα ως μέρος των δηλώσεων SQL.

Μαθήματα Apache Spark

Είστε έτοιμοι να βουτήξετε και να μάθετε το Apache Spark; Συνιστούμε ανεπιφύλακτα τον οδηγό του Evan Heitman A Neanderthal για το Apache Spark στην Python, ο οποίος όχι μόνο περιγράφει τα βασικά στοιχεία για το πώς λειτουργεί το Apache Spark με σχετικά απλούς όρους, αλλά επίσης σας καθοδηγεί στη διαδικασία σύνταξης μιας απλής εφαρμογής Python που χρησιμοποιεί το πλαίσιο . Το άρθρο γράφεται από την οπτική γωνία ενός επιστήμονα δεδομένων, το οποίο έχει νόημα καθώς η επιστήμη δεδομένων είναι ένας κόσμος στον οποίο τα μεγάλα δεδομένα και η μηχανική μάθηση γίνονται όλο και πιο κρίσιμα.

Αν ψάχνετε για μερικά παραδείγματα Apache Spark για να σας δώσουμε μια αίσθηση για το τι μπορεί να κάνει η πλατφόρμα και πώς την κάνει, ρίξτε μια ματιά στο Spark By {Παραδείγματα}. Υπάρχουν πολλά δείγματα κώδικα εδώ για μια σειρά από βασικές εργασίες που αποτελούν τα δομικά στοιχεία του προγραμματισμού Spark, ώστε να μπορείτε να δείτε τα στοιχεία που συνθέτουν τις μεγαλύτερες εργασίες για τις οποίες έχει δημιουργηθεί το Apache Spark.

Θέλετε να πάτε βαθύτερα; Το DZone έχει αυτό που αναφέρεται με μετριοπαθές ως η Πλήρης Συλλογή Apache Spark, η οποία αποτελείται από πολλά χρήσιμα σεμινάρια για πολλά θέματα Apache Spark. Καλή μάθηση!