Sdílet prostřednictvím


Nativní prováděcí modul pro Fabric Spark

Nativní prováděcí modul je zásadní vylepšení pro spouštění úloh Apache Sparku v Microsoft Fabric. Tento vektorizovaný modul optimalizuje výkon a efektivitu dotazů Sparku jejich spuštěním přímo v infrastruktuře lakehouse. Bezproblémová integrace modulu znamená, že nevyžaduje žádné úpravy kódu a zabraňuje uzamčení dodavatele. Podporuje rozhraní Apache Spark API a je kompatibilní s modulem Runtime 1.3 (Apache Spark 3.5) a funguje s formáty Parquet i Delta. Bez ohledu na umístění dat v rámci OneLake nebo pokud přistupujete k datům prostřednictvím zástupců, nativní prováděcí modul maximalizuje efektivitu a výkon.

Nativní prováděcí modul výrazně zvyšuje výkon dotazů a současně minimalizuje provozní náklady. Přináší pozoruhodný vylepšení rychlosti, které dosahuje až čtyřnásobně rychlejšího výkonu v porovnání s tradičním OSS (opensourcovým softwarem) Spark, jak je ověřeno srovnávacím testem TPC-DS 1TB. Tento modul je pro správu široké škály scénářů zpracování dat, od rutinního příjmu dat, dávkových úloh a úloh ETL (extrakce, transformace, načítání) až po komplexní analýzy datových věd a responzivní interaktivní dotazy. Uživatelé využívají akcelerované doby zpracování, zvýšenou propustnost a optimalizované využití prostředků.

Nativní prováděcí modul je založen na dvou klíčových komponentách operačního systému: Velox, knihovna akcelerace databáze C++, kterou zavádí Meta a Apache Gluten (inkutující) střední vrstva zodpovědná za snižování spouštění modulů SQL založených na JVM na nativní moduly představené Společností Intel.

Poznámka:

Nativní prováděcí modul je aktuálně ve verzi Public Preview. Další informace najdete v aktuálních omezeních. Doporučujeme vám povolit nativní prováděcí modul pro úlohy bez dalších poplatků. Rychlejší provádění úloh vám přinese výhodu, aniž byste zaplatili více – efektivně platíte méně za stejnou práci.

Kdy použít nativní prováděcí modul

Nativní prováděcí modul nabízí řešení pro spouštění dotazů ve velkých datových sadách; optimalizuje výkon pomocí nativních funkcí podkladových zdrojů dat a minimalizuje režii obvykle spojenou s přesunem dat a serializací v tradičních prostředích Spark. Modul podporuje různé operátory a datové typy, včetně agregace kumulativní hodnoty hash, spojení vnořené smyčky všesměrového vysílání (BNLJ) a přesných formátů časového razítka. Pokud ale chcete plně využít výhod funkcí modulu, měli byste zvážit optimální případy použití:

  • Modul je efektivní při práci s daty ve formátech Parquet a Delta, které může nativně a efektivně zpracovávat.
  • Dotazy, které zahrnují složité transformace a agregace, výrazně využívají možnosti sloupcového zpracování a vektorizace modulu.
  • Vylepšení výkonu je nejvýraznější ve scénářích, kdy dotazy neaktivují záložní mechanismus tím, že se vyhnete nepodporovaným funkcím nebo výrazům.
  • Modul je vhodný pro dotazy, které jsou výpočetně náročné, nikoli pro jednoduché nebo vstupně-výstupní operace.

Informace o operátorech a funkcích podporovaných nativním prováděcím modulem najdete v dokumentaci k Apache Gluten.

Povolení nativního prováděcího modulu

Pokud chcete používat úplné funkce nativního prováděcího modulu ve fázi Preview, jsou nezbytné konkrétní konfigurace. Následující postupy ukazují, jak tuto funkci aktivovat pro poznámkové bloky, definice úloh Sparku a celá prostředí.

Důležité

Nativní prováděcí modul podporuje nejnovější verzi modulu runtime GA, což je Runtime 1.3 (Apache Spark 3.5, Delta Lake 3.2). S vydáním nativního prováděcího modulu v modulu runtime 1.3 byla podpora předchozí verze – Runtime 1.2 (Apache Spark 3.4, Delta Lake 2.4) ukončena. Doporučujeme všem zákazníkům upgradovat na nejnovější verzi modulu Runtime 1.3. Mějte na paměti, že pokud používáte nativní prováděcí modul v modulu runtime 1.2, nativní akcelerace bude brzy zakázána.

Povolení na úrovni prostředí

Pokud chcete zajistit jednotné zvýšení výkonu, povolte nativní prováděcí modul ve všech úlohách a poznámkových blocích přidružených k vašemu prostředí:

  1. Přejděte do nastavení prostředí.

  2. Přejděte do výpočetních prostředků Sparku.

  3. Přejděte na kartu Akcelerace .

  4. Zaškrtněte políčko Povolit nativní prováděcí modul.

  5. Uložte a publikujte změny.

    Snímek obrazovky znázorňující povolení nativního prováděcího modulu uvnitř položky prostředí

Pokud je tato možnost povolená na úrovni prostředí, zdědí nastavení všechny následné úlohy a poznámkové bloky. Tato dědičnost zajišťuje, aby všechny nové relace nebo prostředky vytvořené v prostředí automaticky využívaly vylepšené možnosti spouštění.

Důležité

Dříve se nativní spouštěcí modul povolil prostřednictvím nastavení Sparku v rámci konfigurace prostředí. S naší nejnovější aktualizací (postupné zavedení) jsme to zjednodušili tím, že jsme na kartě Zrychlení nastavení prostředí zavedli přepínací tlačítko. Znovu povolte nativní spouštěcí modul pomocí nového přepínače – pokud chcete pokračovat v používání nativního prováděcího modulu, přejděte v nastavení prostředí na kartu Akcelerace a povolte ho pomocí přepínacího tlačítka. Nové nastavení přepínače v uživatelském rozhraní teď má přednost před všemi předchozími konfiguracemi vlastností Sparku. Pokud jste dříve povolili nativní spouštěcí modul prostřednictvím nastavení Sparku, bude zakázán, dokud ho znovu neaktivujete prostřednictvím přepínače uživatelského rozhraní.

V souladu se zásadami zablokování nasazení Microsoft Azure během svátků díkůvzdání a černého pátku jsme přeplánovali zavedení oblasti USA – středosever (NCUS) do 6. prosince a oblasti USA – východ do 9. prosince. Vážíme si vašeho porozumění a trpělivosti během této zaneprázdněné doby.

Povolení pro definici poznámkového bloku nebo úlohy Sparku

Pokud chcete povolit nativní spouštěcí modul pro jednu definici úlohy poznámkového bloku nebo Sparku, musíte na začátku spouštěcího skriptu začlenit potřebné konfigurace:

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

Pro poznámkové bloky vložte požadované konfigurační příkazy do první buňky. V případě definic úloh Sparku zahrňte konfigurace do front-line definice úlohy Sparku. Nativní prováděcí modul je integrovaný s živými fondy, takže jakmile tuto funkci povolíte, projeví se okamžitě, aniž byste museli zahájit novou relaci.

Důležité

Před zahájením relace Sparku je nutné provést konfiguraci nativního prováděcího modulu. Po spuštění relace Sparku spark.shuffle.manager se nastavení změní na neměnné a nedá se změnit. Ujistěte se, že jsou tyto konfigurace nastavené v %%configure bloku v poznámkových blocích nebo v tvůrci relací Sparku pro definice úloh Sparku.

Řízení na úrovni dotazu

Mechanismy pro povolení nativního prováděcího modulu na úrovních tenanta, pracovního prostoru a prostředí, které jsou bez problémů integrované s uživatelským rozhraním, jsou ve fázi aktivního vývoje. Do té doby můžete nativní spouštěcí modul zakázat pro konkrétní dotazy, zejména pokud zahrnují operátory, které nejsou aktuálně podporované (viz omezení). Pokud chcete tuto možnost zakázat, nastavte spark.native.enabled na false pro konkrétní buňku obsahující váš dotaz.

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

Snímek obrazovky znázorňující, jak zakázat nativní prováděcí modul v poznámkovém bloku

Po spuštění dotazu, ve kterém je nativní prováděcí modul zakázaný, je nutné ho znovu povolit pro další buňky nastavením spark.native.enabled na hodnotu true. Tento krok je nezbytný, protože Spark spouští buňky kódu postupně.

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

Identifikace operací spuštěných modulem

Existuje několik metod, jak určit, jestli byl operátor v úloze Apache Spark zpracován pomocí nativního prováděcího modulu.

Uživatelské rozhraní Sparku a server historie Sparku

Přejděte k uživatelskému rozhraní Sparku nebo serveru historie Sparku a vyhledejte dotaz, který potřebujete zkontrolovat. V plánu dotazu zobrazeném v rozhraní vyhledejte názvy uzlů, které končí příponou Transformer, NativeFileScan nebo VeloxColumnarToRowExec. Přípona značí, že nativní prováděcí modul operaci spustil. Například uzly mohou být označeny jako RollUpHashAggregateTransformer, ProjectExecTransformer, BroadcastHashJoinExecTransformer, ShuffledHashJoinExecTransformer nebo BroadcastNestedLoopJoinExecTransformer.

Snímek obrazovky znázorňující, jak zkontrolovat vizualizaci DAG, která končí příponou Transformer

Vysvětlení datového rámce

Případně můžete příkaz spustit df.explain() v poznámkovém bloku a zobrazit plán provádění. Ve výstupu vyhledejte stejné přípony Transformer, NativeFileScan nebo VeloxColumnarToRowExec . Tato metoda poskytuje rychlý způsob, jak ověřit, jestli se konkrétní operace zpracovávají nativním prováděcím modulem.

Snímek obrazovky znázorňující, jak zkontrolovat fyzický plán dotazu a zjistit, že dotaz spustil nativní prováděcí modul

Náhradní mechanismus

V některých případech nemusí nativní spouštěcí modul spustit dotaz z důvodů, jako jsou nepodporované funkce. V těchto případech se operace vrátí do tradičního modulu Spark. Tento automatický záložní mechanismus zajišťuje, že pracovní postup nebude přerušen.

Snímek obrazovky znázorňující záložní mechanismus

Snímek obrazovky znázorňující, jak zkontrolovat protokoly přidružené k záložnímu mechanismu

Monitorování dotazů a datových rámců spuštěných modulem

Pokud chcete lépe pochopit, jak se nativní prováděcí modul používá na dotazy SQL a operace datového rámce, a přejít k podrobnostem úrovní fází a operátorů, můžete se podívat na uživatelské rozhraní Sparku a server historie Sparku, kde najdete podrobnější informace o spouštění nativního modulu.

Karta nativního prováděcího modulu

Na novou kartu Lepek SQL / Datový rámec můžete přejít, abyste zobrazili informace o sestavení lepku a podrobnosti o provádění dotazů. Tabulka Dotazy poskytuje přehled o počtu uzlů spuštěných v nativním modulu a o uzlech, které se vrací zpět do prostředí JVM pro každý dotaz.

Snímek obrazovky zobrazující kartu nativního prováděcího modulu

Graf spouštění dotazů

Můžete také kliknout na popis dotazu pro vizualizaci plánu provádění dotazů Apache Spark. Graf spouštění poskytuje podrobné informace o nativním spuštění napříč fázemi a jejich příslušnými operacemi. Barvy pozadí rozlišují prováděcí moduly: zelená představuje nativní prováděcí modul, zatímco světle modrá označuje, že operace běží na výchozím modulu JVM.

Snímek obrazovky zobrazující graf spouštění dotazů

Omezení

Přestože nativní prováděcí modul zvyšuje výkon úloh Apache Sparku, mějte na paměti aktuální omezení.

  • Některé operace specifické pro rozdíly nejsou podporované (zatím na nich aktivně pracujeme), včetně operací sloučení, kontrol kontrolních bodů a vektorů odstranění.
  • Některé funkce a výrazy Sparku nejsou kompatibilní s nativním prováděcím modulem, jako jsou uživatelem definované funkce (UDF) a array_contains funkce a strukturované streamování Sparku. Použití těchto nekompatibilních operací nebo funkcí v rámci importované knihovny také způsobí náhradní použití modulu Spark.
  • Kontroly z řešení úložiště, která využívají privátní koncové body, zatím nejsou podporované (protože na něm aktivně pracujeme).
  • Modul nepodporuje režim ANSI, takže hledá a jakmile je režim ANSI povolený, automaticky se vrátí do vanilla Sparku.

Při použití filtrů kalendářních dat v dotazech je důležité zajistit, aby se datové typy na obou stranách porovnání shodovaly, aby nedocházelo k problémům s výkonem. Neshodované datové typy nemusí přinést zvýšení výkonu dotazů a mohou vyžadovat explicitní přetypování. Vždy zajistěte, aby datové typy levé strany (LHS) a pravé strany (RHS) porovnání byly stejné, protože neshodované typy nebudou vždy automaticky přetypovány. Pokud je neshoda typu nepoužitelná, použijte k porovnání datových typů explicitní přetypování, například CAST(order_date AS DATE) = '2024-05-20'. Dotazy s neshodovanými datovými typy, které vyžadují přetypování, nebudou nativním prováděcím modulem akcelerovány, takže zajištění konzistence typu je zásadní pro zachování výkonu. Například místo order_date = '2024-05-20' toho, kde order_date je a řetězec je DATEDATETIME , explicitně přetypujteorder_date, aby DATE se zajistily konzistentní datové typy a zlepšil výkon.