Zdieľať cez


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 rozhrania Apache Spark API a je kompatibilné s modulom Runtime 1.3 (Apache Spark 3.5) a spolupracuje s formátmi Parquet aj Delta. 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. Prináša pozoruhodné zvýšenie rýchlosti a dosahuje až štyrikrát vyšší výkon v porovnaní s tradičným OSS (open source softvérom) Spark, čo potvrdil benchmark TPC-DS 1 TB. 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.

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.

Dôležité

Natívny nástroj na spúšťanie podporuje najnovšiu verziu runtime GA, ktorá je Runtime 1.3 (Apache Spark 3.5, Delta Lake 3.2). S vydaním natívneho spúšťacieho jadra v Runtime 1.3 sa ukončila podpora predchádzajúcej verzie – Runtime 1.2 (Apache Spark 3.4, Delta Lake 2.4). Odporúčame všetkým zákazníkom inovovať na najnovší modul Runtime 1.3. Ak používate natívny spúšťací nástroj v prostredí runtime 1.2, natívne zrýchlenie bude zakázané.

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 získať prístup k webovému používateľskému rozhrania služby Spark, prejdite na definíciu úloh služby Spark a spustite ho. 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.

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.

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

Zatiaľ čo natívny nástroj na spúšťania (NEE) v službe Microsoft Fabric výrazne zvyšuje výkon pre úlohy v službe Apache Spark, v súčasnosti má nasledujúce obmedzenia:

Existujúce obmedzenia

  • Nekompatibilné funkcie Sparku: Natívny spúšťací nástroj momentálne nepodporuje funkcie definované používateľom (UDF), funkciu array_contains ani štruktúrované streamovanie. Ak sa tieto funkcie alebo nepodporované funkcie používajú buď priamo, alebo prostredníctvom importovaných knižníc, služba Spark sa vráti k predvolenému nástroju.

  • Nepodporované formáty súborov: Dotazy na JSON, XML, a CSV formáty nie sú urýchľované natívnym spúšťacím nástrojom. Tieto predvolené nastavenia sa vrátia k bežnému nástroju Spark JVM na spustenie.

  • Režim ANSI nie je podporovaný: Natívny spúšťací nástroj nepodporuje režim ANSI SQL. Ak je povolené, vykonávanie sa vráti späť na vanilkový Spark engine.

  • Nezhody typu filtra dátumu: Ak chcete využívať výhody zrýchlenia natívneho nástroja na spúšťanie, uistite sa, že obe strany porovnania dátumov sa zhodujú s typom údajov. 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

  • Desatinné miesta na float casting nesúlad: Pri odlievaní z DECIMAL do FLOAT, Spark zachováva presnosť konverziou na reťazec a analyzovať ho. Spoločnosť NEE (prostredníctvom spoločnosti Velox) vykonáva priame pretypovanie z interného int128_t vyjadrenia, čo môže mať za následok zaokrúhlenie nezrovnalostí.

  • Chyby konfigurácie časového pásma : Nastavenie nerozpoznaného časového pásma v službe Spark spôsobí, že v rámci nee zlyhá táto úloha, zatiaľ čo JVM ju spracuje. Príklad:

    "spark.sql.session.timeZone": "-08:00"  // May cause failure under NEE
    
  • Nekonzistentné správanie zaokrúhľovania: Funkcia round() sa v NEE správa odlišne z dôvodu spoliehania sa na std::round, ktorý nekopíruje logiku zaokrúhľovania Sparku. Môže to viesť k číselným nekonzistentnostiam pri zaokrúhlení výsledkov.

  • Chýbajúca kontrola duplicitných kľúčov vo map() funkcii: Keď je nastavená spark.sql.mapKeyDedupPolicy na hodnotu EXCEPTION, služba Spark vyhodí chybu pre duplicitné kľúče. NEE v súčasnosti túto kontrolu vynechá a umožňuje, aby dotaz uspel nesprávne.
    Príklad:

    SELECT map(1, 'a', 1, 'b'); -- Should fail, but returns {1: 'b'}
    
  • Odchýlka poradia so collect_list() zoradením: Pri použití DISTRIBUTE BY a SORT BYzachová Spark poradie prvkov v collect_list(). NEE môže vrátiť hodnoty v inom poradí z dôvodu rozdielov v náhodnom zamiešaní, čo môže mať za následok nezhodné očakávania pre logiku citlivú na poradie.

  • Nesúlad medzi typmi pre collect_list() / collect_set(): Spark sa pre tieto agregácie používa BINARY ako typ medzikroku, 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é súkromné koncové body potrebné pre prístup k úložisku: Keď je povolený Native Execution Engine (NEE) a ak sa spark úlohy snažia pristupovať k úložnému účtu cez spravovaný súkromný endpoint, používatelia musia konfigurovať 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. Jeden koncový bod nemôže byť použitý pre obe funkcie. Toto je aktuálne obmedzenie a môže vyžadovať dodatočnú sieťovú konfiguráciu pri povolení natívneho výkonného enginu v pracovnom priestore, ktorý má spravované súkromné koncové body k úložným účtom.