Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Un processo di Azure Batch richiede spesso la configurazione prima dell'esecuzione delle attività e la manutenzione post-processo al termine delle attività. Ad esempio, 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. È possibile usare le attività di preparazione del job e rilascio del job per queste operazioni.
- Un'attività di preparazione del processo viene eseguita prima delle attività di un processo, in tutti i nodi di calcolo pianificati per l'esecuzione di almeno un'attività.
- Un'attività di rilascio del processo viene eseguita una volta completato il processo, in ogni nodo del pool che ha eseguito un'attività di preparazione del processo.
Come per altre attività di Batch, è possibile specificare una riga di comando da richiamare quando viene eseguita un'attività di preparazione o rilascio di un processo. Le attività di preparazione e rilascio dei processi offrono funzionalità comuni delle attività batch, ad esempio:
- Download del file di risorse.
- Esecuzione con privilegi elevati.
- Variabili di ambiente personalizzate.
- Durata massima dell'esecuzione.
- Conteggio dei tentativi di ripetizione.
- Tempo di conservazione dei file.
Questo articolo illustra come usare le classi JobPreparationTask e JobReleaseTask nella libreria Batch .NET .
Suggerimento
Le attività di preparazione e rilascio dei processi sono particolarmente utili negli ambienti del pool condiviso , in cui un pool di nodi di calcolo persiste tra le esecuzioni dei processi e viene usato da molti processi.
Casi d'uso per le attività di preparazione e rilascio dei lavori
Le attività di preparazione e rilascio dei lavori sono adatte agli scenari seguenti:
Scaricare i dati comuni delle attività. I processi batch spesso richiedono un set comune di dati come input per le attività di un processo. È possibile usare un'attività di preparazione del processo per scaricare questi dati in ogni nodo prima dell'esecuzione delle altre attività del processo.
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. È possibile usare un'attività di preparazione del processo per scaricare questi dati di mercato, che sono spesso diversi gigabyte di dimensioni, in ogni nodo di calcolo in modo che qualsiasi attività eseguita nel nodo possa usarla.
Eliminare l'output del processo e dell'attività. In un ambiente pool condiviso, in cui i nodi di calcolo di un pool non vengono rimossi tra i processi, potrebbe essere necessario eliminare i dati del processo tra le esecuzioni. Ad esempio, potrebbe essere necessario risparmiare spazio su disco nei nodi o soddisfare i criteri di sicurezza dell'organizzazione. È possibile usare un'attività di rilascio del lavoro per eliminare i dati scaricati da un'attività di preparazione del lavoro o generati dall'esecuzione dell'attività.
Conservare i log. Potrebbe essere necessario mantenere una copia dei file di log generati dalle tue attività o dei file di crash dump generati dalle applicazioni fallite. È possibile usare un'attività di rilascio del processo per comprimere e caricare questi dati in un account di archiviazione di Azure.
Attività di preparazione del lavoro
Prima di eseguire attività di processo, Batch esegue l'attività di preparazione del processo in ogni nodo di calcolo pianificato per eseguire un'attività. Per impostazione predefinita, Batch attende il completamento dell'attività di preparazione del processo prima di eseguire attività di processo pianificate, ma è possibile configurarlo per non attendere.
Se il nodo viene riavviato, l'attività di preparazione del processo viene eseguita di nuovo, ma è anche possibile disabilitare questo comportamento. Se si dispone di un compito con un'attività di preparazione del compito e un'attività di gestione del compito, l'attività di preparazione del compito viene eseguita prima dell'attività di gestione del compito e prima di tutte le altre attività. L'attività di preparazione del lavoro viene sempre eseguita per prima.
L'attività di preparazione del lavoro viene eseguita solo sui nodi pianificati per eseguire un compito. Questo comportamento impedisce le esecuzioni non necessarie nei nodi a cui non sono assegnate attività. I nodi potrebbero non essere assegnati ad alcuna attività quando il numero di attività del processo è minore del numero di nodi nel pool. Questo comportamento si applica anche quando è abilitata l'esecuzione di attività simultanee , lasciando alcuni nodi inattive se il numero di attività è inferiore al totale possibile attività simultanee.
Annotazioni
JobPreparationTask differisce da CloudPool.StartTask in che JobPreparationTask viene eseguito all'inizio di ogni processo, mentre StartTask viene eseguito solo quando un nodo di calcolo viene aggiunto per la prima volta a un pool o viene riavviato.
Attività di rilascio
Dopo aver contrassegnato un processo come completato, l'attività di rilascio del processo viene eseguita in ogni nodo del pool che ha eseguito un'attività di preparazione del processo. Si contrassegna un job come completato inviando una richiesta di terminazione. Questa richiesta imposta lo stato del processo su terminazione, termina tutte le attività attive o in esecuzione associate al processo ed esegue l'attività di rilascio del processo. Il processo passa quindi allo stato completato .
Annotazioni
L'eliminazione di un job esegue anche il task di rilascio del job. Tuttavia, se un processo è già terminato, l'attività di rilascio non viene eseguita una seconda volta se il processo viene eliminato in un secondo momento.
Le attività di rilascio dei job possono essere eseguite per un massimo di 15 minuti prima che il servizio Batch le termini. Per altre informazioni, vedere la documentazione di riferimento dell'API REST.
Attività di preparazione e rilascio dei processi con Batch .NET
Per eseguire un'attività di preparazione del processo, assegnare un oggetto JobPreparationTask alla proprietà CloudJob.JobPreparationTask del processo. Analogamente, per utilizzare un'attività di rilascio del processo, inizializzare un JobReleaseTask e assegnarlo al CloudJob.JobReleaseTask del processo.
Nel frammento di codice seguente, myBatchClient è un'istanza di BatchClient ed myPool è un pool esistente all'interno dell'account 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();
L'attività di completamento del processo di lavoro viene eseguita quando un processo di lavoro viene terminato o eliminato. Terminare un processo usando JobOperations.TerminateJobAsync ed eliminare un processo usando JobOperations.DeleteJobAsync. In genere si termina o si elimina un processo al termine delle attività o quando viene raggiunto un timeout definito.
// 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");
Esempio di codice in GitHub
Per visualizzare le attività di preparazione e rilascio dei processi in azione, compilare ed eseguire il progetto di esempio JobPrepRelease da GitHub. Questa applicazione console esegue le azioni seguenti:
- Crea un pool con due nodi.
- Crea un processo con attività di preparazione, di rilascio e standard.
- Esegue l'attività di preparazione del processo, che scrive prima l'ID del nodo in un file di testo nella directory condivisa di un nodo.
- Esegue un'attività in ogni nodo che scrive l'ID attività nello stesso file di testo.
- Una volta completate tutte le attività o raggiunto il timeout, stampa il contenuto del file di testo di ogni nodo nella console.
- Esegue l'attività di rilascio del lavoro per eliminare il file dal nodo al termine del lavoro.
- Stampa i codici di uscita delle attività di preparazione e rilascio del processo per ogni nodo su cui sono state eseguite.
- Sospende l'esecuzione per consentire la conferma dell'eliminazione del processo e/o del pool.
L'output dell'applicazione di esempio è simile all'esempio seguente:
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...
Annotazioni
I vari orari di creazione e inizio dei nodi in un nuovo pool indicano che alcuni nodi sono pronti per le attività prima di altri, quindi potrebbe essere visualizzato un output diverso. In particolare, poiché le attività vengono completate rapidamente, uno dei nodi del pool potrebbe eseguire tutte le attività del processo. In questo caso, le attività di preparazione e rilascio non esistono per il nodo che non ha eseguito attività.
Visualizzare le attività di rilascio e preparazione dei lavori nel portale di Azure
È possibile usare il portale di Azure per visualizzare le proprietà e le attività dei processi batch, incluse le attività di preparazione e rilascio dei processi. Nella pagina dell'account Batch, selezionare Job nella barra di navigazione a sinistra e quindi selezionare un job. Se si esegue l'applicazione di esempio, navigare alla pagina del job dopo il completamento delle attività, ma prima di eliminare il job e il pool.
È possibile monitorare l'avanzamento e lo stato dei lavori espandendo il conteggio approssimativo delle attività nella pagina Panoramica o Attività del lavoro.
Lo screenshot seguente mostra la pagina JobPrepReleaseSampleJob dopo l'esecuzione dell'applicazione di esempio. Questo job aveva attività di preparazione e rilascio, quindi è possibile selezionare Attività di preparazione o Attività di rilascio nel riquadro di navigazione sinistro per visualizzare le relative proprietà.
Passaggi successivi
- Informazioni sul controllo degli errori per i processi e le attività.
- Informazioni su come usare i pacchetti dell'applicazione per preparare i nodi di calcolo batch per l'esecuzione delle attività.
- Esplorare diversi modi per copiare dati e applicazioni in nodi di calcolo batch.
- Informazioni sull'uso della libreria Azure Batch File Conventions per rendere persistenti i log e altri dati di output di processi e attività.