Eseguire attività di preparazione e rilascio del processo in nodi di calcolo di BatchRun job preparation and job release tasks on Batch compute nodes

Un processo di Azure Batch richiede spesso alcune operazioni di configurazione prima dell'esecuzione delle attività e di manutenzione post-processo dopo il completamento delle attività.An Azure Batch job often requires some form of setup before its tasks are executed, and post-job maintenance when its tasks are completed. Potrebbe essere necessario scaricare i dati di input delle attività comuni nei nodi di calcolo o caricare i dati di output delle attività in Archiviazione di Azure al termine del processo.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. Per eseguire queste operazioni, è possibile usare le attività di preparazione del processo e di rilascio del processo.You can use job preparation and job release tasks to perform these operations.

Quali sono le attività di preparazione e rilascio dei processiWhat are job preparation and release tasks?

Prima dell'esecuzione delle attività di un processo, viene eseguita l'attività di preparazione del processo su tutti i nodi di calcolo pianificati per l'esecuzione di almeno un'attività.Before a job's tasks run, the job preparation task runs on all compute nodes scheduled to run at least one task. Dopo aver completato il processo, viene eseguita l'attività di rilascio del processo in ogni nodo del pool che ha eseguito almeno un'attività.Once the job is completed, the job release task runs on each node in the pool that executed at least one task. Come con le normali attività di Batch, è possibile specificare una riga di comando da richiamare quando viene eseguita un'attività di preparazione o rilascio del processo.As with normal Batch tasks, you can specify a command line to be invoked when a job preparation or release task is run.

Le attività di preparazione e rilascio del processo offrono funzionalità familiari per le attività di Batch, quali download di file (file di risorse), esecuzione con privilegi elevati, variabili di ambiente personalizzate, durata massima di esecuzione, numero di tentativi e periodo di conservazione dei file.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.

Nelle sezioni seguenti viene descritto come usare le classi JobPreparationTask e JobReleaseTask disponibili nella libreria Batch .NET.In the following sections, you'll learn how to use the JobPreparationTask and JobReleaseTask classes found in the Batch .NET library.

Suggerimento

Le attività di preparazione e rilascio del processo sono particolarmente utili in ambienti con "pool condivisi", in cui un pool di nodi di calcolo viene mantenuto durante l'esecuzione di un processo e viene usato da più processi.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.

Quando usare le attività di preparazione e rilascio dei processiWhen to use job preparation and release tasks

Le attività di preparazione del processo e di rilascio del processo sono ideali per le situazioni seguenti:Job preparation and job release tasks are a good fit for the following situations:

Download dei dati delle attività comuniDownload common task data

I processi di Batch spesso richiedono un set comune di dati come input per le attività del processo.Batch jobs often require a common set of data as input for the job's tasks. Ad esempio, nei calcoli di analisi dei rischi giornalieri, i dati di mercato sono specifici del processo, ma comuni a tutte le attività del processo.For example, in daily risk analysis calculations, market data is job-specific, yet common to all tasks in the job. Tali dati di mercato, spesso di grandi dimensioni, devono essere scaricati una sola volta da ogni nodo di calcolo in modo che qualsiasi attività eseguita sul nodo possa usarli.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. Usare un' attività di preparazione del processo per scaricare questi dati in ogni nodo prima dell'esecuzione di altre attività del processo.Use a job preparation task to download this data to each node before the execution of the job's other tasks.

Eliminazione dell'output di processi e attivitàDelete job and task output

In un ambiente con "pool condivisi", in cui i nodi di calcolo di un pool non sono autorizzati tra i processi, potrebbe essere necessario eliminare i dati dei processi tra un'esecuzione e l'altra.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. Potrebbe essere necessario conservare lo spazio su disco nei nodi o rispettare i criteri di sicurezza dell'organizzazione.You might need to conserve disk space on the nodes, or satisfy your organization's security policies. Usare un' attività di rilascio del processo per eliminare i dati scaricati da un'attività di preparazione del processo o generati durante l'esecuzione dell'attività.Use a job release task to delete data that was downloaded by a job preparation task, or generated during task execution.

Conservazione dei logLog retention

È possibile conservare una copia dei file di log generati dalle attività o dei file dump di arresto anomalo generati da errori nelle applicazioni.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. In questi casi, usare un'attività di rilascio del processo per comprimere e caricare dati in un account di Archiviazione di Azure.Use a job release task in such cases to compress and upload this data to an Azure Storage account.

Suggerimento

Per rendere persistenti i log e gli altri dati di output del processo e delle attività, è anche possibile usare la libreria Azure Batch File Conventions .Another way to persist logs and other job and task output data is to use the Azure Batch File Conventions library.

attività di preparazione del processoJob preparation task

Prima dell'esecuzione delle attività di un processo, Batch esegue l'attività di preparazione del processo su ogni nodo di calcolo pianificato per l'esecuzione di un'attività.Before execution of a job's tasks, Batch executes the job preparation task on each compute node that is scheduled to run a task. Per impostazione predefinita, il servizio Batch attende il completamento dell'attività di preparazione del processo prima di eseguire le attività pianificate per l'esecuzione nel nodo,By default, the Batch service waits for the job preparation task to be completed before running the tasks scheduled to execute on the node. ma è possibile configurare il servizio affinché venga annullata la fase di attesa.However, you can configure the service not to wait. Se il nodo viene riavviato, l'attività di preparazione del processo viene eseguita nuovamente, ma è anche possibile disabilitare questo comportamento.If the node restarts, the job preparation task runs again, but you can also disable this behavior.

L'attività di preparazione del processo viene eseguita solo su nodi pianificati per l'esecuzione di un'attività.The job preparation task is executed only on nodes that are scheduled to run a task. Ciò impedisce l'esecuzione di un'attività di preparazione non necessaria nel caso in cui a un nodo non venga assegnata un'attività.This prevents the unnecessary execution of a preparation task in case a node is not assigned a task. Questa situazione può verificarsi quando il numero di attività per un processo è inferiore al numero di nodi in un poolThis can occur when the number of tasks for a job is less than the number of nodes in a pool. o quando è abilitata l'esecuzione di attività simultanee. In quest'ultimo caso, alcuni nodi rimangono inattivi se il numero delle attività è inferiore a quello totale delle attività simultanee possibili.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. Se non si esegue l'attività di preparazione dei processi sui inattivi nodi, è possibile risparmiare sui costi di trasferimento dati.By not running the job preparation task on idle nodes, you can spend less money on data transfer charges.

Nota

JobPreparationTask differisce dalla proprietà CloudPool.StartTask perché JobPreparationTask viene eseguita all'avvio di ogni processo, mentre StartTask viene eseguita solo quando un nodo di calcolo viene aggiunto per la prima volta a un pool o viene riavviato.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.

attività di rilascio del processoJob release task

Dopo aver contrassegnato un processo come completato , viene eseguita l'attività di rilascio del processo in ogni nodo del pool che ha eseguito almeno un'attività.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. Un processo viene contrassegnato come completato generando una richiesta di interruzione.You mark a job as completed by issuing a terminate request. Il servizio Batch imposta quindi lo stato del processo su Arresto in corso, termina le attività attive o in esecuzione associate al processo ed esegue l'attività di rilascio del processo.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. Il processo passa quindi allo stato completato .The job then moves to the completed state.

Nota

Anche l'eliminazione del processo esegue l'attività di rilascio del processo.Job deletion also executes the job release task. Tuttavia, se un processo è già stato terminato, l'attività di rilascio non viene eseguita una seconda volta se il processo viene eliminato in seguito.However, if a job has already been terminated, the release task is not run a second time if the job is later deleted.

Attività di preparazione e di rilascio del processo con Batch .NETJob prep and release tasks with Batch .NET

Per usare un'attività di preparazione del processo, assegnare un oggetto JobPreparationTask alla proprietà CloudJob.JobPreparationTask del processo.To use a job preparation task, assign a JobPreparationTask object to your job's CloudJob.JobPreparationTask property. In modo analogo, inizializzare una classe JobReleaseTask e assegnarla alla proprietà CloudJob.JobReleaseTask del processo per impostare l'attività di rilascio del processo.Similarly, initialize a JobReleaseTask and assign it to your job's CloudJob.JobReleaseTask property to set the job's release task.

In questo frammento di codice myBatchClient è un'istanza di BatchClient e myPool è un pool esistente nell'account 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 JobPreparationTask { CommandLine = jobReleaseCmdLine };

await myJob.CommitAsync();

Come indicato prima, l'attività di rilascio viene eseguita quando un processo viene concluso o eliminato.As mentioned earlier, the release task is executed when a job is terminated or deleted. Terminare un processo con JobOperations.TerminateJobAsync.Terminate a job with JobOperations.TerminateJobAsync. Eliminare un processo con JobOperations.DeleteJobAsync.Delete a job with JobOperations.DeleteJobAsync. In genere si termina o si elimina un processo quando le attività vengono completate o quando si raggiunge un timeout definito dall'utente.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.TerminateJobAsy("JobPrepReleaseSampleJob");

Esempio di codice in GitHubCode sample on GitHub

Per vedere il funzionamento delle attività di preparazione e rilascio dei processi, esaminare il progetto di esempio JobPrepRelease in GitHub.To see job preparation and release tasks in action, check out the JobPrepRelease sample project on GitHub. Questa applicazione console esegue le operazioni seguenti:This console application does the following:

  1. Crea un pool con due nodi "small".Creates a pool with two "small" nodes.
  2. Crea un processo con attività di preparazione e rilascio di processi e attività standard.Creates a job with job preparation, release, and standard tasks.
  3. Esegue un'attività di preparazione del processo che scrive innanzitutto l'ID del nodo in un file di testo in una directory "condivisa" del nodo.Runs the job preparation task, which first writes the node ID to a text file in a node's "shared" directory.
  4. Esegue un'attività in ogni nodo che scrive il relativo ID attività nello stesso file di testo.Runs a task on each node that writes its task ID to the same text file.
  5. Dopo aver completato tutte le attività (o aver raggiunto il timeout), stampa i contenuti del file di testo di ogni nodo nella console.Once all tasks are completed (or the timeout is reached), prints the contents of each node's text file to the console.
  6. Dopo aver completato il processo, esegue l'attività di rilascio del processo per eliminare il file dal nodo.When the job is completed, runs the job release task to delete the file from the node.
  7. Stampa i codici di uscita delle attività di preparazione e rilascio dei processi per ogni nodo in cui vengono eseguiti.Prints the exit codes of the job preparation and release tasks for each node on which they executed.
  8. Sospende l'esecuzione per consentire la conferma dell'eliminazione dei processi e/o del pool.Pauses execution to allow confirmation of job and/or pool deletion.

L'output dell'applicazione di esempio è simile al seguente:Output from the sample application is similar to the following:

Attempting to create pool: JobPrepReleaseSamplePool
Created pool JobPrepReleaseSamplePool with 2 small 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...

Nota

A causa degli orari variabili di creazione e di inizio per i nodi in un nuovo pool, poiché alcuni nodi sono pronti per le attività prima di altri, è possibile che l'output visualizzato sia diverso.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. Poiché le attività vengono completate rapidamente, in particolare, è possibile che uno dei nodi del pool esegua tutte le attività del processo.Specifically, because the tasks complete quickly, one of the pool's nodes may execute all of the job's tasks. In questo caso, si potrà notare che le attività di preparazione e di rilascio dei processi non esistono per il nodo che non ha eseguito alcuna attività.If this occurs, you will notice that the job prep and release tasks do not exist for the node that executed no tasks.

Controllare le attività di preparazione e rilascio del processo nel portale di AzureInspect job preparation and release tasks in the Azure portal

Quando si esegue l'applicazione di esempio, è possibile usare il portale di Azure per visualizzare le proprietà del processo e le rispettive attività oppure per scaricare il file di testo condiviso modificato dalle attività del processo.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.

Lo screenshot seguente mostra il pannello Attività di preparazione nel portale di Azure dopo un'esecuzione dell'applicazione di esempio.The screenshot below shows the Preparation tasks blade in the Azure portal after a run of the sample application. Passare alle proprietà JobPrepReleaseSampleJob dopo il completamento delle attività, ma prima dell'eliminazione del processo e del pool, quindi fare clic su Attività di preparazione o Attività di rilascio per visualizzare le rispettive proprietà.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.

Proprietà di preparazione del processo nel portale di Azure

Passaggi successiviNext steps

Pacchetti dell'applicazioneApplication packages

Oltre all'attività di preparazione del processo, è possibile usare anche la funzionalità Pacchetti dell'applicazione di Batch per preparare i nodi di calcolo per l'esecuzione dell'attività.In addition to the job preparation task, you can also use the application packages feature of Batch to prepare compute nodes for task execution. Questa funzionalità è particolarmente utile per la distribuzione di applicazioni che non richiedono l'esecuzione di un programma di installazione, applicazioni che contengono molti file (100+) o applicazioni che richiedono un controllo delle versioni rigoroso.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.

Installazione delle applicazioni e staging dei datiInstalling applications and staging data

Questo post del forum MSDN offre una panoramica di diversi metodi di preparazione dei nodi per l'esecuzione di attività:This MSDN forum post provides an overview of several methods of preparing your nodes for running tasks:

Installing applications and staging data on Batch compute nodes (Installazione delle applicazioni e staging dei dati nei nodi di calcolo di Batch)Installing applications and staging data on Batch compute nodes

L'autore, uno dei membri del team di Azure Batch, illustra diverse tecniche che è possibile usare per distribuire applicazioni e dati nei nodi di calcolo.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.