Úlohy a úkoly ve službě Azure Batch

V Azure Batch představuje úkol jednotku výpočtu. Úloha je kolekce těchto úkolů. Další informace o úlohách a úkolech a způsobu jejich použití v pracovním postupu Azure Batch najdete níže.

Úlohy

Úloha je kolekce úkolů. Řídí, jak se provádí výpočet pomocí jejích úkolů na výpočetních uzlech ve fondu.

Úloha určuje fond , ve kterém se má práce spustit. Můžete vytvořit nový fond pro každou úlohu nebo použít jeden fond pro mnoho úloh. Můžete vytvořit fond pro každou úlohu přidruženou k plánu úlohy nebo jeden fond pro všechny úlohy přidružené k plánu úlohy.

Priorita úloh

K úlohům, které vytvoříte, můžete přiřadit volitelnou prioritu úlohy. Služba Batch používá hodnotu priority úlohy k určení pořadí plánování (pro všechny úkoly v rámci úlohy) wtihin každý fond.

Pokud chcete aktualizovat prioritu úlohy, volejte aktualizovat vlastnosti operace úlohy (Batch REST) nebo upravte CloudJob.Priority (Batch .NET). Priority values range from -1000 (nejnižší priorita) to 1000 (nejvyšší priorita).

Ve stejném fondu mají úlohy s vyšší prioritou přednost plánování před úlohami s nižší prioritou. Úkoly v úlohách s nižší prioritou, které už jsou spuštěné, nebudou úkoly v úloze s vyšší prioritou předem zprovozněné. Úlohy se stejnou úrovní priority mají stejnou šanci na naplánování a pořadí provádění úkolů není definováno.

Úloha s vysokou prioritou spuštěnou v jednom fondu nemá vliv na plánování úloh spuštěných v samostatném fondu nebo v jiném účtu Batch. Priorita úlohy se nevztahuje na automatické zařazování, která se vytvoří při odeslání úlohy.

Omezení úloh

Můžete použít omezení úlohy k zadání určitých omezení pro úlohy.

  • Můžete nastavit maximální uplynulý čas, takže pokud některá úloha běží po dobu delší než určený maximální uplynulý čas, úloha a všechny její úkoly budou ukončeny.
  • Můžete zadat maximální počet opakovaných pokusů o úkol jako omezení, včetně toho, jestli je úkol vždy opakovat nebo nikdy opakovat. Opakování úkolu znamená, že pokud se úloha nezdaří, bude znovu spuštěna.

Úlohy správce úloh a automatické ukončení

Klientská aplikace si může přidat úkoly do úlohy, nebo můžete zadat úkol správce úloh. Úkol správce úloh obsahuje informace potřebné k vytvoření požadovaných úkolů pro úlohu, přičemž úkol správce úloh běží na jednom výpočetním uzlu v rámci fondu. Úloha správce úloh je zpracována speciálně službou Batch; se zařadí do fronty, jakmile se úloha vytvoří, a pokud selže, restartuje se. Úloha správce úloh je vyžadována pro úlohy vytvořené plánem úlohy, protože je to jediný způsob, jak definovat úkoly před vytvořením instance úlohy.

Ve výchozím nastavení zůstanou úlohy v aktivním stavu po dokončení všech úkolů v rámci úlohy. Toto chování můžete změnit tak, aby se úlohy automaticky ukončily po dokončení všech úkolů v úloze. Nastavte vlastnost úlohy onAllTasksComplete (OnAllTasksComplete ve službě Batch .NET) na terminatejob*, aby se úloha automaticky ukončila, když jsou všechny její úkoly v dokončeném stavu.

Služba Batch považuje úlohu bez úkolů za dokončenou. Tato možnost se proto nejčastěji používá pro úkoly správce úloh. Pokud chcete použít automatické ukončení úlohy bez správce úloh, měli byste nejprve nastavit novou úlohu na vlastnostAllTasksComplete na noactionhodnotu * terminatejob' až po dokončení přidávání úkolů do úlohy.

Naplánované úlohy

Plány úloh umožňují vytvářet opakované úlohy ve službě Batch. Plán úloh určuje, kdy spustit úlohy a obsahuje specifikace pro úlohy, které mají být spuštěny. Můžete určit dobu trvání plánu (jak dlouho a kdy je plán v platnosti) a jak často se úlohy vytvářejí během naplánovaného období.

Úkoly

Úkol je jednotka výpočtu, která je přidružena k úloze. Běží na uzlu. Úkoly jsou přiřazeny k uzlu pro provádění nebo jsou zařazeny do fronty, dokud se uzel neuvolní. Jednoduše řečeno, úkol spustí na výpočetním uzlu jeden nebo více programů nebo skriptů k provedení potřebné práce.

Při vytvoření úkolu můžete zadat:

  • Příkazový řádek pro úkol. Toto je příkazový řádek, kterým se na výpočetním uzlu spouští vaše aplikace nebo skript.

    Je důležité si uvědomit, že příkazový řádek se nespustí v prostředí. Proto nemůže nativně využívat funkce shellu, jako například rozšíření proměnné prostředí (sem patří i PATH). Pokud chcete tyto funkce využít, musíte vyvolat prostředí na příkazovém řádku, například spuštěním cmd.exe na Windows uzlech nebo /bin/sh v Linuxu:

    cmd /c MyTaskApplication.exe %MY_ENV_VAR%

    /bin/sh -c MyTaskApplication $MY_ENV_VAR

    Pokud vaše úkoly potřebují spustit aplikaci nebo skript, které nejsou v PATH uzlu nebo v referenčních proměnných prostředí, vyvolejte shell explicitně v příkazovém řádku úkolu.

  • Soubory prostředků obsahující data, která mají být zpracována. Tyto soubory se před provedením příkazového řádku úkolu automaticky zkopírují do uzlu z úložiště objektů blob v účtu Azure Storage. Další informace najdete v tématu Zahájení úkolů a souborů a adresářů.

  • Proměnné prostředí, které jsou požadovány příslušnou aplikací. Další informace najdete v tématu Nastavení prostředí pro úlohy.

  • Omezení, za kterých by měl být proveden úkol. Mezi omezení patří například: maximální doba, po kterou smí úkol běžet, maximální počet pokusů o opakování neúspěšného úkolu a maximální doba, po kterou jsou zachovány soubory v pracovním adresáři úkolu.

  • Balíčky aplikací pro nasazení do výpočetního uzlu, na kterém je naplánováno spuštění úkolu. Balíčky aplikací poskytují zjednodušené nasazení a správu verzí aplikací, které spouští vaše úlohy. Balíčky aplikací na úrovni úkolů jsou zvláště užitečné v prostředích sdíleného fondu, kde se různé úlohy spouštějí v jednom fondu a kde se fond po dokončení úlohy neodstraňuje. Pokud má vaše úloha méně úkolů, než je uzlů ve fondu, balíčky aplikací úkolů můžou omezit přenosy dat, protože se aplikace může nasadit jen na uzly, které úkoly budou skutečně provádět.

  • Odkaz na image kontejneru v Docker Hubu nebo privátním registru a další nastavení pro vytvoření kontejneru Dockeru, ve kterém se bude spouštět úloha na uzlu. Tyto údaje zadáváte pouze v případě, že je ve fondu nastavená konfigurace kontejneru.

Poznámka

Maximální životnost úkolu, od kdy je přidána do úlohy po dokončení, je 180 dnů. Dokončené úkoly se uchovávají po dobu 7 dnů; data pro úkoly, které nejsou dokončeny v rámci maximální životnosti, nejsou přístupná.

Kromě úloh, které definujete k provádění výpočtů na uzlu, poskytuje služba Batch také několik speciálních úloh:

Spouštěcí úkol

Přidružením spouštěcího úkolu k fondu můžete připravit provozní prostředí jeho uzlů. Můžete například provádět akce, jako je instalace aplikací, které vaše úkoly spouštějí, nebo spouštění procesů na pozadí. Spouštěcí úloha se spustí při každém spuštění uzlu, pokud zůstane ve fondu. To zahrnuje, když se uzel poprvé přidá do fondu a když se restartuje nebo znovu zmage.

Hlavní výhodou spouštěcího úkolu je, že obsahuje všechny informace potřebné ke konfiguraci výpočetního uzlu a instalaci aplikací nezbytných k provádění úkolu. Proto je navýšení počtu uzlů ve fondu pouze otázkou zadání nového cílového počtu uzlů. Spouštěcí úloha poskytuje informace potřebné pro službu Batch ke konfiguraci nových uzlů a jejich přípravě na přijetí úkolů.

Stejně jako u každého úkolu služby Azure Batch můžete také zadat seznam souborů prostředků ve službě Azure Storage (vedle příkazového řádku, který se má provést). Služba Batch nejprve zkopíruje soubory prostředků ze služby Azure Storage do uzlu a pak spustí příkazový řádek. U spouštěcího úkolu fondu obsahuje seznam souborů obvykle aplikaci úkolu a její závislosti.

Spouštěcí úkol ale může obsahovat také referenční data, která budou k dispozici k použití ve všech úkolech spouštěných na výpočetním uzlu. Například příkazový řádek spouštěcího úkolu může provést robocopy operaci kopírování souborů aplikace (které byly zadány jako soubory prostředků a staženy do uzlu) z pracovního adresáře spouštěcího úkolu do sdílené složky a pak spustit MSI nebo setup.exe.

Obvykle budete chtít, aby služba Batch čekala na dokončení spouštěcího úkolu, a teprve potom zvažte, jestli je uzel připravený k přiřazení úkolů. Můžete to ale podle potřeby nakonfigurovat jinak.

Pokud na výpočetním uzlu selže spouštěcí úkol, je stav tohoto uzlu aktualizován, aby odrážel selhání, a uzlu se nepřiřazují žádné úlohy. Spouštěcí úkol může selhat, jestliže se vyskytl problém s kopírováním jeho souborů prostředků z úložiště nebo pokud proces spuštěný pomocí jeho příkazového řádku vrátí nenulový ukončovací kód.

Pokud přidáváte nebo aktualizujete spouštěcí úkol pro už existující fond, musíte restartovat jeho výpočetní uzly, aby se na nich spouštěcí úkol provedl.

Poznámka

Batch omezuje celkovou velikost spouštěcího úkolu, což zahrnuje soubory prostředků i proměnné prostředí. Pokud potřebujete zmenšit velikost spouštěcího úkolu, můžete použít jednu ze dvou následujících metod:

  1. K distribuci aplikací nebo dat napříč všemi uzly ve fondu Batch můžete použít balíčky aplikací. Další informace o balíčcích aplikací najdete v tématu Nasazení aplikací do výpočetních uzlů pomocí balíčků aplikací služby Batch.

  2. Můžete ručně vytvořit komprimovaný archiv obsahující vaše soubory aplikací. Tento komprimovaný archiv potom uložte do služby Azure Storage jako objekt blob. Zadejte tento komprimovaný archiv jako soubor prostředků pro spouštěcí úkol. Před spuštěním příkazového řádku pro spouštěcí úkol rozbalte archiv z příkazového řádku.

    K rozbalení archivu můžete použít archivační nástroj podle vašeho výběru. Nástroj, který použijete k rozbalení archivu, budete muset zahrnout jako soubor prostředků pro tento spouštěcí úkol.

Úkol správce úloh

K řízení a monitorování provádění úloh obvykle používáte úlohu správce úloh. Například úlohy správce úloh se často používají k vytvoření a odeslání úkolů pro úlohu, určení dalších úkolů, které se mají spustit, a určení, kdy je práce dokončena.

Úkol správce úloh však není omezen na tyto aktivity. Jedná se o plnohodnotný úkol, který může provádět jakékoli akce, které jsou požadovány pro danou úlohu. Úkol správce úloh může například stáhnout soubor zadaný jako parametr, analyzovat obsah tohoto souboru a odeslat další úkoly na základě těchto obsahů.

Úkol správce úloh je spuštěn před všemi ostatními úkoly. Má následující funkce:

  • Je službou Batch automaticky odeslán jako úkol při vytvoření úlohy.
  • Je naplánován ke spuštění před dalšími úkoly v rámci úlohy.
  • Jeho přidružený uzel je poslední, který se odebere z fondu, když je fond zmenšován.
  • Jeho ukončení může být vázáno na ukončení všech úkolů v úloze.
  • Úkolu správce úloh je přiřazena nejvyšší priorita, když je nutné jej restartovat. Pokud není k dispozici nečinný uzel, může služba Batch ukončit jeden z ostatních spuštěných úkolů ve fondu, aby uvolnila prostor pro spuštění úkolu správce úloh.
  • Úkol správce úloh v jedné úloze nemá přednost před úkoly jiných úloh. Mezi úlohami jsou dodržovány pouze priority s úrovní úlohy.

Úkoly přípravy a uvolnění úloh

Služba Batch poskytuje úlohy přípravy úloh pro nastavení provádění před úlohou a úlohy uvolnění úloh pro údržbu nebo vyčištění po úloze.

Úloha přípravy úlohy se spouští na všech výpočetních uzlech, které jsou naplánované ke spuštění úkolů, před provedením některého z dalších úkolů úlohy. Můžete například použít úlohu přípravy úlohy ke kopírování dat sdílených všemi úkoly, ale je pro úlohu jedinečná.

Po dokončení úlohy se úloha uvolnění úlohy spustí na každém uzlu ve fondu, který spustil alespoň jeden úkol. Úloha uvolnění úlohy může například odstranit data zkopírovaná úkolem přípravy úlohy nebo může komprimovat a nahrát data diagnostického protokolu.

Úkoly přípravy i uvolnění úloh umožňují zadat příkazový řádek, který se provede, když je úkol vyvolán. Nabízejí funkce, jako například stahování souborů, provádění se zvýšenými oprávněními, vlastní proměnné prostředí, maximální dobu provádění, počet opakování a dobu uchovávání souboru.

Další informace ohledně úkolů přípravy a uvolnění úloh najdete v části Spouštění úkolů přípravy a dokončení úlohy na výpočetních uzlech Azure Batch.

Úkoly s více instancemi

Úkol s více instancemi je úkol, který je nakonfigurován, aby byl současně spuštěn na více než jednom výpočetním uzlu. Pomocí úloh s více instancemi můžete povolit scénáře vysokovýkonného výpočetního prostředí, které vyžadují skupinu výpočetních uzlů, které jsou přiděleny dohromady pro zpracování jedné úlohy, jako je rozhraní MPI (Message Passing Interface).

Podrobné informace o spouštění úloh MPI ve službě Batch pomocí knihovny Batch .NET najdete v článku Použití úkolů s více instancemi ke spouštění aplikací rozhraní MPI (Message Passing Interface) v Azure Batch.

Závislosti úkolů

Závislosti úkolů, jak již název napovídá, umožňují určit, jestli úkol závisí před svým spuštěním na dokončení jiných úkolů. Tato funkce poskytuje podporu pro situace, ve kterých "podřízený" úkol spotřebovává výstup "nadřazeného" úkolu nebo když nadřazený úkol provádí inicializaci, která je požadovaná podřízeným úkolem.

Pokud chcete tuto funkci použít, musíte nejprve povolit závislosti úkolů na vaší úloze Batch. Pak pro každý úkol, který závisí na jiném (nebo mnoha jiných), zadáte úkoly, na kterých tento úkol závisí.

Pomocí závislosti úkolů lze nakonfigurovat například následující scénáře:

  • taskB závisí na úkoluA (úkolB nezačne spouštění, dokud úkolA nedokončí).
  • Úkol C závisí na úkolu A i úkolu B.
  • úkolD závisí na řadě úkolů, například na úkolech 110, než se provede.

Další podrobnosti najdete v tématu Závislosti úloh v Azure Batch a ukázku kódu TaskDependencies v úložišti azure-batch-samples GitHub.

Nastavení prostředí pro úlohy

Každý úkol prováděný službou Batch má přístup k proměnným prostředí, které nastaví na výpočetních uzlech. To zahrnuje proměnné prostředí definované službou Batch a vlastními proměnnými prostředí, které můžete definovat pro své úlohy. Aplikace a skripty, které provádějí vaše úlohy, mají během provádění přístup k těmto proměnným prostředí.

Vlastní proměnné prostředí můžete nastavit na úrovni úkolů či úloh tím, že vyplníte vlastnost nastavení prostředí pro tyto entity. Další podrobnosti najdete v části Přidání úlohy do operace úlohy (Batch REST) nebo vlastností CloudTask.EnvironmentSettings a CloudJob.CommonEnvironmentSettings ve službě Batch .NET.

Vaše klientská aplikace nebo služba může získat službou i uživatelem definované proměnné prostředí úkolu pomocí operace Získat informace o úkolu (Batch REST) nebo přístupem k vlastnosti CloudTask.EnvironmentSettings (Batch .NET). Procesy prováděné na výpočetním uzlu mohou také přistupovat k těmto i ostatním proměnným prostředí na uzlu například pomocí známé syntaxe %VARIABLE_NAME% (Windows) nebo $VARIABLE_NAME (Linux).

Seznam všech proměnných prostředí definovaných službou najdete v proměnných prostředí výpočetního uzlu.

Další kroky