Native Ausführungsengine für Fabric Spark
Die native Ausführungsengine ist eine bahnbrechende Erweiterung für Apache Spark-Auftragsausführungen in Microsoft Fabric. Diese vektorisierte Engine optimiert die Leistung und Effizienz Ihrer Spark-Abfragen, indem sie direkt in Ihrer Lakehouse-Infrastruktur ausgeführt werden. Die nahtlose Integration der Engine bedeutet, dass keine Codeänderungen erforderlich sind und die Anbietereinsperrung vermieden wird. Es unterstützt Apache Spark-APIs und ist mit Runtime 1.2 (Spark 3.4) und Runtime 1.3 (Spark 3.5) kompatibel und funktioniert sowohl mit Demett- als auch mit Delta-Formaten. Unabhängig vom Standort Ihrer Daten in OneLake oder wenn Sie über Verknüpfungen auf Daten zugreifen, maximiert die native Ausführungsengine Effizienz und Leistung.
Die native Ausführungsengine erhöht die Abfrageleistung erheblich und minimiert gleichzeitig die Betriebskosten. Es bietet eine bemerkenswerte Geschwindigkeitsverbesserung und erreicht eine bis zu vierfach schnellere Leistung im Vergleich zu herkömmlichen OSS (Open Source Software) Spark, die durch den TPC-DS 1-TB-Benchmark validiert wird. Die Engine verfügt über die Verwaltung einer Vielzahl von Datenverarbeitungsszenarien, von Routinedatenaufnahme, Batchaufträgen und ETL-Aufgaben (Extrahieren, Transformieren, Laden) bis hin zu komplexen Datenanalysen und reaktionsfähigen interaktiven Abfragen. Benutzer profitieren von beschleunigten Verarbeitungszeiten, erhöhter Durchsatz und optimierter Ressourcenverwendung.
Das native Execution Engine basiert auf zwei wichtigen OSS-Komponenten: Velox, einer von Meta eingeführten C++-Datenbankbeschleunigungsbibliothek und Apache Gluten (Inkubating), einer mittleren Ebene, die für das Entladen der Ausführung von JVM-basierten SQL-Engines an systemeigene Engines verantwortlich ist, die von Intel eingeführt wurden.
Hinweis
Die native Ausführungsengine ist zurzeit als Public Preview verfügbar. Weitere Informationen finden Sie unter den aktuellen Einschränkungen. Wir empfehlen Ihnen, das native Ausführungsmodul für Ihre Workloads ohne zusätzliche Kosten zu aktivieren. Sie profitieren von schnellerer Auftragsausführung, ohne mehr zu bezahlen – effektiv zahlen Sie weniger für dieselbe Arbeit.
Wann die native Ausführungsengine verwendet werden soll
Die native Ausführungsengine bietet eine Lösung zum Ausführen von Abfragen auf großen Datasets; Es optimiert die Leistung, indem die nativen Funktionen zugrunde liegender Datenquellen verwendet werden, und der Mehraufwand, der normalerweise mit der Datenverschiebung und Serialisierung in herkömmlichen Spark-Umgebungen verbunden ist, minimiert wird. Die Engine unterstützt verschiedene Operatoren und Datentypen, einschließlich Rolluphashaggregat, übertragener Join geschachtelter Schleifen (BNLJ) und präzise Zeitstempelformate. Um jedoch vollständig von den Funktionen der Engine zu profitieren, sollten Sie die optimalen Anwendungsfälle berücksichtigen:
- Die Engine ist effektiv beim Arbeiten mit Daten in Parquet- und Delta-Formaten, die es nativ und effizient verarbeiten kann.
- Abfragen, die komplexe Transformationen und Aggregationen umfassen, profitieren erheblich von den Spaltenverarbeitungs- und Vektorisierungsfunktionen der Engine.
- Leistungsverbesserungen sind in Szenarien besonders wichtig, in denen die Abfragen den Fallbackmechanismus nicht auslösen, indem nicht unterstützte Features oder Ausdrücke vermieden werden.
- Die Engine eignet sich gut für Abfragen, die rechenintensiv sind, anstatt einfach oder E/A-gebunden.
Informationen zu den Operatoren und Funktionen, die von der nativen Ausführungsengine unterstützt werden, finden Sie in der Apache Gluten-Dokumentation.
Aktivieren der nativen Ausführungsengine
Um die vollständigen Funktionen der nativen Ausführungsengine während der Vorschauphase zu nutzen, sind bestimmte Konfigurationen erforderlich. Die folgenden Verfahren zeigen, wie Sie dieses Feature für Notebooks, Spark-Auftragsdefinitionen und ganze Umgebungen aktivieren.
Wichtig
Das systemeigene Ausführungsmodul unterstützt die neueste GA-Laufzeitversion, die Runtime 1.3 (Apache Spark 3.5, Delta Lake 3.2) und die ältere Version - Runtime 1.2 (Apache Spark 3.4, Delta Lake 2.4) ist.
Aktivieren auf Umgebungsebene
Um eine einheitliche Leistungsverbesserung sicherzustellen, aktivieren Sie die native Ausführungsengine für alle Aufträge und Notebooks, die Ihrer Umgebung zugeordnet sind:
Navigieren Sie zu den Umgebungseinstellungen
Wechseln Sie zu Spark compute.
Wechseln Sie zur Registerkarte " Beschleunigung ".
Aktivieren Sie das Kontrollkästchen " Systemeigenes Ausführungsmodul aktivieren".
Speichern und veröffentlichen Sie die Änderungen.
Wenn sie auf Umgebungsebene aktiviert sind, erben alle nachfolgenden Aufträge und Notebooks die Einstellung. Diese Vererbung stellt sicher, dass alle in der Umgebung erstellten neuen Sitzungen oder Ressourcen automatisch von den erweiterten Ausführungsfunktionen profitieren.
Für ein Notebook oder eine Spark-Auftragsdefinition aktivieren
Um die native Ausführungsengine für ein einzelnes Notebookz oder eine Spark-Auftragsdefinition zu aktivieren, müssen Sie die erforderlichen Konfigurationen am Anfang des Ausführungsskripts integrieren:
%%configure
{
"conf": {
"spark.native.enabled": "true",
"spark.shuffle.manager": "org.apache.spark.shuffle.sort.ColumnarShuffleManager"
}
}
Fügen Sie für Notebooks die erforderlichen Konfigurationsbefehle in die erste Zelle ein. Fügen Sie für Spark-Auftragsdefinitionen die Konfigurationen in die Frontlinie Ihrer Spark-Auftragsdefinition ein.
Das native Ausführungsmodul ist in Livepools integriert. Sobald Sie das Feature aktiviert haben, wird es sofort wirksam, ohne dass Sie eine neue Sitzung initiieren müssen.
Wichtig
Die Konfiguration der nativen Ausführungsengine muss vor der Initiierung der Spark-Sitzung erfolgen. Nachdem die Spark-Sitzung gestartet wurde, wird die spark.shuffle.manager
-Einstellung unveränderlich und kann nicht geändert werden. Stellen Sie sicher, dass diese Konfigurationen innerhalb des %%configure
-Blocks in Notebooks oder im Spark-Sitzungs-Generator für Spark-Auftragsdefinitionen festgelegt sind.
Steuerelement auf der Abfrageebene
Die Mechanismen zur Aktivierung der nativen Ausführungsengine auf Mandanten-, Arbeitsbereichs- und Umgebungsebenen, die nahtlos in die Benutzeroberfläche integriert sind, befinden sich in der aktiven Entwicklung. Du kannst in der Zwischenzeit die native Ausführungsengine für bestimmte Abfragen deaktivieren, insbesondere, wenn sie Operatoren einbeziehen, die derzeit nicht unterstützt werden (siehe Einschränkungen). Legen Sie zum Deaktivieren die Spark-Konfiguration spark.native.enabled auf false für die bestimmte Zelle fest, die Ihre Abfrage enthält.
%%sql
SET spark.native.enabled=FALSE;
Nachdem Sie die Abfrage ausgeführt haben, in der das systemeigene Ausführungsmodul deaktiviert ist, müssen Sie sie für nachfolgende Zellen erneut aktivieren, indem Sie spark.native.enabled auf "true" festlegen. Dieser Schritt ist erforderlich, da Spark Codezellen sequenziell ausführt.
%%sql
SET spark.native.enabled=TRUE;
Identifizieren von Vorgängen, die von der Engine ausgeführt werden
Es gibt mehrere Methoden, um zu ermitteln, ob ein Operator in Ihrem Apache Spark-Auftrag mithilfe der nativen Ausführungsengine verarbeitet wurde.
Spark-UI- und Spark-Verlaufsserver
Greifen Sie auf die Spark-UI oder den Spark-Verlaufsserver zu, um die Abfrage zu finden, die Sie überprüfen müssen. Suchen Sie im Abfrageplan, der innerhalb der Schnittstelle angezeigt wird, nach knotennamen, die mit dem Suffix Transformer, NativeFileScan oder VeloxColumnarToRowExec enden. Das Suffix gibt an, dass die native Ausführungsengine den Vorgang ausgeführt hat. Beispielsweise können Knoten als RollUpHashAggregateTransformer, ProjectExecTransformer, BroadcastHashJoinExecTransformer, ShuffledHashJoinExecTransformer oder BroadcastNestedLoopJoinExecTransformer bezeichnet werden.
Erläutern von DataFrame
Alternativ können Sie den df.explain()
-Befehl in Ihrem Notebook ausführen, um den Ausführungsplan anzuzeigen. Suchen Sie in der Ausgabe nach den gleichen Suffixen Transformer, NativeFileScan oder VeloxColumnarToRowExec. Diese Methode bietet eine schnelle Möglichkeit, zu überprüfen, ob bestimmte Vorgänge von der nativen Ausführungsengine behandelt werden.
Fallbackmechanismus
In einigen Fällen kann die native Ausführungsengine aufgrund von Gründen wie nicht unterstützten Features möglicherweise keine Abfrage ausführen. In diesen Fällen fällt der Vorgang auf die herkömmliche Spark-Engine zurück. Mit diesem Fallbackmechanismus wird sichergestellt, dass der Workflow nicht unterbrochen wird.
Überwachen von Abfragen und DataFrames, die vom Modul ausgeführt werden
Um besser zu verstehen, wie das Systemeigene Ausführungsmodul auf SQL-Abfragen und DataFrame-Vorgänge angewendet wird, und um einen Drilldown zu den Stufen- und Operatorebenen durchzuführen, können Sie sich auf den Spark UI- und Spark History-Server beziehen, um ausführlichere Informationen zur systemeigenen Modulausführung zu erhalten.
Registerkarte "Systemeigenes Ausführungsmodul"
Sie können zur neuen Registerkarte "Gluten SQL / DataFrame" navigieren, um die Gluten-Buildinformationen und Abfrageausführungsdetails anzuzeigen. Die Tabelle "Abfragen" bietet Einblicke in die Anzahl der Knoten, die auf dem nativen Modul ausgeführt werden, und diejenigen, die für jede Abfrage auf den JVM zurückfallen.
Abfrageausführungsdiagramm
Sie können auch auf die Abfragebeschreibung für die Visualisierung des Apache Spark-Abfrageausführungsplans klicken. Das Ausführungsdiagramm bietet systemeigene Ausführungsdetails über Phasen und deren jeweilige Vorgänge hinweg. Hintergrundfarben unterscheiden die Ausführungsmodule: Grün stellt das native Ausführungsmodul dar, während hellblau angibt, dass der Vorgang auf dem Standard-JVM-Modul ausgeführt wird.
Begrenzungen
Während die native Ausführungsengine die Leistung für Apache Spark-Aufträge verbessert, beachten Sie die aktuellen Einschränkungen.
- Die Engine unterstützt das partitionierte Schreiben für Delta-Tabellen nicht. Einige Delta-spezifische Vorgänge werden nicht unterstützt, einschließlich Zusammenführungsvorgängen, Prüfpunktüberprüfungen und Löschvektoren.
- Bestimmte Spark-Features und Ausdrücke sind nicht mit der nativen Ausführungsenginel kompatibel, z. B. benutzerdefinierte Funktionen (UDFs) und die
array_contains
Funktion sowie strukturierter Spark-Stream. Die Verwendung dieser inkompatiblen Vorgänge oder Funktionen als Teil einer importierten Bibliothek führt auch zu Fallbacks für das Spark-Modul. - Scans von Speicherlösungen, die private Endpunkte verwenden, werden nicht unterstützt.
- Die Engine unterstützt den ANSI-Modus nicht, sodass er durchsucht und sobald der ANSI-Modus aktiviert ist, fällt es auf Vanille Spark zurück.
Bei der Verwendung von Datumsfiltern in Abfragen ist es wichtig, sicherzustellen, dass die Datentypen auf beiden Seiten des Vergleichs übereinstimmen, um Leistungsprobleme zu vermeiden. Nicht übereinstimmende Datentypen bringen möglicherweise keine Herauftrieb der Abfrageausführung und erfordern möglicherweise eine explizite Umwandlung. Stellen Sie immer sicher, dass die Datentypen der linken Seite (LHS) und der rechten Seite (RHS) eines Vergleichs identisch sind, da nicht übereinstimmende Typen nicht immer automatisch umgewandelt werden. Wenn ein Typkonflikt unvermeidbar ist, verwenden Sie explizite Umwandlungen, um den Datentypen zu entsprechen, z. B. CAST(order_date AS DATE) = '2024-05-20'
. Abfragen mit nicht übereinstimmenden Datentypen, die eine Umwandlung erfordern, werden nicht von der nativen Ausführungsengine beschleunigt, sodass die Typkonsistenz für Standard nachhaltige Leistung von entscheidender Bedeutung ist. Anstatt z. B. order_date = '2024-05-20'
, wobei order_date
DATETIME
ist und die Zeichenfolge DATE
ist, wird order_date
explizit in DATE
umgewandelt, umkonsistente Datentypen sicherzustellen und die Leistung zu verbessern.
Hinweis
Die native Ausführungsengine befindet sich derzeit in der Vorschau, und Ihre Einblicke sind uns wichtig. Wir laden Sie ein, Ihr Feedback und die Ergebnisse Ihrer Bewertung direkt mit unserem Produktteam zu teilen. Füllen Sie das Antwortformular aus. Wir freuen uns auf Ihre wertvollen Beiträge und freuen uns darauf, Ihre Ergebnisse detailliert zu besprechen.