Εγγενής μηχανισμός εκτέλεσης για Fabric Spark
Ο εγγενής μηχανισμός εκτέλεσης είναι μια πρωτοποριακή βελτίωση για εκτελέσεις εργασιών Apache Spark στο Microsoft Fabric. Αυτός ο διανυσματικός μηχανισμός βελτιστοποιεί την απόδοση και την αποδοτικότητα των ερωτημάτων Spark εκτελώντας τα απευθείας στην υποδομή lakehouse σας. Η απρόσκοπτη ενοποίηση της μηχανής σημαίνει ότι δεν απαιτεί τροποποιήσεις κώδικα και αποτρέπει το κλείδωμα προμηθευτή. Υποστηρίζει API Apache Spark και είναι συμβατό με το Runtime 1.3 (Apache Spark 3.5) και λειτουργεί με μορφή Parquet και Delta. Ανεξάρτητα από τη θέση των δεδομένων σας στο OneLake ή εάν αποκτάτε πρόσβαση σε δεδομένα μέσω συντομεύσεων, ο εγγενής μηχανισμός εκτέλεσης μεγιστοποιεί την αποτελεσματικότητα και τις επιδόσεις.
Ο εγγενής μηχανισμός εκτέλεσης αυξάνει σημαντικά την απόδοση των ερωτημάτων, ελαχιστοποιώντας παράλληλα το κόστος λειτουργίας. Προσφέρει μια αξιοσημείωτη βελτίωση της ταχύτητας, επιτυγχάνοντας έως και τέσσερις φορές ταχύτερη απόδοση σε σύγκριση με το παραδοσιακό OSS (λογισμικό ανοιχτού κώδικα) Spark, όπως επικυρώνεται από τον δείκτη αναφοράς TPC-DS 1TB. Η μηχανή είναι έμπειρη στη διαχείριση μιας μεγάλης γκάμας σεναρίων επεξεργασίας δεδομένων, που κυμαίνονται από συνήθεις προσλήψεις δεδομένων, εργασίες δέσμης και εργασίες ETL (εξαγωγή, μετασχηματισμός, φόρτωση), έως σύνθετες αναλύσεις επιστήμης δεδομένων και δυναμικά αλληλεπιδραστικά ερωτήματα. Οι χρήστες επωφελούνται από τους επιταχυνόμενους χρόνους επεξεργασίας, την αυξημένη ταχύτητα μετάδοσης και τη βελτιστοποιημένη χρήση πόρων.
Ο εγγενής μηχανισμός εκτέλεσης βασίζεται σε δύο βασικά στοιχεία του OSS: το Velox, μια βιβλιοθήκη επιτάχυνσης βάσης δεδομένων C++ που παρουσιάστηκε από τη Meta και το Apache Meta (incubating), ένα μεσαίο επίπεδο που ευθύνεται για τη μείωση της φόρτωσης της εκτέλεσης κινητήρων SQL που βασίζονται σε JVM σε εγγενείς κινητήρες που εισήγαγε η Intel.
Σημείωμα
Ο εγγενής μηχανισμός εκτέλεσης είναι αυτήν τη στιγμή σε δημόσια προεπισκόπηση. Για περισσότερες πληροφορίες, ανατρέξτε στους τρέχοντες περιορισμούς. Σας προτείνουμε να ενεργοποιήσετε τον εγγενή μηχανισμό εκτέλεσης στους φόρτους εργασίας σας χωρίς επιπλέον κόστος. Θα επωφεληθείτε από ταχύτερη εκτέλεση εργασίας χωρίς να πληρώσετε περισσότερα - στην πραγματικότητα, πληρώνετε λιγότερα για την ίδια εργασία.
Πότε να χρησιμοποιείτε τον εγγενή μηχανισμό εκτέλεσης
Ο εγγενής μηχανισμός εκτέλεσης προσφέρει μια λύση για την εκτέλεση ερωτημάτων σε σύνολα δεδομένων μεγάλης κλίμακας. Βελτιστοποιεί την απόδοση χρησιμοποιώντας τις εγγενείς δυνατότητες των υποκείμενων προελεύσεων δεδομένων και ελαχιστοποιώντας την επιβάρυνση που συνήθως σχετίζεται με τη μετακίνηση δεδομένων και τη σειριοποίηση σε παραδοσιακά περιβάλλοντα Spark. Ο μηχανισμός υποστηρίζει διάφορους τελεστές και τύπους δεδομένων, συμπεριλαμβανομένων των συγκεντρωτικών αποτελεσμάτων συνάθροισης, της ένθετης ένωσης ένθετων βρόχων μετάδοσης (BNLJ) και επακριβών μορφών χρονικής σήμανσης. Ωστόσο, για να επωφεληθείτε πλήρως από τις δυνατότητες της μηχανής, θα πρέπει να εξετάσετε τις βέλτιστες περιπτώσεις χρήσης:
- Η μηχανή είναι αποτελεσματική όταν εργάζεται με δεδομένα σε μορφές Parquet και Delta, τις οποίες μπορεί να επεξεργαστεί εγγενώς και αποτελεσματικά.
- Τα ερωτήματα που περιλαμβάνουν περίπλοκους μετασχηματισμούς και συναθροίσεις επωφελούνται σημαντικά από τις δυνατότητες επεξεργασίας στηλών και διανυσματικής λειτουργίας του μηχανισμού.
- Η βελτίωση των επιδόσεων είναι πιο σημαντική σε σενάρια όπου τα ερωτήματα δεν ενεργοποιούν τον εναλλακτικό μηχανισμό, αποφεύγοντας μη υποστηριζόμενες δυνατότητες ή παραστάσεις.
- Ο μηχανισμός είναι κατάλληλος για ερωτήματα που κάνουν εντατική χρήση υπολογιστικών υπολογισμών, αντί για απλή σύνδεση με I/O.
Για πληροφορίες σχετικά με τους τελεστές και τις συναρτήσεις που υποστηρίζονται από τον εγγενή μηχανισμό εκτέλεσης, ανατρέξτε στην τεκμηρίωση για τη μέθοδο Apache Url.
Ενεργοποίηση του εγγενούς μηχανισμού εκτέλεσης
Για να χρησιμοποιήσετε τις πλήρεις δυνατότητες του εγγενούς μηχανισμού εκτέλεσης κατά τη φάση προεπισκόπησης, απαιτούνται συγκεκριμένες ρυθμίσεις παραμέτρων. Οι παρακάτω διαδικασίες δείχνουν πώς μπορείτε να ενεργοποιήσετε αυτήν τη δυνατότητα για σημειωματάρια, ορισμούς εργασιών Spark και ολόκληρα περιβάλλοντα.
Σημαντικό
Ο εγγενής μηχανισμός εκτέλεσης υποστηρίζει την τελευταία έκδοση χρόνου εκτέλεσης GA, η οποία είναι η έκδοση Runtime 1.3 (Apache Spark 3.5, Delta Lake 3.2). Με την έκδοση του εγγενούς μηχανισμού εκτέλεσης στο Runtime 1.3, η υποστήριξη για την προηγούμενη έκδοση — Runtime 1.2 (Apache Spark 3.4, Delta Lake 2.4)— έχει καταργηθεί. Ενθαρρύνουμε όλους τους πελάτες να κάνουν αναβάθμιση στον τελευταίο χρόνο εκτέλεσης 1.3. Σημειώστε ότι εάν χρησιμοποιείτε τον εγγενή μηχανισμό εκτέλεσης στο χρόνο εκτέλεσης 1.2, η εγγενής επιτάχυνση θα απενεργοποιηθεί σύντομα.
Ενεργοποίηση σε επίπεδο περιβάλλοντος
Για να εξασφαλίσετε ομοιόμορφη βελτίωση των επιδόσεων, ενεργοποιήστε τον εγγενή μηχανισμό εκτέλεσης σε όλες τις εργασίες και σημειωματάρια που σχετίζονται με το περιβάλλον σας:
Μεταβείτε στις ρυθμίσεις του περιβάλλοντός σας.
Μεταβείτε στο Spark Compute.
Μεταβείτε στην Καρτέλα Επιτάχυνση .
Επιλέξτε το πλαίσιο με την ετικέτα Ενεργοποίηση εγγενούς μηχανισμού εκτέλεσης.
Αποθηκεύστε και δημοσιεύστε τις αλλαγές.
Όταν ενεργοποιηθεί στο επίπεδο περιβάλλοντος, όλες οι επόμενες εργασίες και σημειωματάρια μεταβιβάζονται στη ρύθμιση. Αυτή η μεταβίβαση εξασφαλίζει ότι οποιεσδήποτε νέες περίοδοι λειτουργίας ή πόροι που δημιουργούνται στο περιβάλλον επωφελούνται αυτόματα από τις βελτιωμένες δυνατότητες εκτέλεσης.
Σημαντικό
Στο παρελθόν, ο εγγενής μηχανισμός εκτέλεσης ενεργοποιήθηκε μέσω των ρυθμίσεων Spark εντός της ρύθμισης παραμέτρων του περιβάλλοντος. Με την πιο πρόσφατη ενημέρωση (η παράδοση είναι σε εξέλιξη), το απλοποιήσαμε, παρουσιάζοντας ένα κουμπί εναλλαγής στην καρτέλα Επιτάχυνση των ρυθμίσεων περιβάλλοντος. Ενεργοποιήστε ξανά τον εγγενή μηχανισμό εκτέλεσης χρησιμοποιώντας το νέο κουμπί εναλλαγής - για να συνεχίσετε να χρησιμοποιείτε τον εγγενή μηχανισμό εκτέλεσης, μεταβείτε στην καρτέλα Επιτάχυνση στις ρυθμίσεις περιβάλλοντος και ενεργοποιήστε τον μέσω του κουμπιού εναλλαγής. Η νέα ρύθμιση εναλλαγής στο περιβάλλον εργασίας χρήστη έχει πλέον προτεραιότητα σε σχέση με οποιεσδήποτε προηγούμενες ρυθμίσεις παραμέτρων ιδιοτήτων Spark. Εάν είχατε ενεργοποιήσει προηγουμένως τον εγγενή μηχανισμό εκτέλεσης μέσω των ρυθμίσεων Spark, θα απενεργοποιηθεί μέχρι να ενεργοποιηθεί ξανά μέσω του διακόπτη εναλλαγής περιβάλλοντος εργασίας χρήστη.
Σε ευθυγράμμιση με την πολιτική παγώματος ανάπτυξης Azure της Microsoft κατά τις διακοπές των Ευχαριστιών και της Μαύρης Παρασκευής, έχουμε επαναπρογραμματίσει την παράδοση για την περιοχή των Βορειο κεντρικών Η.Π.Α. (NCUS) στις 6 Δεκεμβρίου και την περιοχή των Ανατολικών Η.Π.Α. έως τις 9 Δεκεμβρίου. Εκτιμούμε την κατανόηση και την υπομονή σας κατά τη διάρκεια αυτής της πολυάσχολης περιόδου.
Ενεργοποίηση για ορισμό εργασίας σημειωματάριου ή Spark
Για να ενεργοποιήσετε τον εγγενή μηχανισμό εκτέλεσης για ένα μόνο σημειωματάριο ή ορισμό εργασίας Spark, πρέπει να ενσωματώσετε τις απαραίτητες ρυθμίσεις παραμέτρων στην αρχή της δέσμης ενεργειών εκτέλεσης:
%%configure
{
"conf": {
"spark.native.enabled": "true",
}
}
Για σημειωματάρια, εισαγάγετε τις απαιτούμενες εντολές ρύθμισης παραμέτρων στο πρώτο κελί. Για ορισμούς εργασίας Spark, συμπεριλάβετε τις ρυθμίσεις στην πρώτη γραμμή του ορισμού εργασίας Spark. Ο εγγενής μηχανισμός εκτέλεσης ενσωματώνεται με χώρους συγκέντρωσης, επομένως, μόλις ενεργοποιήσετε τη δυνατότητα, τίθεται σε ισχύ αμέσως χωρίς να χρειάζεται να ξεκινήσετε μια νέα περίοδο λειτουργίας.
Σημαντικό
Η ρύθμιση παραμέτρων του εγγενούς μηχανισμού εκτέλεσης πρέπει να γίνει πριν από την έναρξη της περιόδου λειτουργίας Spark. Μετά την έναρξη της περιόδου λειτουργίας Spark, η spark.shuffle.manager
ρύθμιση γίνεται αμετάβλητη και δεν μπορεί να αλλάξει. Βεβαιωθείτε ότι αυτές οι ρυθμίσεις παραμέτρων έχουν οριστεί εντός του %%configure
μπλοκ στα σημειωματάρια ή στο εργαλείο δόμησης περιόδων λειτουργίας Spark για ορισμούς εργασίας Spark.
Στοιχείο ελέγχου σε επίπεδο ερωτήματος
Οι μηχανισμοί ενεργοποίησης του εγγενούς μηχανισμού εκτέλεσης στα επίπεδα μισθωτή, χώρου εργασίας και περιβάλλοντος, απρόσκοπτα ενοποιημένοι με το περιβάλλον εργασίας χρήστη, βρίσκονται υπό ενεργή ανάπτυξη. Εν τω μεταξύ, μπορείτε να απενεργοποιήσετε τον εγγενή μηχανισμό εκτέλεσης για συγκεκριμένα ερωτήματα, ειδικά εάν περιλαμβάνουν τελεστές που δεν υποστηρίζονται αυτήν τη στιγμή (ανατρέξτε στους περιορισμούς). Για να απενεργοποιήσετε, ορίστε τη ρύθμιση παραμέτρων Spark spark.native.enabled σε false για το συγκεκριμένο κελί που περιέχει το ερώτημά σας.
%%sql
SET spark.native.enabled=FALSE;
Αφού εκτελέσετε το ερώτημα στο οποίο είναι απενεργοποιημένος ο εγγενής μηχανισμός εκτέλεσης, πρέπει να τον ενεργοποιήσετε ξανά για τα επόμενα κελιά, ορίζοντας το spark.native.enabled σε true. Αυτό το βήμα είναι απαραίτητο, επειδή το Spark εκτελεί κελιά κώδικα διαδοχικά.
%%sql
SET spark.native.enabled=TRUE;
Προσδιορισμός λειτουργιών που εκτελέστηκαν από τη μηχανή
Υπάρχουν διάφορες μέθοδοι για να προσδιορίσετε εάν έγινε επεξεργασία ενός τελεστή στην εργασία σας Apache Spark χρησιμοποιώντας τον εγγενή μηχανισμό εκτέλεσης.
Περιβάλλον εργασίας χρήστη Spark και διακομιστής ιστορικού Spark
Αποκτήστε πρόσβαση στο περιβάλλον εργασίας χρήστη Spark ή στο διακομιστή ιστορικού Spark για να εντοπίσετε το ερώτημα που πρέπει να ελέγξετε. Στο σχέδιο ερωτήματος που εμφανίζεται στη διασύνδεση, αναζητήστε ονόματα κόμβων που τελειώνουν με τον Μετασχηματιστή επιθήματος, NativeFileScan ή VeloxColumnarToRowExec. Το επίθημα υποδεικνύει ότι ο εγγενής μηχανισμός εκτέλεσης εκτέλεσε τη λειτουργία. Για παράδειγμα, οι κόμβοι μπορεί να έχουν ετικέτα ως RollUpHashAggregateTransformer, ProjectExecTransformer, BroadcastHashJoinExecTransformer, ShuffledHashJoinExecTransformer ή BroadcastNestedLoopJoinExecTransformer.
Επεξήγηση dataFrame
Εναλλακτικά, μπορείτε να εκτελέσετε την df.explain()
εντολή στο σημειωματάριό σας για να προβάλετε το σχέδιο εκτέλεσης. Στην έξοδο, αναζητήστε τα ίδια επιθήματα Transformer, NativeFileScan ή VeloxColumnarToRowExec . Αυτή η μέθοδος παρέχει έναν γρήγορο τρόπο για να επιβεβαιώσετε εάν ο χειρισμός συγκεκριμένων λειτουργιών γίνεται από τον εγγενή μηχανισμό εκτέλεσης.
Μηχανισμός επιστροφής
Σε ορισμένες περιπτώσεις, ο εγγενής μηχανισμός εκτέλεσης ενδέχεται να μην μπορεί να εκτελέσει ένα ερώτημα για λόγους όπως μη υποστηριζόμενες δυνατότητες. Σε αυτές τις περιπτώσεις, η λειτουργία πέφτει πίσω στον παραδοσιακό μηχανισμό Spark. Αυτός ο αυτόματος μηχανισμός επαναφοράς εξασφαλίζει ότι δεν υπάρχει διακοπή στη ροή εργασιών σας.
Παρακολούθηση ερωτημάτων και dataFrame που εκτελούνται από τον μηχανισμό
Για να κατανοήσετε καλύτερα τον τρόπο με τον οποίο εφαρμόζεται ο μηχανισμός εγγενούς εκτέλεσης σε ερωτήματα SQL και λειτουργίες DataFrame, καθώς και για να κάνετε λεπτομερή έρευνα στα επίπεδα σταδίου και τελεστή, μπορείτε να ανατρέξετε στο περιβάλλον εργασίας χρήστη Spark και στον Spark History Server για πιο λεπτομερείς πληροφορίες σχετικά με την εκτέλεση του εγγενούς μηχανισμού.
Καρτέλα "Εγγενής μηχανισμός εκτέλεσης"
Μπορείτε να μεταβείτε στη νέα καρτέλα 'Sql / DataFrame' Για να δείτε τις πληροφορίες δόμησης Δονήσεων και τις λεπτομέρειες εκτέλεσης ερωτημάτων. Ο πίνακας Ερωτήματα παρέχει πληροφορίες σχετικά με τον αριθμό των κόμβων που εκτελούνται στον εγγενή μηχανισμό και εκείνους που επιστρέφουν στην JVM για κάθε ερώτημα.
Γράφημα εκτέλεσης ερωτημάτων
Μπορείτε επίσης να κάνετε κλικ στην περιγραφή ερωτήματος για την απεικόνιση σχεδίου εκτέλεσης ερωτήματος Apache Spark. Το γράφημα εκτέλεσης παρέχει λεπτομέρειες εγγενούς εκτέλεσης σε στάδια και τις αντίστοιχες λειτουργίες τους. Τα χρώματα φόντου διαφοροποιούν τις μηχανές εκτέλεσης: το πράσινο αντιπροσωπεύει τον εγγενή μηχανισμό εκτέλεσης, ενώ το ανοιχτό μπλε υποδεικνύει ότι η λειτουργία εκτελείται στον προεπιλεγμένο μηχανισμό JVM.
Περιορισμοί
Ενώ ο εγγενής μηχανισμός εκτέλεσης βελτιώνει τις επιδόσεις για τις εργασίες Apache Spark, σημειώστε τους τρέχοντες περιορισμούς του.
- Ορισμένες λειτουργίες που σχετίζονται με την Delta δεν υποστηρίζονται (ωστόσο, καθώς εργαζόμαστε ενεργά σε αυτό), συμπεριλαμβανομένων των λειτουργιών συγχώνευσης, των σαρώσεων σημείου ελέγχου και των διανυσματικών διαγραφής.
- Ορισμένες δυνατότητες και παραστάσεις Spark δεν είναι συμβατές με τον εγγενή μηχανισμό εκτέλεσης, όπως οι συναρτήσεις που ορίζονται από τον χρήστη (UDF) και η συνάρτηση, καθώς και με τη
array_contains
δομημένη ροή Spark. Η χρήση αυτών των μη συμβατών λειτουργιών ή συναρτήσεων ως μέρος μιας εισαγόμενης βιβλιοθήκης θα προκαλέσει επίσης επιστροφή στον μηχανισμό Spark. - Οι σαρώσεις από λύσεις χώρου αποθήκευσης που χρησιμοποιούν ιδιωτικά τελικά σημεία δεν υποστηρίζονται (ακόμα καθώς εργαζόμαστε σε αυτό).
- Ο μηχανισμός δεν υποστηρίζει τη λειτουργία ANSI, επομένως πραγματοποιεί αναζήτηση και όταν ενεργοποιηθεί η λειτουργία ANSI, πέφτει αυτόματα πίσω στο vanilla Spark.
Όταν χρησιμοποιείτε φίλτρα ημερομηνίας σε ερωτήματα, είναι σημαντικό να εξασφαλίσετε ότι οι τύποι δεδομένων και στις δύο πλευρές της σύγκρισης συμφωνούν για την αποφυγή προβλημάτων επιδόσεων. Οι τύποι δεδομένων που δεν αντιστοίχισης ενδέχεται να μην ενισχύουν την εκτέλεση ερωτημάτων και ενδέχεται να απαιτούν ρητή χύτευση. Πάντα να βεβαιώνεστε ότι οι τύποι δεδομένων της αριστερής πλευράς (LHS) και της δεξιάς πλευράς (RHS) μιας σύγκρισης είναι πανομοιότυποι, καθώς οι τύποι που δεν συμφωνούν δεν θα ρίχνονται πάντα αυτόματα. Εάν μια ασυμφωνία τύπου είναι αναπόφευκτη, χρησιμοποιήστε ρητή μετατροπή στοιχείων για να αντιστοιχίσετε τους τύπους δεδομένων, όπως CAST(order_date AS DATE) = '2024-05-20'
. Τα ερωτήματα με τύπους δεδομένων που δεν συμφωνούν και απαιτούν χύτευση δεν θα επιταχύνονται από τον εγγενή μηχανισμό εκτέλεσης, επομένως η διασφάλιση της συνέπειας του τύπου είναι ζωτικής σημασίας για τη διατήρηση της απόδοσης. Για παράδειγμα, αντί για order_date = '2024-05-20'
το σημείο όπου order_date
το είναι DATETIME
και η συμβολοσειρά μεταβάλλεται DATE
order_date
ρητά για να DATE
εξασφαλιστεί η συνέπεια των τύπων δεδομένων και να βελτιωθούν οι επιδόσεις.