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.
Úloha Azure Batch často vyžaduje nastavení před spuštěním jeho úkolů a po dokončení úkolů údržbu úloh. Možná budete například muset stáhnout běžná vstupní data úkolů do výpočetních uzlů nebo po dokončení úlohy nahrát výstupní data úkolu do Služby Azure Storage. Pro tyto operace můžete použít úkoly přípravy úloh a uvolnění úloh .
- Přípravný úkol se spustí před úkoly dané úlohy na všech výpočetních uzlech, které jsou naplánovány spustit alespoň jeden úkol.
- Úloha pro dokončení úkolu se spustí, jakmile je úloha dokončena, a to na každém uzlu v poolu, kde byl zaveden úkol přípravy úkolu.
Stejně jako u jiných úkolů služby Batch můžete zadat příkazový řádek, který se má vyvolat při spuštění úlohy přípravy nebo uvolnění. Úkoly přípravy a vydávání úloh nabízejí známé funkce úkolů Batch, jako jsou:
- Stažení resursového souboru
- Vykonání se zvýšenými oprávněními
- Vlastní proměnné prostředí
- Maximální doba trvání provádění.
- Počet opakování
- Doba uchovávání souborů.
Tento článek ukazuje, jak používat třídy JobPreparationTask a JobReleaseTask v knihovně Batch .NET .
Návod
Přípravné a uvolňovací úlohy jsou užitečné zejména v prostředích sdíleného fondu, ve kterých fond výpočetních uzlů přetrvává mezi běhy úloh a je využíván mnoha úlohami.
Případy použití pro úkoly přípravy a uvolnění úloh
Úkoly přípravy úloh a uvolnění úloh jsou vhodné pro následující scénáře:
Stáhněte si běžná data úkolů. Dávkové úlohy často vyžadují společnou sadu dat jako vstup pro úkoly úlohy. Pomocí úkolu přípravy úlohy můžete tato data stáhnout do každého uzlu před spuštěním ostatních úkolů úlohy.
Například při výpočtech denní analýzy rizik jsou data trhu specifická pro úlohu, ale společná pro všechny úkoly v této úloze. Pomocí úkolu přípravy úlohy můžete stáhnout tato data na trhu, což je často několik gigabajtů velikosti, do každého výpočetního uzlu, aby ho mohl použít libovolný úkol spuštěný na uzlu.
Odstraňte úlohu a výstup úkolu. V prostředí sdíleného fondu, kde výpočetní uzly fondu nejsou vyřazené z provozu mezi úlohami, může být potřeba odstranit data úloh mezi spuštěními. Můžete například potřebovat šetřit místo na disku na uzlech nebo vyhovět zásadám zabezpečení vaší organizace. Pomocí úlohy uvolnění můžete odstranit data, která stáhl úkol přípravy nebo vygenerovalo spuštění úkolu.
Zachovejte protokoly. Možná budete chtít uchovat kopii protokolových souborů, které generují vaše úlohy, nebo soubory s výpisem chyb, které generují neúspěšné aplikace. Úlohu uvolnění úlohy můžete použít ke komprimaci a nahrání těchto dat do účtu služby Azure Storage.
Úkol přípravy úlohy
Před spuštěním úkolů úlohy služba Batch spustí úlohu přípravy úlohy na každém výpočetním uzlu naplánovaném ke spuštění úkolu. Služba Batch ve výchozím nastavení čeká na dokončení úkolu přípravy úlohy před spuštěním naplánovaných úloh, ale můžete ji nakonfigurovat tak, aby nečekala.
Jestliže se uzel restartuje, přípravná úloha se spustí znovu, ale toto chování můžete také zakázat. Pokud máte úlohu, která obsahuje úlohu přípravy a úlohu správce, úloha přípravy se spustí před úlohou správce a před všemi ostatními úlohami. Úkol přípravy úlohy se vždy spustí jako první.
Úloha přípravy úkolu se spouští pouze na uzlech, které jsou naplánované ke spuštění úkolu. Toto chování zabraňuje zbytečným spuštěním na uzlech, kterým nejsou přiřazeny žádné úkoly. Uzly nemusí být přiděleny žádné úkoly, pokud je počet úkolů menší než počet uzlů ve fondu. Toto chování platí také v případě, že je povolené souběžné provádění úloh , které některé uzly ponechá nečinné, pokud je počet úkolů nižší než celkový možný souběžný úkol.
Poznámka:
JobPreparationTask se liší od CloudPool.StartTask v tom, že JobPreparationTask běží na začátku každé úlohy, zatímco StartTask běží pouze v případě, že výpočetní uzel poprvé připojí se k fondu nebo se restartuje.
Úloha uvolnění úlohy
Jakmile úlohu označíte jako dokončenou, úloha uvolnění úlohy se spustí na každém uzlu ve fondu, na kterém byl spuštěn úkol přípravy úlohy. Úlohu označíte jako dokončenou odesláním žádosti o ukončení. Tento požadavek nastaví stav úlohy na ukončení, ukončí všechny aktivní nebo spuštěné úkoly přidružené k úloze a spustí úlohu uvolnění úlohy. Úloha se pak přesune do dokončeného stavu.
Poznámka:
Odstraněním úlohy se také spustí úloha uvolnění úlohy. Pokud je však úloha již ukončena, úloha pro nasazení se nespustí podruhé, pokud je později úloha odstraněna.
Úlohy uvolnění mohou běžet maximálně 15 minut, než je služba Batch ukončí. Další informace najdete v referenční dokumentaci k rozhraní REST API.
Úlohy přípravy a vydávání úloh pomocí služby Batch .NET
Pokud chcete spustit úlohu přípravy úlohy, přiřaďte objekt JobPreparationTask vlastnosti CloudJob.JobPreparationTask úlohy. Podobně, pokud chcete použít úlohu uvolnění, inicializujte JobReleaseTask a přiřaďte ji ke CloudJob.JobReleaseTask vašeho úkolu.
V následujícím úryvku kódu myBatchClient je instance BatchClient a myPool je existující fond v rámci účtu Batch.
// Create the CloudJob for CloudPool "myPool"
CloudJob myJob =
myBatchClient.JobOperations.CreateJob(
"JobPrepReleaseSampleJob",
new PoolInformation() { PoolId = "myPool" });
// Specify the command lines for the job preparation and release tasks
string jobPrepCmdLine =
"cmd /c echo %AZ_BATCH_NODE_ID% > %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";
string jobReleaseCmdLine =
"cmd /c del %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";
// Assign the job preparation task to the job
myJob.JobPreparationTask =
new JobPreparationTask { CommandLine = jobPrepCmdLine };
// Assign the job release task to the job
myJob.JobReleaseTask =
new JobReleaseTask { CommandLine = jobReleaseCmdLine };
await myJob.CommitAsync();
Úloha uvolnění úlohy se spustí při ukončení nebo odstranění úlohy. Úlohu ukončíte pomocí JobOperations.TerminateJobAsync a odstraníte úlohu pomocí JobOperations.DeleteJobAsync. Úlohu obvykle ukončíte nebo odstraníte, když jsou její úkoly dokončené, nebo když dojde k dosažení časového limitu.
// Terminate the job to mark it as completed. Terminate initiates the
// job release task on any node that ran job tasks. Note that the
// job release task also runs when a job is deleted, so you don't
// have to call Terminate if you delete jobs after task completion.
await myBatchClient.JobOperations.TerminateJobAsync("JobPrepReleaseSampleJob");
Ukázka kódu na GitHubu
Pokud chcete zobrazit úkoly přípravy a uvolnění úloh v akci, sestavte a spusťte ukázkový projekt JobPrepRelease z GitHubu. Tato konzolová aplikace provede následující akce:
- Vytvoří fond se dvěma uzly.
- Vytvoří úlohu s přípravou, uvolněním a standardními úkoly.
- Spustí úlohu přípravy úlohy, která nejprve zapíše ID uzlu do textového souboru ve sdíleném adresáři uzlu.
- Spustí úlohu na každém uzlu, který zapíše ID úkolu do stejného textového souboru.
- Po dokončení všech úkolů nebo dosažení časového limitu vytiskne obsah textového souboru každého uzlu do konzoly.
- Spustí úlohu uvolnění úlohy, která po dokončení úlohy odstraní soubor z uzlu.
- Vytiskne výstupní kódy úloh přípravy a uvolnění pro každý uzel, na kterém byly spuštěny.
- Pozastaví provádění, aby bylo možné potvrdit odstranění úlohy nebo fondu.
Výstup ukázkové aplikace je podobný následujícímu příkladu:
Attempting to create pool: JobPrepReleaseSamplePool
Created pool JobPrepReleaseSamplePool with 2 nodes
Checking for existing job JobPrepReleaseSampleJob...
Job JobPrepReleaseSampleJob not found, creating...
Submitting tasks and awaiting completion...
All tasks completed.
Contents of shared\job_prep_and_release.txt on tvm-2434664350_1-20160623t173951z:
-------------------------------------------
tvm-2434664350_1-20160623t173951z tasks:
task001
task004
task005
task006
Contents of shared\job_prep_and_release.txt on tvm-2434664350_2-20160623t173951z:
-------------------------------------------
tvm-2434664350_2-20160623t173951z tasks:
task008
task002
task003
task007
Waiting for job JobPrepReleaseSampleJob to reach state Completed
...
tvm-2434664350_1-20160623t173951z:
Prep task exit code: 0
Release task exit code: 0
tvm-2434664350_2-20160623t173951z:
Prep task exit code: 0
Release task exit code: 0
Delete job? [yes] no
yes
Delete pool? [yes] no
yes
Sample complete, hit ENTER to exit...
Poznámka:
Různá doba vytváření a spouštění uzlů v novém fondu znamená, že některé uzly budou připravené k provádění úkolů dříve než jiné, což může mít za následek odlišné výstupy. Konkrétně proto, že úkoly se dokončí rychle, může jeden z uzlů fondu vykonávat všechny úkoly úlohy. Pokud k tomu dojde, úkoly přípravy a uvolnění neexistují pro uzel, který nespustil žádné operace.
Zobrazit úlohy přípravy a vydání v Azure Portálu
Pomocí webu Azure Portal můžete zobrazit vlastnosti a úkoly úlohy batch, včetně úkolů přípravy a uvolnění úloh. Na stránce účtu Batch vyberte úlohy v levém navigačním panelu a pak vyberte úlohu. Pokud spustíte ukázkovou aplikaci, přejděte na stránku práce po dokončení úkolů, ale před odstraněním úlohy a fondu.
Průběh a stav úlohy můžete monitorovat rozbalením přibližného počtu úkolů na stránce Přehled úlohy nebo Úkoly .
Následující snímek obrazovky ukazuje stránku JobPrepReleaseSampleJob po spuštění ukázkové aplikace. Tato úloha měla úkoly přípravy a uvolnění, takže v levém navigačním panelu můžete vybrat úkoly přípravy nebo uvolnění , abyste viděli jejich vlastnosti.
Další kroky
- Seznamte se s kontrolou chyb pro úlohy a úkoly.
- Naučte se používat balíčky aplikací k přípravě výpočetních uzlů Služby Batch na provádění úkolů.
- Prozkoumejte různé způsoby kopírování dat a aplikací do výpočetních uzlů služby Batch.
- Seznamte se s používáním knihovny Azure Batch File Conventions k uchování protokolů a dalších výstupních dat úloh a úkolů.