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.2 (Spark 3.4) 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. V této fázi verze Preview nejsou spojené žádné další náklady spojené s jeho použitím.

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 aktuálně podporuje nejnovější verzi modulu runtime GA, což je Runtime 1.2 (Apache Spark 3.4, Delta Lake 2.4).

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", 
       "spark.gluten.enabled": "true", 
       "spark.shuffle.manager": "org.apache.spark.shuffle.sort.ColumnarShuffleManager" 
   } 
} 

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.

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

Nativní prováděcí modul je integrovaný s vlastními fondy, což znamená, že povolení této funkce zahájí novou relaci, což obvykle trvá až dvě minuty, než se spustí.

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.

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 vlastností Sparku.

  3. Vyplňte pole na obrazovce vlastností Sparku, jak je znázorněno na následujícím obrázku.

Vlastnost Hodnota
spark.native.enabled true
spark.lepek.enabled true
spark.shuffle.manager org.apache.spark.shuffle.sort.ColumnarShuffleManager

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í.

Ří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.gluten.enabled na hodnotu false pro konkrétní buňku obsahující váš dotaz.

%%sql 
SET spark.native.enabled=FALSE; 
SET spark.gluten.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ázán, je nutné ho znovu povolit pro další buňky nastavením spark.gluten.enabled na hodnotu true. Tento krok je nezbytný, protože Spark spouští buňky kódu postupně.

%%sql 
SET spark.native.enabled=TRUE; 
SET spark.gluten.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. 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 Transformeru . 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 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

Omezení

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

  • Modul nepodporuje dělené zápisy pro tabulky Delta. Některé operace specifické pro rozdíly nejsou podporované, 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, se nepodporují.
  • Modul nepodporuje režim ANSI, takže hledá a jakmile je režim ANSI povolený, vrátí se zpě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.

Poznámka:

Nativní prováděcí modul je aktuálně ve verzi Preview a vaše přehledy jsou pro nás důležité. Zveme vás, abyste sdíleli zpětnou vazbu a výsledky vašeho hodnocení přímo s naším produktovým týmem. Vyplňte prosím formulář pro zpětnou vazbu. Těšíme se na váš cenný vstup a snažíme se podrobněji prodiskutovat vaše závěry.