Natívny spúšťací nástroj pre dátové inžinierstvo tkaniny

Natívny nástroj na spúšťanie je priekopníckym vylepšením pre vykonávanie úloh Apache Spark v službe Microsoft Fabric. Tento vektorovaný nástroj optimalizuje výkon a efektivitu dotazov služby Spark tak, že ich spustí priamo vo vašej infraštruktúre lakehouse. Bezproblémová integrácia nástroja znamená, že nevyžaduje žiadne úpravy kódu a vyhýba sa zablokovaniu dodávateľa. Podporuje Apache Spark API a je kompatibilný s Runtime 1.3 (Apache Spark 3.5) a Runtime 2.0 (Apache Spark 4.1) a funguje s formátmi Parquet, Delta a CSV. Bez ohľadu na umiestnenie vašich údajov v službe OneLake alebo ak pristupujete k údajom prostredníctvom odkazov, natívny nástroj na spúšťanie maximalizuje efektivitu a výkon.

Natívny nástroj na spúšťanie výrazne zvýši výkon dotazu a zároveň minimalizuje prevádzkové náklady. Skutočné výsledky sa líšia podľa charakteristiky pracovnej záťaže a konfigurácie. Nástroj je adept na správu širokej škály scenárov spracovania údajov od rutinnej príjmu údajov, dávkových úloh a ETL úloh (extrahovanie, transformácia, načítanie) až po komplexnú analýzu dátovej vedy a interaktívne dotazy. Používatelia môžu využívať zrýchlené časy spracovania, zvýšenú priepustnosť a optimalizované využitie prostriedkov.

Natívny nástroj na spúšťanie je založený na dvoch kľúčových súčastiach OSS: Velox, knižnicu zrýchlenia databázy C++, ktorú zaviedli Meta a Apache Glut (incubating), strednú vrstvu zodpovednú za vyťaženie nástrojov SQL založených na JVM na natívne motory predstavené spoločnosťou Intel.

Podporovaní operátori sú presúvaní zo Spark založeného na JVM na vektorovanú C++ vykonávaciu cestu, poskytujúcu stĺpcové, SIMD-akcelerované spracovanie s natívnou podporou pre formáty Parquet a Delta. Natívny engine zachováva kľúčové optimalizácie dotazov Fabric Spark, vrátane adaptívneho vykonávania dotazov (AQE), prepisov založených na nákladoch, orezávania stĺpcov a pushdownu predikátov, takže tieto správania optimalizátora zostávajú plne aktívne aj pri odklade operátorov. Engine tiež podporuje paralelné načítavanie Delta snapshotov a urýchľuje operácie, ktoré profitujú zo Z-usporiadania a Liquid Clustering na Delta tabuľkách, čím poskytuje ďalšie výkonové zisky pri organizovaných dátových rozloženiach.

Kedy použiť natívny nástroj na spúšťania

Natívny nástroj na spúšťanie ponúka riešenie na spúšťanie dotazov na rozsiahle množiny údajov. Optimalizuje výkon pomocou natívnych možností základných zdrojov údajov a minimalizuje režijné náklady zvyčajne spojené s pohybom údajov a serializáciou v tradičných prostrediach Spark. Nástroj podporuje rôzne operátory a typy údajov vrátane agregácie hash súhrnu, spojenia vnorenej slučky (BNLJ) a presných formátov časovej pečiatky. Ak však chcete plne využiť možnosti motora, mali by ste zvážiť jeho optimálne využitie:

  • Nástroj je efektívny pri práci s údajmi vo formátoch Parquet a Delta, ktoré dokáže spracovať natívne a efektívne.
  • Dotazy, ktoré zahŕňajú zložité transformácie a agregácie, výrazne profitujú zo stĺpcových možností spracovania a vektorizácie motora.
  • Vylepšenie výkonu je najvýraznejšie v prípadoch, kde dotazy nespúšťajú záložný mechanizmus tým, že sa vyhýbajú nepodporovaným funkciám alebo výrazom.
  • Nástroj je vhodný pre dotazy, ktoré sú výpočtovo náročné a nie jednoduché alebo I/O-bound.

Informácie o operátoroch a funkciách podporovaných natívnym spúšťaním nájdete v dokumentácii Apache Glut.

Povolenie natívneho nástroja na spúšťania

Na využitie úplných funkcií natívneho nástroja na spustenie počas fázy ukážky sú potrebné konkrétne konfigurácie. Nasledujúce postupy ukazujú, ako aktivovať túto funkciu pre poznámkové bloky, definície úloh služby Spark a celé prostredia.

Povoliť na úrovni prostredia

Ak chcete zabezpečiť jednotné vylepšenie výkonu, povoľte natívny nástroj na spúšťanie vo všetkých úlohách a poznámkových blokoch priradených k vášmu prostrediu:

  1. Prejdite do pracovného priestoru obsahujúceho vaše prostredie a vyberte prostredie. Ak nemáte vytvorené prostredie, pozrite si tému Vytvorenie, konfigurácia a používanie prostredia v službe Fabric.

  2. V časti Výpočty Spark vyberte položku Zrýchlenie.

  3. Začiarknite políčko s označením Povoliť natívny nástroj spúšťania.

  4. Uložte a publikujte zmeny.

    Snímka obrazovky znázorňujúca povolenie natívneho nástroja na spúšťanie v rámci položky prostredia.

Ak je toto nastavenie povolené na úrovni prostredia, dedia všetky nasledujúce úlohy a poznámkové bloky. Toto dedenie zabezpečí, že všetky nové relácie alebo zdroje vytvorené v prostredí budú automaticky využívať vylepšené možnosti vykonávania.

Dôležité

V minulosti bolo natívny nástroj na spúšťania povolený prostredníctvom nastavení Spark v rámci konfigurácie prostredia. Natívny nástroj na spustenie teraz možno jednoduchšie povoliť pomocou prepínača na karte Acceleration (Zrýchlenie ) v nastaveniach prostredia. Ak chcete pokračovať v jej používaní, prejdite na kartu Acceleration (Zrýchlenie ) a zapnite prepínač. Môžete ho tiež povoliť prostredníctvom vlastností Spark, ak sa uprednostňuje.

Povolenie poznámkového bloku alebo definície úlohy služby Spark

Natívny nástroj na spustenie môžete tiež povoliť pre jeden poznámkový blok alebo definíciu úlohy služby Spark, musíte zahrnúť potrebné konfigurácie na začiatku spúšťania skriptu:

%%configure 
{ 
   "conf": {
       "spark.native.enabled": "true", 
   } 
} 

V prípade poznámkových blokov vložte požadované konfiguračné príkazy do prvej bunky. V prípade definícií úloh služby Spark zahrňte konfigurácie v prvej línii definície úlohy služby Spark. Natívny nástroj na spúšťanie je integrovaný so živými bazénmi, takže po povolení funkcie sa prejaví okamžite bez toho, aby bolo potrebné iniciovať novú reláciu.

Ovládanie na úrovni dotazu

Mechanizmy na povolenie natívneho nástroja na spúšťanie na úrovni nájomníka, pracovného priestoru a prostredia bezproblémovo integrované s používateľskym rozhraním sú v aktívnom vývoji. Natívny nástroj na spúšťanie môžete zatiaľ zakázať pre konkrétne dotazy, a to najmä v prípade, ak zahŕňajú operátory, ktoré momentálne nie sú podporované (pozrite si obmedzenia). Ak chcete zakázať, nastavte spark konfiguráciu spark.native.enabled na hodnotu false pre konkrétnu bunku obsahujúcu váš dotaz.

%%sql 
SET spark.native.enabled=FALSE; 

Snímka obrazovky znázorňujúca spôsob vypnutia natívneho nástroja na spúšťanie v poznámkovom bloke.

Po vykonaní dotazu, v ktorom je zakázaný natívny nástroj na spúšťanie, ho musíte znova povoliť pre nasledujúce bunky nastavením hodnoty spark.native.enabled na hodnotu true. Tento krok je nevyhnutný, pretože služba Spark vykonáva bunky kódu postupne.

%%sql 
SET spark.native.enabled=TRUE; 

Identifikácia operácií vykonaných motorom

Existuje niekoľko metód na určenie, či bol operátor vo vašej práci v službe Apache Spark spracovaný pomocou natívneho nástroja na spustenie.

Server spark UI a Spark history

Získajte prístup k serveru Spark UI alebo Spark history a nájdite dotaz, ktorý potrebujete skontrolovať. Ak chcete pristupovať k webovému rozhraniu Sparku, prejdite do definície úlohy Spark a spustte ju. Na karte Runs (Spustí sa) vyberte ... vedľa názov aplikácie a vyberte položky Open Spark web UI. Prístup k používateľskému rozhranie služby Spark môžete získať aj z karty Monitor v pracovnom priestore. Vyberte poznámkový blok alebo kanál a na stránke monitorovania sa nachádza priame prepojenie na používateľského rozhrania služby Spark pre aktívne úlohy.

Snímka obrazovky zobrazujúca, ako prejsť na webové používateľské rozhranie služby Spark.

V pláne dotazu zobrazenom v rozhraní používateľského rozhrania služby Spark vyhľadajte názvy uzla, ktoré sa končia príponou Transformer, *NativeFileScan alebo VeloxColumnarToRowExec. Prípona označuje, že natívny nástroj na spúšťanie vykonal operáciu. Uzly môžu byť napríklad označené ako RollUpHashAggregateTransformer, ProjectExecTransformer, BroadcastHashJoinExecTransformer, ShuffledHashJoinExecTransformer alebo BroadcastNestedLoopJoinExecTransformer. Pre zdroje CSV dát sa natívne skeny môžu zobrazovať ako natívne uzly skenovania súborov alebo transformátorov v rozhraní Spark, podobne ako scan uzly Parquet a Delta.

Snímka obrazovky znázorňujúca, ako skontrolovať vizualizáciu DAG, ktorá sa končí príponou Transformer.

Vysvetlenie pre údajový rámec

Prípadne môžete vykonať príkaz v notebooku df.explain() a zobraziť plán vykonávania. V rámci výstupu vyhľadajte rovnaké transformátor, *NativeFileScan alebo prípony VeloxColumnarToRowExec. Táto metóda poskytuje rýchly spôsob, ako overiť, či natívny nástroj na spúšťania spracováva konkrétne operácie.

Snímka obrazovky znázorňujúca, ako skontrolovať fyzický plán dotazu, a zistiť, či bol dotaz spustený natívnym nástrojom na vykonanie.

Upozornenia na Fabric Spark Advisor

Fabric Spark Advisor poskytuje v reálnom čase záložný prehľad počas vykonávania buniek notebooku. Keď sa operátor alebo segment plánu vráti k JVM-založenému Sparku namiesto natívnej cesty, Advisor zobrazí upozornenie priamo vo výstupe bunky notebooku, čo vám pomôže rýchlo identifikovať nepodporovaných operátorov alebo konfigurácie bez opustenia notebooku. Tieto upozornenia môžete použiť na diagnostiku, kedy nie je aplikované natívne offloadovanie, a na rozhodnutie, či upraviť dotaz alebo konfiguráciu.

Záložný mechanizmus

V niektorých prípadoch natívny nástroj na spúšťanie nemusí byť schopný vykonať dotaz z dôvodov, ako sú napríklad nepodporované funkcie. V týchto prípadoch operácia spadne späť k tradičnému nástroju Spark. Tento automatický záložný mechanizmus zaisťuje, že k pracovnému postupu nedôjde k žiadnemu prerušeniu.

Snímka obrazovky zobrazujúca záložný mechanizmus.

Snímka obrazovky znázorňujúca spôsob kontroly denníkov priradených k záložnému mechanizmu.

Monitorovanie dotazov a údajových rámca, ktoré nástroj vykonáva

Ak chcete lepšie pochopiť použitie natívneho nástroja na spúšťanie v dotazoch SQL a operáciách údajového rámca a prejsť na detaily na úrovni fáz a operátorov, môžete si prečítať v téme Používateľské rozhranie služby Spark a Server histórie spark, kde nájdete podrobnejšie informácie o spúšťaní natívneho nástroja.

Karta Natívny nástroj na spúšťaie

Môžete prejsť na novú kartu Lepenie SQL /Údajový rámec a zobraziť si informácie o lepku a podrobnosti o spustení dotazu. Tabuľka Dotazy poskytuje prehľady o počte uzlov spustených v natívom nástroji a tých, ktoré spadajú späť do JVM pre každý dotaz.

Snímka obrazovky znázorňujúca kartu natívneho nástroja na spúšťanie.

Graf vykonávania dotazov

Môžete si tiež vybrať v popise dotazu pre vizualizáciu plánu vykonávania dotazu Apache Spark. Graf vykonávania poskytuje natívne podrobnosti o spúšťaní v jednotlivých fázach a príslušných operáciách. Farby pozadia odlišujú spúšťacie zariadenia: zelená predstavuje nástroj na natívne spustenie, zatiaľ čo svetlomodrá označuje, že operácia je spustená v predvolenom nástroji JVM.

Snímka obrazovky znázorňujúca graf vykonávania dotazov.

Obmedzenia

Hoci natívny výkonný engine (NEE) v Fabric výrazne zvyšuje výkon pre úlohy Apache Spark, momentálne má nasledujúce obmedzenia. Niekoľko položiek súvisiacich s korektnosťou, ktoré sa vzťahovali na Runtime 1.3 (Apache Spark 3.5), je vyriešených v Runtime 2.0 (Apache Spark 4.1); Každá položka uvádza čas behu, na ktorý sa vzťahuje.

Existujúce obmedzenia

  • Nekompatibilné funkcie Spark (všetky runtime): Natívny výkonný engine momentálne nepodporuje štruktúrované streamovanie. Ak používate nepodporované funkcie priamo alebo cez importované knižnice, Spark sa vráti k svojmu predvolenému enginu. Natívny výkonný engine teraz podporuje Python UDF, Scala UDF a zložité dátové typy (polia, mapy, štruktúry). Pre viac informácií pozri Python UDF, Scala UDF a zložité dátové typy v natívnom výkonnom engine.

  • Nepodporované formáty súborov (všetky runtime): Natívny výkonný engine nezrýchľuje dotazy na JSONXML a formáty. Tieto formáty sa automaticky vracajú k bežnému Spark JVM enginu na spustenie. Vektorizovaný CSV parser teraz podporuje CSV.

  • ANSI režim (len Runtime 1.3): V runtime 1.3 (Apache Spark 3.5) natívny výkonný engine nepodporuje ANSI SQL režim. Ak zapnete ANSI SQL režim, vykonávanie sa vráti k pôvodnému Spark enginu. Na Runtime 2.0 (Apache Spark 4.1) je podporovaný ANSI SQL režim: operátori sa presúvajú do natívneho enginu a ANSI chybová semantika (napríklad delenie nulou a neplatné casty) sa konzistentne vynucujú v JVM Spark.

  • Nesúlady typov dátumového filtra (všetky runtime): Aby ste využili zrýchlenie natívneho výkonného enginu, zabezpečte, aby obe strany porovnania dátumu boli zhodné v dátovom type. Napríklad namiesto porovnania stĺpca DATETIME s reťazcovým literálom ho explicitne pretypujte tak, ako je to znázornené:

    CAST(order_date AS DATE) = '2024-05-20'
    

Ďalšie dôležité informácie a obmedzenia

Poznámka

Desiatkové vysielanie, časové pásmo, duplikátny kľúč a/collect_set()collect_list()položky v tejto sekcii platia pre Runtime 1.3 (Apache Spark 3.5) a sú vyriešené v Runtime 2.0 (Apache Spark 4.1).map()round() Sú zachované pre používateľov, ktorí stále bežia na Runtime 1.3.

  • Nesúlad pri odlievaní desatinných a plávajúcich (Runtime 1.3; vyriešené v Runtime 2.0): Pri prelievaní z DECIMAL do FLOAT, Spark zachováva presnosť konverziou na reťazec a jeho analýzou. Na runtime 1.3 NEE (cez Velox) vykonáva priamy casting z internej int128_t reprezentácie, čo môže viesť k rozdielom v zaokrúhľovaní.

  • Chyby konfigurácie časových pásiem (Runtime 1.3; vyriešené v Runtime 2.0): V Runtime 1.3 nastavenie nerozpoznaného časového pásma v Sparku spôsobí zlyhanie úlohy pod NEE, zatiaľ čo Spark JVM to rieši elegantne. Príklad:

    "spark.sql.session.timeZone": "-08:00"  // May cause failure under NEE on Runtime 1.3
    
  • Nekonzistentné zaokrúhľovanie (Runtime 1.3; vyriešené v Runtime 2.0): V runtime 1.3 sa funkcia round() správa inak v NEE kvôli závislosti na std::round, ktorá nereplikuje logiku zaokrúhľovania Sparku. Tento rozdiel môže viesť k numerickým nekonzistenciám vo výsledkoch zaokrúhľovania.

  • Chýba funkcia kontroly map() duplicitného kľúča (Runtime 1.3; vyriešené v Runtime 2.0): Keď spark.sql.mapKeyDedupPolicy je nastavený na EXCEPTION, Spark vyhodí chybu na duplicitné kľúče. V runtime 1.3 NEE túto kontrolu preskočí a umožní dotazu nesprávne uspieť. Na Runtime 2.0 NEE pravidelne zvyšuje DUPLICATED_MAP_KEY hodnoty spolu s JVM Spark.
    Príklad:

    SELECT map(1, 'a', 1, 'b'); -- Should fail with duplicate keys
    
  • Variancia poradia v s collect_list() triedením (Runtime 1.3; vyriešené v Runtime 2.0): Pri použití DISTRIBUTE BY a SORT BY, Spark zachováva poradie prvkov v collect_list(). V runtime 1.3 môže NEE vracať hodnoty v inom poradí kvôli rozdielom v náhodnom zamiešaní, čo môže viesť k nesúladu očakávaní pre logiku citlivú na poradie.

  • Nesúlad medzistupňov pre collect_list() / collect_set() (Runtime 1.3; vyriešené v Runtime 2.0): V runtime 1.3 používa BINARY Spark ako medzityp pre tieto agregácie, zatiaľ čo NEE používa ARRAY. Tento nesúlad môže viesť k problémom s kompatibilitou počas plánovania alebo vykonávania dotazu.

  • Spravované privátne koncové body požadované pre prístup k úložisku (všetky runtime): Keď je povolený Native Execution Engine (NEE) a ak sa spark úlohy snažia pristupovať k úložnému účtu cez spravovaný privátny koncový bod, musíte nastaviť samostatné spravované privátne koncové body pre Blob (blob.core.windows.net) aj DFS / File System (dfs.core.windows.net) koncové body, aj keď smerujú na ten istý úložný účet. Nemôžete použiť jeden endpoint pre obe aplikácie. Toto obmedzenie môže vyžadovať dodatočnú sieťovú konfiguráciu pri povolení natívneho vykonávacieho enginu v pracovnom priestore, ktorý spravuje privátne koncové body k úložným účtom.