Attività di preparazione e rilascio dei processi nei nodi di calcolo Batch

Un processo 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 attività comuni nei nodi di calcolo o caricare i dati di output delle attività in Archiviazione di Azure dopo il completamento del processo. È possibile usare le attività di preparazione e rilascio dei processi 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 eseguire 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à 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à di attività Batch familiari, ad esempio:

  • Download del file di risorse.
  • Esecuzione con privilegi elevati.
  • Variabili di ambiente personalizzate.
  • Durata massima dell'esecuzione.
  • Conteggio dei tentativi.
  • 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 processi

Le attività di preparazione e rilascio dei processi sono adatte per gli scenari seguenti:

  • Scaricare i dati delle attività comuni. I processi batch richiedono spesso 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 lavoro ma comuni a tutte le attività nel processo. È possibile usare un'attività di preparazione del processo per scaricare questi dati di mercato, che spesso sono diversi gigabyte di dimensioni, in ogni nodo di calcolo in modo che qualsiasi attività in esecuzione nel nodo possa usarla.

  • Eliminare l'output del processo e dell'attività. In un ambiente di pool condiviso, in cui i nodi di calcolo di un pool non vengono rimossi tra 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 processo per eliminare i dati scaricati da un'attività di preparazione del processo o l'esecuzione dell'attività generata.

  • Conservare i log. È possibile mantenere una copia dei file di log generati o di arresto anomalo dei file di dump generati da applicazioni non riuscite. È 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 processo

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 le attività di processo pianificate, ma è possibile configurarla non in attesa.

Se il nodo viene riavviato, l'attività di preparazione del processo viene eseguita nuovamente, ma è anche possibile disabilitare questo comportamento. Se si ha un processo con un'attività di preparazione del processo e un'attività di gestione processi, l'attività di preparazione del processo viene eseguita prima dell'attività di gestione processi e prima di tutte le altre attività. L'attività di preparazione del processo viene sempre eseguita per prima.

L'attività di preparazione del processo viene eseguita solo nei nodi pianificati per eseguire un'attività. Questo comportamento impedisce l'esecuzione non necessaria nei nodi che non vengono 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 l'esecuzione di attività simultanee è abilitata, che lascia inattive alcuni nodi se il numero di attività è inferiore al totale delle attività simultanee possibili.

Nota

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 aggiunge prima un pool o riavvia.

attività di rilascio del processo

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. Un processo viene contrassegnato come completato generando una richiesta di interruzione. Questa richiesta imposta lo stato del processo per terminare, termina qualsiasi attività attiva o in esecuzione associata al processo ed esegue l'attività di rilascio del processo. Il processo passa quindi allo stato completato .

Nota

L'eliminazione di un processo esegue anche l'attività di rilascio del processo. Tuttavia, se un processo è già terminato, l'attività di rilascio non viene eseguita una seconda volta se il processo viene eliminato in seguito.

Le attività di rilascio dei processi possono essere eseguite per un massimo di 15 minuti prima che il servizio Batch li termina. 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 usare 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 rilascio del processo viene eseguita quando un processo viene terminato o eliminato. Si termina 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à oppure 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:

  1. Crea un pool con due nodi.
  2. Crea un processo con attività di preparazione e rilascio di processi e attività standard.
  3. Esegue l'attività di preparazione del processo, che scrive prima l'ID nodo in un file di testo nella directory condivisa di un nodo.
  4. Esegue un'attività in ogni nodo che scrive il relativo ID attività nello stesso file di testo.
  5. Dopo aver completato tutte le attività o il timeout viene raggiunto, stampa il contenuto del file di testo di ogni nodo nella console.
  6. Esegue l'attività di rilascio del processo per eliminare il file dal nodo al termine del processo.
  7. Stampa i codici di uscita delle attività di preparazione e rilascio del processo per ogni nodo eseguito.
  8. Sospende l'esecuzione per consentire la conferma dell'eliminazione dei processi 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...

Nota

L'intervallo di creazione e avvio dei nodi in un nuovo pool significa 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 del processo non esistono per il nodo che non ha eseguito attività.

Visualizzare le attività di preparazione e rilascio dei processi nell'portale di Azure

È possibile usare la portale di Azure per visualizzare le proprietà e le attività dei processi batch, tra cui la preparazione e la versione dei processi. Nella pagina Account Batch selezionare Processi dalla navigazione a sinistra e quindi selezionare un processo. Se si esegue l'applicazione di esempio, passare alla pagina del processo dopo il completamento delle attività, ma prima di eliminare il processo e il pool.

È possibile monitorare lo stato e lo stato del processo espandendo il conteggio delle attività approssimative nella pagina Panoramica o attività del processo.

Screenshot che mostra lo stato dell'attività del processo nella portale di Azure.

Lo screenshot seguente mostra la pagina JobPrepReleaseSampleJob dopo l'esecuzione dell'applicazione di esempio. Questo processo aveva attività di preparazione e rilascio, quindi è possibile selezionare Attività di preparazione o Rilascio nella navigazione a sinistra per visualizzare le relative proprietà.

Screenshot che mostra le proprietà dell'attività di rilascio del processo nell'portale di Azure.

Passaggi successivi