Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje doporučení pro plánování úloh strukturovaného streamování pomocí úloh v Azure Databricks.
Databricks doporučuje vždy provádět následující kroky:
- Odeberte nepotřebný kód z poznámkových bloků, který by vrátil výsledky, například
displayacount. - Nepoužívejte úlohy v rámci strukturovaného streamování pomocí obecných výpočetních prostředků. Vždy naplánujte streamy jako úlohy pomocí výpočetní služby úloh.
- Plánování úloh pomocí
Continuousrežimu - Nepovolujte automatické škálování pro výpočetní prostředky pro úlohy strukturovaného streamování.
Některé úlohy můžou využívat tyto výhody:
- Konfigurace úložiště stavů RocksDB v Azure Databricks
- Asynchronní vytváření kontrolních bodů stavu pro stavové dotazy
- Co je asynchronní sledování průběhu?
Služba Azure Databricks zavedla deklarativní kanály Sparku pro Lakeflow, které snižují složitost správy produkční infrastruktury pro úlohy strukturovaného streamování. Databricks doporučuje používat deklarativní kanály Sparku Lakeflow pro nové kanály strukturovaného streamování. Viz deklarativní kanály Sparku Lakeflow.
Poznámka:
Automatické škálování má omezení při zmenšování velikosti clusteru pro práce se strukturovaným streamováním. Databricks doporučuje používat deklarativní kanály Sparku Lakeflow s vylepšeným automatickým škálováním pro úlohy streamování. Viz Optimalizace využití clusteru deklarativních kanálů Sparku Lakeflow pomocí automatického škálování.
Návrh úloh streamování tak, aby očekával selhání
Databricks doporučuje vždy konfigurovat úlohy streamování tak, aby se automaticky restartovala při selhání. Některé funkce, včetně vývoje schématu, předpokládají, že úlohy strukturovaného streamování jsou nakonfigurované tak, aby se automaticky obnovily. Viz Konfigurace úloh strukturovaného streamování pro restartování dotazů streamování při selhání.
Některé operace jako foreachBatch poskytují záruky alespoň jednou namísto přesně jednou. U těchto operací byste měli zajistit, aby váš zpracovatelský řetězec byl idempotentní. Viz Použití příkazu foreachBatch k zápisu do libovolných datových jímek.
Poznámka:
Když se dotaz restartuje, zpracuje se mikrodávka naplánovaná během předchozího spuštění. Pokud vaše úloha selhala kvůli chybě nedostatku paměti nebo jste ručně zrušili úlohu kvůli nadměrné mikrodávce, možná budete muset vertikálně navýšit kapacitu výpočetních prostředků, aby bylo možné úspěšně zpracovat mikrodávku.
Pokud změníte konfigurace mezi spuštěními, tyto konfigurace se vztahují na první plánovanou dávku. Viz Obnovení po změnách v dotazu strukturovaného streamingu.
Kdy se úloha zopakuje?
V rámci úlohy Azure Databricks můžete naplánovat několik úkolů. Když konfigurujete úlohu pomocí průběžného triggeru, nemůžete nastavit závislosti mezi úkoly.
Pomocí jednoho z následujících přístupů můžete naplánovat více datových proudů v jedné úloze:
- Více úkolů: Definujte úlohu s více úlohami, které spouštějí úlohy streamování pomocí průběžného triggeru.
- Více dotazů: Definujte více streamovaných dotazů ve zdrojovém kódu pro jeden úkol.
Tyto strategie můžete také kombinovat. Následující tabulka porovnává tyto přístupy.
| Strategie: | Více úkolů | Více dotazů |
|---|---|---|
| Jak se výpočetní funkce sdílí? | Databricks doporučuje nasazení výpočetních prostředků adekvátní velikosti pro každý streamovací úkol. Volitelně můžete sdílet výpočetní prostředky napříč úkoly. | Všechny dotazy sdílejí stejný výpočetní výkon. Dotazy můžete volitelně přiřadit na fondy plánovače. |
| Jak se zpracovávají opakované pokusy? | Všechny úkoly musí selhat, než dojde k opakování úkolu. | Úloha se opakuje, pokud některý dotaz selže. |
Konfigurace úloh strukturovaného streamování pro restartování dotazů streamování při selhání
Databricks doporučuje konfigurovat všechny úlohy streamování pomocí průběžného triggeru. Viz Průběžné spouštění úloh.
Ve výchozím nastavení spojitý spouštěč poskytuje následující chování:
- Zabraňuje souběžnému spuštění úlohy více než jednou.
- Spustí nové spuštění v případě, že předchozí spuštění selže.
- Pro opakování používá exponenciální ústup.
Databricks doporučuje při plánování pracovních postupů vždy používat výpočetní prostředky úloh místo výpočetních prostředků pro všechny účely. Při selhání úlohy a opakování nasadíte nové výpočetní prostředky.
Poznámka:
Nemusíte používat streamingQuery.awaitTermination() ani spark.streams.awaitAnyTermination(). Úlohy automaticky brání dokončení běhu, když je aktivní streamovací dotaz.
Použijte plánovací fondy pro více streamovacích dotazů
Plánovací fondy můžete nakonfigurovat tak, aby při spuštění více streamovaných dotazů ze stejného zdrojového kódu přidělovaly výpočetní kapacitu dotazům.
Ve výchozím nastavení se všechny dotazy spouštějí v notebooku ve stejném vyváženém plánovacím fondu. Úlohy Apache Sparku generované spouštěči ze všech streamovacích dotazů v zápisníku běží jeden po druhém v pořadí "first in, first out" (FIFO), tedy "první dovnitř, první ven". To může způsobit zbytečné prodlevy v dotazech, protože nesdílejí prostředky clusteru efektivně.
Fondy scheduleru umožňují deklarovat, které dotazy strukturovaného streamování sdílejí výpočetní prostředky.
Následující příklad přiřadí query1 do vyhrazeného fondu, zatímco query2 a query3 sdílí fond plánovače.
# Run streaming query1 in scheduler pool1
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool1")
df.writeStream.queryName("query1").toTable("table1")
# Run streaming query2 in scheduler pool2
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool2")
df.writeStream.queryName("query2").toTable("table2")
# Run streaming query3 in scheduler pool2
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool2")
df.writeStream.queryName("query3").toTable("table3")
Poznámka:
Konfigurace místní vlastnosti musí být ve stejné buňce poznámkového bloku, ve které spustíte dotaz streamování.
Další informace najdete v dokumentaci k Apache fair scheduler.