Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den ursprungliga exekveringsmotorn är en banbrytande förbättring för Apache Spark-jobbkörningar i Microsoft Fabric. Den här vektoriserade motorn optimerar prestanda och effektivitet för dina Spark-frågor genom att köra dem direkt på lakehouse-infrastrukturen. Motorns sömlösa integrering innebär att den inte kräver några kodändringar utan att skapa beroende av leverantören. Det stöder Apache Spark-API:er och är kompatibelt med Runtime 1.3 (Apache Spark 3.5) och fungerar med både Parquet- och Delta-format. Oavsett var dina data befinner sig i OneLake, eller om du kommer åt data via genvägar, maximerar den inbyggda körningsmotorn effektivitet och prestanda.
Den infödda körningsmotorn förbättrar frågeprestandan avsevärt samtidigt som driftskostnaderna sänks. Det ger en anmärkningsvärd hastighetsförbättring och ger upp till fyra gånger snabbare prestanda jämfört med traditionell OSS (programvara med öppen källkod) Spark, vilket verifieras av TPC-DS 1 TB-benchmark. Motorn är skicklig på att hantera en mängd olika databearbetningsscenarier, allt från rutinmässig datainmatning, batchjobb och ETL-uppgifter (extrahera, transformera, läsa in) till komplexa datavetenskapsanalyser och dynamiska interaktiva frågor. Användarna drar nytta av snabbare bearbetningstider, ökat dataflöde och optimerad resursanvändning.
Den interna körningsmotorn baseras på två viktiga OSS-komponenter: Velox, ett C++-databasaccelerationsbibliotek som introducerades av Meta och Apache Gluten (inkubering), ett mellanlager som ansvarar för att avlasta JVM-baserade SQL-motorers körning till inbyggda motorer som introducerades av Intel.
När du ska använda den inbyggda körningsmotorn
Den interna körningsmotorn erbjuder en lösning för att köra frågor på storskaliga datauppsättningar. den optimerar prestanda med hjälp av de inbyggda funktionerna i underliggande datakällor och minimerar de omkostnader som vanligtvis associeras med dataflytt och serialisering i traditionella Spark-miljöer. Motorn stöder olika operatorer och datatyper, inklusive rollup-hashaggregation, broadcast nested loop join (BNLJ) och precisa tidsstämpelformat. Men för att dra full nytta av motorns funktioner bör du överväga dess optimala användningsfall:
- Motorn är effektiv när den arbetar med data i Parquet- och Delta-format, som den kan bearbeta nativt och effektivt.
- Frågor som omfattar invecklade omvandlingar och sammansättningar drar stor nytta av motorns funktioner för kolumnbearbetning och vektorisering.
- Prestandaförbättringar är mest anmärkningsvärda i scenarier där frågorna inte utlöser återställningsmekanismen genom att undvika funktioner eller uttryck som inte stöds.
- Motorn passar bra för frågor som är beräkningsintensiva snarare än enkla eller I/O-bundna.
Information om operatorer och funktioner som stöds av den interna körningsmotorn finns i Dokumentation om Apache Gluten.
Aktivera den inbyggda körningsmotorn
För att kunna använda de fullständiga funktionerna i den inbyggda körningsmotorn under förhandsversionsfasen krävs specifika konfigurationer. Följande procedurer visar hur du aktiverar den här funktionen för notebook-filer, Spark-jobbdefinitioner och hela miljöer.
Viktigt!
Den interna körningsmotorn stöder den senaste GA-körningsversionen, som är Runtime 1.3 (Apache Spark 3.5, Delta Lake 3.2). Med lanseringen av den inbyggda körningsmotorn i Runtime 1.3 upphör stödet för den tidigare versionen, Runtime 1.2 (Apache Spark 3.4, Delta Lake 2.4). Vi rekommenderar att alla kunder uppgraderar till den senaste Runtime 1.3. Om du använder den nativa körningsmotorn på Runtime 1.2 kommer den nativa accelerationen att inaktiveras.
Aktivera på miljönivå
För att säkerställa en enhetlig prestandaförbättring aktiverar du den inbyggda körningsmotorn för alla jobb och notebook-filer som är associerade med din miljö:
Navigera till arbetsytan som innehåller din miljö och välj miljön. Om du inte har skapat någon miljö kan du se Skapa, konfigurera och använda en miljö i Fabric.
Under Spark-beräkning väljer du Acceleration.
Markera kryssrutan Aktivera inbyggd körningsmotor.
Spara och publicera ändringarna.
När den är aktiverad på miljönivå ärver alla efterföljande arbeten och anteckningsböcker inställningen. Denna ärvning säkerställer att alla nya sessioner eller resurser som skapas i miljön automatiskt drar nytta av de förbättrade exekveringsmöjligheterna.
Viktigt!
Tidigare aktiverades den inbyggda körningsmotorn via Spark-inställningar i miljökonfigurationen. Den inbyggda körningsmotorn kan nu aktiveras enklare med hjälp av en växlingsknapp på fliken Acceleration i miljöinställningarna. Om du vill fortsätta använda den går du till fliken Acceleration och aktiverar växlingsknappen. Du kan också aktivera det via Spark-egenskaper om du vill.
Aktivera för en notebook- eller Spark-jobbdefinition
Du kan också aktivera den inbyggda körningsmotorn för en enda notebook- eller Spark-jobbdefinition; du måste infoga de nödvändiga konfigurationerna i början av ditt körningsskript.
%%configure
{
"conf": {
"spark.native.enabled": "true",
}
}
För notebook-filer infogar du nödvändiga konfigurationskommandon i den första cellen. För Spark-jobbdefinitioner inkluderar du konfigurationerna i frontlinjen för din Spark-jobbdefinition. Den interna körningsmotorn är integrerad med livepooler, så när du har aktiverat funktionen träder den i kraft omedelbart utan att du behöver starta en ny session.
Kontroll på frågenivå
Mekanismerna för att aktivera den interna körningsmotorn på klient-, arbetsytans och miljöns nivåer, sömlöst integrerade med användargränssnittet, är under aktiv utveckling. Under tiden kan du inaktivera den interna körningsmotorn för specifika frågor, särskilt om de omfattar operatorer som för närvarande inte stöds (se begränsningar). Om du vill inaktivera anger du Spark-konfigurationen spark.native.enabled till false för den specifika cell som innehåller din fråga.
%%sql
SET spark.native.enabled=FALSE;
När du har kört frågan där den nativa körmotorn är inaktiverad måste du återaktivera den för efterföljande celler genom att ange spark.native.enabled till true. Det här steget är nödvändigt eftersom Spark kör kodceller sekventiellt.
%%sql
SET spark.native.enabled=TRUE;
Identifiera åtgärder som körs av motorn
Det finns flera metoder för att avgöra om en operator i ditt Apache Spark-job kördes med den inbyggda exekveringsmotorn.
Spark-användargränssnitt och Spark-historikserver
Gå till Spark-användargränssnittet eller Spark-historikservern för att hitta den fråga som du behöver inspektera. Om du vill komma åt Spark-webbgränssnittet går du till Spark-jobbdefinitionen och kör det. På fliken Kör väljer du ... bredvid Programnamn och väljer Öppna Spark-webbgränssnittet. Du kan också komma åt Spark-användargränssnittet från fliken Övervaka på arbetsytan. Välj anteckningsboken eller pipelinen, på övervakningssidan finns det en direktlänk till Spark-användargränssnittet för aktiva jobb.
I frågeplanen som visas i Gränssnittet för Spark letar du efter eventuella nodnamn som slutar med suffixet Transformer, *NativeFileScan eller VeloxColumnarToRowExec. Suffixet anger att den inbyggda körningsmotorn utförde operationen. Noder kan till exempel märkas som RollUpHashAggregateTransformer, ProjectExecTransformer, BroadcastHashJoinExecTransformer, ShuffledHashJoinExecTransformer eller BroadcastNestedLoopJoinExecTransformer.
DataFrame-förklaring
Alternativt kan du köra df.explain()-kommandot i din anteckningsbok för att visa körningsplanen. Leta efter samma Transformer, *NativeFileScan eller VeloxColumnarToRowExec suffixer i utdata. Den här metoden ger ett snabbt sätt att bekräfta om specifika åtgärder hanteras av den inbyggda exekveringsmotorn.
Reservmekanism
I vissa fall kanske den inbyggda körningsmotorn inte kan köra en fråga på grund av att vissa funktioner inte stöds. I dessa fall återgår åtgärden till den traditionella Spark-motorn. Den här automatiska återställningsmekanismen säkerställer att arbetsflödet inte avbryts.
Övervaka frågor och dataramar som körs av motorn
För att bättre förstå hur körningsmotorn för lokal körning tillämpas på SQL-frågor och DataFrame-åtgärder, och för att utforska steg- och operatornivåerna djupare, kan du hänvisa till mer detaljerad information om körning av den lokala motorn i Spark-användargränssnittet och Spark History Server.
Fliken Infödd körningsmotor
Du kan gå till den nya fliken Gluten SQL/DataFrame för att visa information om Gluten-kompilering och frågekörning. Tabellen Frågor ger insikter om antalet noder som körs på den inbyggda motorn och de som faller tillbaka till JVM för varje fråga.
Diagram över frågeexekvering
Du kan också välja på frågebeskrivningen för visualiseringen av Apache Spark-frågeutförandeplanen. Exekveringsgrafen innehåller inhemska exekveringsdetaljer över faser och deras respektive operationer. Bakgrundsfärger skiljer körningsmotorerna åt: grönt representerar den interna körningsmotorn, medan ljusblå anger att åtgärden körs på JVM-standardmotorn.
Begränsningar
Även om den interna körningsmotorn (NEE) i Microsoft Fabric avsevärt ökar prestandan för Apache Spark-jobb, har den för närvarande följande begränsningar:
Befintliga begränsningar
Inkompatibla Spark-funktioner: Den native motorn stöder för närvarande inte användardefinierade funktioner (UDF),
array_contains-funktionen eller strukturerad strömning. Om dessa funktioner eller funktioner som inte stöds används antingen direkt eller via importerade bibliotek återgår Spark till standardmotorn.Filformat som inte stöds: Frågor mot
JSON,XML, ochCSVformat accelereras inte av den inbyggda körmotorn. Som standard återgår dessa till den vanliga Spark JVM-motorn för körning.ANSI-läge stöds inte: Den interna körningsmotorn stöder inte ANSI SQL-läge. Om det är aktiverat återgår körningen till standard Spark-motorn.
Typfel i datumfilter: För att dra nytta av den inbyggda exekveringsmotorens acceleration, se till att båda sidor av en datumjämförelse har samma datatyp. I stället för att till exempel jämföra kolumnen
DATETIMEmed en strängliteral, konverterar du den explicit enligt följande:CAST(order_date AS DATE) = '2024-05-20'
Andra överväganden och begränsningar
Skillnad vid typomvandling från Decimal till Flyttal: Vid omvandling från
DECIMALtillFLOATbevarar Spark precisionen genom att konvertera till en sträng och analysera den. NEE (via Velox) utför en direkt gjutning från den internaint128_trepresentationen, vilket kan resultera i avrundningsavvikelser.Tidszonskonfigurationsfel : Om du anger en okänd tidszon i Spark misslyckas jobbet under NEE, medan Spark JVM hanterar det korrekt. Till exempel:
"spark.sql.session.timeZone": "-08:00" // May cause failure under NEEInkonsekvent avrundningsbeteende: Funktionen
round()fungerar annorlunda i NEE påstd::roundgrund av beroendet av , som inte replikerar Sparks avrundningslogik. Detta kan leda till numeriska inkonsekvenser i avrundningsresultat.Saknad kontroll av duplicerade nycklar i
map()-funktionen: Närspark.sql.mapKeyDedupPolicyär inställt på UNDANTAG kastar Spark ett fel för dubblettnycklar. NEE hoppar för närvarande över den här kontrollen och tillåter att sökfrågan lyckas på ett felaktigt sätt.
Exempel:SELECT map(1, 'a', 1, 'b'); -- Should fail, but returns {1: 'b'}Orderavvikelse i
collect_list()med sortering: När du använderDISTRIBUTE BYochSORT BYbevarar Spark elementordningen icollect_list(). NEE kan returnera värden i en annan ordning på grund av blandningsskillnader, vilket kan resultera i felmatchade förväntningar på ordningskänslig logik.Matchningsfel av mellanliggande typ för
collect_list()/collect_set(): Spark använderBINARYsom mellanliggande typ för dessa aggregeringar, medan NEE använder .ARRAYDet här matchningsfelet kan leda till kompatibilitetsproblem vid frågeplanering eller körning.