Sdílet prostřednictvím


Důležité informace o provozu pro strukturované streamování

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 display a count.
  • Nespousílejte úlohy strukturovaného streamování pomocí výpočetních prostředků pro všechny účely. Vždy naplánujte streamy jako úlohy pomocí výpočetních úloh.
  • Plánování úloh pomocí Continuous rež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:

Služba Azure Databricks zavedla rozdílové živé tabulky, aby se snížila složitost správy produkční infrastruktury pro úlohy strukturovaného streamování. Databricks doporučuje používat dynamické tabulky Delta pro nové kanály strukturovaného streamování. Podívejte se, co jsou dynamické tabulky Delta?

Poznámka:

Automatické škálování výpočetních prostředků má omezení vertikálního snížení kapacity clusteru pro úlohy strukturovaného streamování. Databricks doporučuje pro úlohy streamování používat kanály Delta Live Table s rozšířeným automatickým škálováním. Viz Optimalizace využití clusteru kanálů Delta Live Tables s vylepšeným automatickým škálováním.

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 opakovat automaticky. Viz Konfigurace úloh strukturovaného streamování pro restartování dotazů streamování při selhání.

Některé operace jako foreachBatch alespoň jednou poskytují záruky alespoň jednou. U těchto operací byste měli nastavit, aby váš kanál zpracování byl idempotentní. Viz Použití příkazu foreachBatch k zápisu do libovolných datových jímek.

Poznámka:

Když se dotaz restartuje, mikrodávka se plánuje během předchozích procesů 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 streamování.

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.

Více úkolů Více dotazů
Jak se výpočetní funkce sdílí? Databricks doporučuje nasadit úlohy, které mají správnou velikost pro každou úlohu streamování. Volitelně můžete sdílet výpočetní prostředky napříč úkoly. Všechny dotazy sdílejí stejný výpočetní výkon. K fondům plánovače můžete volitelně přiřadit dotazy.
Jak se zpracovávají opakované pokusy? Všechny úkoly musí selhat před opakováním úlohy. Ú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.

Průběžná aktivační událost ve výchozím nastavení poskytuje následující chování:

  • Zabraňuje více než jednomu souběžnému spuštění úlohy.
  • Spustí nové spuštění v případě, že předchozí spuštění selže.
  • Pro opakování používá exponenciální zpochybnění.

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í spuštění, když je aktivní streamovací dotaz.

Použití fondů plánovače pro více dotazů streamování

Fondy plánů můžete nakonfigurovat tak, aby při spouštění více streamovaných dotazů ze stejného zdrojového kódu přiřadily výpočetní kapacitu dotazům.

Ve výchozím nastavení se všechny dotazy spouštěly v poznámkovém bloku ve stejném spravedlivém fondu plánování. Úlohy Apache Sparku generované triggery ze všech streamovaných dotazů v poznámkovém bloku běží jeden po druhém v pořadí "first in, first out" (FIFO). 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 vyhrazený fond a query2 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ší podrobnosti najdete v dokumentaci ke spravedlivému plánovači Apache.