Sdílet prostřednictvím


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

Ve službě Azure Batch představuje úkol jednotku výpočtu. Úloha je kolekce těchto úkolů. Další informace o úlohách a úkolech a jejich použití v pracovním postupu služby 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 úloh.

Priorita úloh

Úlohy, 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) v rámci každého fondu.

Pokud chcete aktualizovat prioritu úlohy, zavolejte aktualizovat vlastnosti operace úlohy (Batch REST) nebo upravte CloudJob.Priority (Batch .NET). Hodnoty priority jsou v rozsahu od -1000 (nejnižší priorita) do +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 zrušeny. Ú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 nebude mít 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.
  • Jako omezení můžete zadat maximální počet opakovaných pokusů o úkol, včetně toho, jestli se úkol vždy opakuje nebo nikdy neopakuje. Opakování úlohy 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. Úkol správce úloh se vyžaduje 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 onAllTasksComplete úlohy (OnAllTasksComplete ve službě Batch .NET) na terminatejobhodnotu *, 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ů k dokončení všech svých úkolů. 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 vlastnost onAllTasksComplete nové úlohy na noactionhodnotu *terminatejob' až po dokončení přidávání úkolů do úlohy.

Naplánované úlohy

Plány úloh umožňují vytvořit opakované úlohy v rámci služby 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í.

Úlohy

Ú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 uzlech Windows 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 naleznete 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í možnost zjednodušeného nasazení a správy verzí aplikací, které provádějí vaše úkoly. 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í doba života úkolu, od doby, kdy je přidána do úlohy do 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ě úkolů, 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, dokud 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, aby nakonfigurovala nové uzly a připravila je na přijetí úkolů.

Stejně jako u jakékoli úlohy Azure Batch můžete kromě příkazového řádku, který se má spustit, zadat seznam souborů prostředků ve službě Azure Storage. 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. Příkazový řádek spouštěcího úkolu může například provést operaci robocopy 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 potom spustit soubor MSI nebo setup.exe.

Obvykle budete chtít, aby služba Batch čekala na dokončení spouštěcího úkolu před zvážením uzlu připraveného k přiřazení úkolů. Podle potřeby ale můžete toto nastavení 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/nebo 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ů ke spuštění 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 pro úlohu vyžadovány. Ú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 úkoly 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.

Úkol přípravy úlohy se spustí na všech výpočetních uzlech, které jsou naplánované ke spuštění úkolů před spuštěním některého z ostatních úkolů úlohy. Můžete například použít úkol přípravy úlohy ke kopírování dat, která jsou sdílena 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, která zkopírovala úloha 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 úkolu

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ů v ú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:

  • Úkol B závisí na úkolu A (úkol B nezahájí provádění, dokud se nedokončí úkol A).
  • Úkol C závisí na úkolu A i úkolu B.
  • Úkol D závisí na celé řadě úkolů, například na úkolu 110, než se provede

Další informace najdete v tématu Závislosti úloh ve službě Azure Batch a ukázka kódu TaskDependencies v úložišti GitHub azure-batch-samples .

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é úkoly. Aplikace a skripty, které vaše úlohy provádějí, 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ší informace najdete v tématu 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ích uzlů.

Další kroky