Spuštění úkolů přípravy úloh a uvolnění úloh na výpočetních uzlech BatchRun job preparation and job release tasks on Batch compute nodes

Úloha Azure Batch často vyžaduje určitou formu nastavení před spuštěním úkolů a údržbou po dokončení úloh.An Azure Batch job often requires some form of setup before its tasks are executed, and post-job maintenance when its tasks are completed. Je možné, že budete muset stáhnout běžná vstupní data úkolů do výpočetních uzlů nebo odeslat výstupní data úkolu do Azure Storage po dokončení úlohy.You might need to download common task input data to your compute nodes, or upload task output data to Azure Storage after the job completes. K provedení těchto operací můžete použít úkoly přípravy úlohy a vydání úlohy .You can use job preparation and job release tasks to perform these operations.

Co jsou úkoly přípravy a uvolnění úloh?What are job preparation and release tasks?

Než se spustí úlohy úlohy, úloha přípravy úlohy se spustí na všech výpočetních uzlech, na kterých je naplánované spuštění aspoň jedné úlohy.Before a job's tasks run, the job preparation task runs on all compute nodes scheduled to run at least one task. Po dokončení úlohy se úloha uvolnění úlohy spustí na každém uzlu ve fondu, který provedl alespoň jeden úkol.Once the job is completed, the job release task runs on each node in the pool that executed at least one task. Stejně jako u běžných úloh Batch můžete zadat příkazový řádek, který se má vyvolat, když se spustí Příprava úlohy nebo úloha vydání.As with normal Batch tasks, you can specify a command line to be invoked when a job preparation or release task is run.

Úkoly přípravy a uvolnění úloh nabízejí známé funkce dávkové úlohy, jako je například stahování souborů (soubory prostředků), spuštění se zvýšenými oprávněními, vlastní proměnné prostředí, maximální doba provádění, počet opakování a doba uchovávání souborů.Job preparation and release tasks offer familiar Batch task features such as file download (resource files), elevated execution, custom environment variables, maximum execution duration, retry count, and file retention time.

V následujících částech se dozvíte, jak používat třídy JobPreparationTask a JobReleaseTask , které se nacházejí v knihovně Batch .NET .In the following sections, you'll learn how to use the JobPreparationTask and JobReleaseTask classes found in the Batch .NET library.

Tip

Úkoly přípravy a uvolnění úloh jsou zvláště užitečné v prostředích sdíleného fondu, ve kterém se mezi spouštěním úloh přetrvají fondy výpočetních uzlů a používají se v mnoha úlohách.Job preparation and release tasks are especially helpful in "shared pool" environments, in which a pool of compute nodes persists between job runs and is used by many jobs.

Kdy použít úkoly přípravy a uvolnění úlohWhen to use job preparation and release tasks

Úkoly přípravy úloh a uvolnění úlohy jsou vhodné v následujících situacích:Job preparation and job release tasks are a good fit for the following situations:

Stáhnout běžná data úlohyDownload common task data

Dávkové úlohy často vyžadují pro úkoly úlohy společnou sadu dat jako vstup.Batch jobs often require a common set of data as input for the job's tasks. Například při denních výpočtech analýzy rizik jsou tržní data specifická pro jednotlivé úlohy, ale společná pro všechny úlohy v rámci úlohy.For example, in daily risk analysis calculations, market data is job-specific, yet common to all tasks in the job. Tato data z trhu, často i několik gigabajtů, by se měla do každého výpočetního uzlu stáhnout jenom jednou, aby se mohl použít libovolný úkol, který na uzlu běží.This market data, often several gigabytes in size, should be downloaded to each compute node only once so that any task that runs on the node can use it. Použijte úkol přípravy úlohy ke stažení těchto dat do každého uzlu před provedením dalších úloh úlohy.Use a job preparation task to download this data to each node before the execution of the job's other tasks.

Odstranit výstup úlohy a úlohyDelete job and task output

V prostředí "Shared Pool", kde výpočetní uzly fondu nejsou vyřazeny z provozu mezi úlohami, může být nutné odstranit data úlohy mezi spuštěním.In a "shared pool" environment, where a pool's compute nodes are not decommissioned between jobs, you may need to delete job data between runs. Možná budete muset na uzlech ušetřit místo na disku nebo vyhovět zásadám zabezpečení vaší organizace.You might need to conserve disk space on the nodes, or satisfy your organization's security policies. Úkol uvolnění úlohy slouží k odstranění dat, která byla stažena úlohou přípravy úlohy nebo vygenerována během provádění úkolu.Use a job release task to delete data that was downloaded by a job preparation task, or generated during task execution.

Uchovávání protokolůLog retention

Možná budete chtít uchovat kopii souborů protokolu, které vaše úkoly generují, nebo možná soubory s výpisem stavu systému, které se dají vygenerovat v neúspěšných aplikacích.You might want to keep a copy of log files that your tasks generate, or perhaps crash dump files that can be generated by failed applications. V takových případech použijte úkol uvolnění úlohy pro komprimaci a nahrání těchto dat do účtu Azure Storage .Use a job release task in such cases to compress and upload this data to an Azure Storage account.

Tip

Dalším způsobem, jak uchovat protokoly a další úlohy a výstupní data úloh, je použít knihovnu Azure Batchch konvencí souborů .Another way to persist logs and other job and task output data is to use the Azure Batch File Conventions library.

Úkol přípravy úlohyJob preparation task

Před provedením úkolů úlohy Batch spustí úkol přípravy úlohy na každém výpočetním uzlu naplánovaném pro spuštění úkolu.Before execution of a job's tasks, Batch executes the job preparation task on each compute node scheduled to run a task. Ve výchozím nastavení bude služba Batch čekat na dokončení úlohy přípravy úlohy před spuštěním úloh, které jsou naplánovány k provedení na uzlu.By default, Batch waits for the job preparation task to complete before running the tasks scheduled to execute on the node. Službu však můžete nakonfigurovat tak, aby nečekala.However, you can configure the service not to wait. Pokud se uzel restartuje, úloha přípravy úlohy se znovu spustí.If the node restarts, the job preparation task runs again. Toto chování můžete také zakázat.You can also disable this behavior. Pokud máte úlohu s nakonfigurovanou úlohou přípravy úlohy a úlohou Správce úloh, úloha přípravy úlohy se spustí před úkolem správce úloh stejně jako u všech ostatních úloh.If you have a job with a job preparation task and a job manager task configured, the job preparation task runs before the job manager task, just as it does for all other tasks. Úkol přípravy úlohy se vždycky spustí nejdřív.The job preparation task always runs first.

Úkol přípravy úlohy je proveden pouze v uzlech, které mají naplánované spuštění úlohy.The job preparation task is executed only on nodes that are scheduled to run a task. Tím se zabrání zbytečnému provedení přípravné úlohy pro případ, že uzel není přiřazený úkol.This prevents the unnecessary execution of a preparation task in case a node is not assigned a task. Tato situace může nastat, pokud je počet úloh úlohy menší než počet uzlů ve fondu.This can occur when the number of tasks for a job is less than the number of nodes in a pool. Platí také v případě, že je povoleno Souběžné provádění úloh , což ponechá některé uzly nečinné, pokud je počet úloh nižší než celkové možné souběžné úlohy.It also applies when concurrent task execution is enabled, which leaves some nodes idle if the task count is lower than the total possible concurrent tasks. Nespuštěním úlohy přípravy úlohy na nečinných uzlech můžete strávit poplatky za přenos dat bez dalších poplatků.By not running the job preparation task on idle nodes, you can spend less money on data transfer charges.

Poznámka

JobPreparationTask se liší od CloudPool. StartTask v tom, že JobPreparationTask spouští na začátku každé úlohy, zatímco StartTask se spustí jenom v případě, že se výpočetní uzel nejdřív připojí k fondu nebo restartuje.JobPreparationTask differs from CloudPool.StartTask in that JobPreparationTask executes at the start of each job, whereas StartTask executes only when a compute node first joins a pool or restarts.

Úkol uvolnění úlohyJob release task

Jakmile je úloha označena jako dokončená, úkol uvolnění úlohy se spustí na každém uzlu ve fondu, který provedl alespoň jeden úkol.Once a job is marked as completed, the job release task is executed on each node in the pool that executed at least one task. Úlohu označíte jako dokončenou vyvoláním žádosti o ukončení.You mark a job as completed by issuing a terminate request. Služba Batch pak nastaví stav úlohy na ukončení, ukončí všechny aktivní nebo spuštěné úlohy přidružené k úloze a spustí úlohu uvolnění úlohy.The Batch service then sets the job state to terminating, terminates any active or running tasks associated with the job, and runs the job release task. Úloha se pak přesune do dokončeného stavu.The job then moves to the completed state.

Poznámka

Úkol uvolnění úlohy se taky provede odstraněním úlohy.Job deletion also executes the job release task. Pokud se ale úloha už ukončila, úloha vydání se nespustí podruhé, pokud se úloha později odstraní.However, if a job has already been terminated, the release task is not run a second time if the job is later deleted.

Úlohy uvolnění úloh se můžou spouštět po dobu maximálně 15 minut, než se služba Batch ukončí.Jobs release tasks can run for a maximum of 15 minutes before being terminated by the Batch service. Další informace najdete v dokumentaci REST API Reference.For more information, see the REST API reference documentation.

Úkoly přípravy a uvolnění úloh pomocí batch .NETJob prep and release tasks with Batch .NET

Pokud chcete použít úkol přípravy úlohy, přiřaďte objekt JobPreparationTask k vlastnosti vlastnosti cloudjob. JobPreparationTask vaší úlohy.To use a job preparation task, assign a JobPreparationTask object to your job's CloudJob.JobPreparationTask property. Podobně inicializujte JobReleaseTask a přiřaďte ji k vlastnosti vlastnosti cloudjob. JobReleaseTask vaší úlohy, abyste mohli nastavit úlohu verze úlohy.Similarly, initialize a JobReleaseTask and assign it to your job's CloudJob.JobReleaseTask property to set the job's release task.

V tomto fragmentu kódu myBatchClient je instance BatchClienta myPool je existující fond v rámci účtu Batch.In this code snippet, myBatchClient is an instance of BatchClient, and myPool is an existing pool within the Batch account.

// 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();

Jak už bylo zmíněno dříve, úloha vydání se spustí, když se úloha ukončí nebo odstraní.As mentioned earlier, the release task is executed when a job is terminated or deleted. Ukončení úlohy pomocí JobOperations. TerminateJobAsync.Terminate a job with JobOperations.TerminateJobAsync. Odstraňte úlohu pomocí JobOperations. DeleteJobAsync.Delete a job with JobOperations.DeleteJobAsync. Při dokončení jeho úkolů nebo při dosažení časového limitu, který jste nadefinovali, se obvykle úloha ukončí nebo odstraní.You typically terminate or delete a job when its tasks are completed, or when a timeout that you've defined has been reached.

// Terminate the job to mark it as Completed; this will initiate the
// Job Release Task on any node that executed job tasks. Note that the
// Job Release Task is also executed when a job is deleted, thus you
// need not call Terminate if you typically delete jobs after task completion.
await myBatchClient.JobOperations.TerminateJobAsync("JobPrepReleaseSampleJob");

Ukázka kódu na GitHubuCode sample on GitHub

Pokud chcete zobrazit úkoly přípravy úlohy a vydání v akci, podívejte se na vzorový projekt JobPrepRelease na GitHubu.To see job preparation and release tasks in action, check out the JobPrepRelease sample project on GitHub. Tato Konzolová aplikace provede následující akce:This console application does the following:

  1. Vytvoří fond se dvěma uzly.Creates a pool with two nodes.
  2. Vytvoří úlohu s přípravou, vydanou verzí a standardní úlohou úlohy.Creates a job with job preparation, release, and standard tasks.
  3. Spustí úkol přípravy úlohy, který nejdřív zapíše ID uzlu do textového souboru v adresáři Shared (sdílený) uzlu.Runs the job preparation task, which first writes the node ID to a text file in a node's "shared" directory.
  4. Spustí úlohu na každém uzlu, který zapíše své ID úlohy do stejného textového souboru.Runs a task on each node that writes its task ID to the same text file.
  5. Po dokončení všech úloh (nebo vypršení časového limitu) vytiskne obsah každého textového souboru uzlu do konzoly.Once all tasks are completed (or the timeout is reached), prints the contents of each node's text file to the console.
  6. Po dokončení úlohy spustí úkol uvolnění úlohy, aby se soubor odstranil z uzlu.When the job is completed, runs the job release task to delete the file from the node.
  7. Vytiskne kódy ukončení úloh přípravy a uvolnění úlohy pro každý uzel, na kterém byly provedeny.Prints the exit codes of the job preparation and release tasks for each node on which they executed.
  8. Pozastaví provádění, aby bylo možné potvrzovat úlohu nebo odstranění fondu.Pauses execution to allow confirmation of job and/or pool deletion.

Výstup z ukázkové aplikace je podobný následujícímu:Output from the sample application is similar to the following:

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

Vzhledem k vytvoření proměnné a času spuštění uzlů v novém fondu (některé uzly jsou připravené na úlohy před ostatními) se může zobrazit jiný výstup.Due to the variable creation and start time of nodes in a new pool (some nodes are ready for tasks before others), you may see different output. Konkrétně vzhledem k tomu, že úkoly jsou dokončeny rychle, jeden z uzlů fondu může spustit všechny úkoly úlohy.Specifically, because the tasks complete quickly, one of the pool's nodes may execute all of the job's tasks. Pokud k tomu dojde, budete si všimnout, že úlohy přípravy a vydání úlohy pro uzel, který neprovede žádné úlohy, neexistují.If this occurs, you will notice that the job prep and release tasks do not exist for the node that executed no tasks.

Kontrola úloh přípravy a vydání úloh v Azure PortalInspect job preparation and release tasks in the Azure portal

Když spustíte ukázkovou aplikaci, můžete použít Azure Portal k zobrazení vlastností úlohy a jejích úkolů nebo dokonce stáhnout sdílený textový soubor, který je upraven úlohami úlohy.When you run the sample application, you can use the Azure portal to view the properties of the job and its tasks, or even download the shared text file that is modified by the job's tasks.

Níže uvedený snímek obrazovky ukazuje okno přípravné úkoly v Azure Portal po spuštění ukázkové aplikace.The screenshot below shows the Preparation tasks blade in the Azure portal after a run of the sample application. Až se vaše úkoly dokončí (ale před odstraněním úlohy a fondu), přejděte do vlastností JobPrepReleaseSampleJob a zobrazte jejich vlastnosti kliknutím na Příprava úkolů nebo na úlohy vydaných verzí .Navigate to the JobPrepReleaseSampleJob properties after your tasks have completed (but before deleting your job and pool) and click Preparation tasks or Release tasks to view their properties.

Vlastnosti přípravy úlohy v Azure Portal

Další krokyNext steps

Balíčky aplikacíApplication packages

Kromě úlohy přípravy úlohy můžete také použít funkci balíčky aplikací služby Batch k přípravě výpočetních uzlů pro provádění úloh.In addition to the job preparation task, you can also use the application packages feature of Batch to prepare compute nodes for task execution. Tato funkce je zvláště užitečná pro nasazení aplikací, které nevyžadují spuštění instalačního programu, aplikací, které obsahují mnoho (100) souborů, nebo aplikací, které vyžadují striktní správu verzí.This feature is especially useful for deploying applications that do not require running an installer, applications that contain many (100+) files, or applications that require strict version control.

Instalace aplikací a pracovních datInstalling applications and staging data

Tento příspěvek na blogu MSDN poskytuje přehled několika metod přípravy uzlů na spuštěné úlohy:This MSDN forum post provides an overview of several methods of preparing your nodes for running tasks:

Instalace aplikací a pracovních dat na výpočetních uzlech BatchInstalling applications and staging data on Batch compute nodes

Napsaný jedním z Azure Batch členů týmu, popisuje několik postupů, které můžete použít k nasazení aplikací a dat do výpočetních uzlů.Written by one of the Azure Batch team members, it discusses several techniques that you can use to deploy applications and data to compute nodes.