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

V Azure Batch úkol představuje 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 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, která je přidružená k plánu úloh, nebo jeden fond pro všechny úlohy přidružené k plánu úloh.

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) pro každý fond.

Pokud chcete aktualizovat prioritu úlohy, zavolejte aktualizaci vlastností 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. Úlohy v úlohách s nižší prioritou, které už jsou spuštěné, nebudou předcházet úkolům v úloze s vyšší prioritou. Ú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.
  • Jako omezení můžete zadat maximální počet opakovaných pokusů o úkol , včetně toho, jestli se úkol vždy opakuje, nebo se nikdy neopakuje. Opakování úkolu znamená, že pokud úloha selže, bude znovu ve frontě, aby se spustila znovu.

Ú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 konkrétně službou Batch; jakmile se úloha vytvoří, zasadí se do fronty, a pokud selže, restartuje se. Úloha správce úloh je vyžadována pro úlohy vytvořené plánem úloh, 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 terminatejobhodnotu *', která automaticky ukončí úlohu, když jsou všechny její úkoly ve stavu dokončení.

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 vlastnost nové úlohy onAllTasksComplete na noactionhodnotu a pak ji nastavit na terminatejobhodnotu *' až po dokončení přidávání úkolů do úlohy.

Naplánované úlohy

Plány úloh umožňují vytvářet 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 zadat dobu trvání plánu (jak dlouho a kdy je plán platný) a jak často se během plánovaného období vytvářejí úlohy.

Ú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 nespouští v prostředí. Proto nemůže nativně využívat funkce shellu, jako například rozšíření proměnné prostředí (sem patří i PATH). Abyste mohli tyto funkce využívat, musíte v příkazovém řádku vyvolat prostředí, 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 najdete v tématech Spustit úlohu a Soubory a adresáře.

  • 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í doba životnosti úkolu od jeho přidání do dokončení je 180 dnů. Dokončené úkoly přetrvá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 pro 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 tak dlouho, dokud zůstane ve fondu. To zahrnuje, kdy je uzel poprvé přidán do fondu a kdy se restartuje nebo znovu image.

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é ke službě Batch ke konfiguraci nových uzlů a jejich chystané k přijímání ú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 počátečního úkolu do sdílené složky a pak spustit MSI nebo setup.exe.

Obvykle budete chtít, aby služba Batch počkala na dokončení spouštěcího úkolu, než zváží uzel připravený k přiřazení úkolů. Podle potřeby to ale můžete 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í nebo monitorování provádění úloh se obvykle používá úloha správce úloh. Úlohy správce úloh se například často používají k vytvoření a odeslání úkolů pro úlohu, k určení dalších úkolů, které se mají spustit, a k 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 danou úlohu potřeba. Ú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 úlohy pro nastavení před spuštěním úlohy a úlohy uvolnění úlohy pro údržbu nebo vyčištění po dokončení úlohy.

Úloha přípravy úlohy běží na všech výpočetních uzlech, které jsou naplánované na spouštění úloh, před provedením libovolného z ostatních úloh. Můžete například použít úlohu přípravy úlohy ke kopírování dat, která jsou sdílena všemi úkoly, ale jsou pro danou ú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á byla zkopírována úkolem přípravy úlohy, nebo může komprimovat a nahrávat 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. U ú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 společně přiděleny ke zpracování jedné úlohy, například 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ů v úloze Služby 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 úkolu A (úkolB nezačne spouštět, dokud úkolA nedokončí).
  • Úkol C závisí na úkolu A i úkolu B.
  • taskD závisí na řadě úkolů, jako jsou úkoly 110, než se spustí.

Další podrobnosti najdete v tématu Závislosti úloh v 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í proměnné prostředí, které můžete definovat pro své úkoly. Aplikace a skripty spouštěné vašimi úkoly 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 ve vlastnostech 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 tématu Proměnné prostředí výpočetního uzlu.

Další kroky