Tarefas de preparação e lançamento de tarefas em nós de computação do Batch

Muitas vezes, uma tarefa de Azure Batch requer a configuração antes de as tarefas serem executadas e a manutenção pós-tarefa quando as tarefas estão concluídas. Por exemplo, poderá ter de transferir dados de entrada de tarefas comuns para os nós de computação ou carregar os dados de saída da tarefa para o Armazenamento do Microsoft Azure após a conclusão da tarefa. Pode utilizar tarefas de preparação de trabalhos e de lançamento de tarefas para estas operações.

  • Uma tarefa de preparação de trabalhos é executada antes das tarefas de uma tarefa, em todos os nós de computação agendados para executar, pelo menos, uma tarefa.
  • Uma tarefa de lançamento de tarefas é executada assim que a tarefa estiver concluída, em cada nó no conjunto que executou uma tarefa de preparação de trabalhos.

Tal como acontece com outras tarefas do Batch, pode especificar uma linha de comandos para invocar quando uma tarefa de preparação ou lançamento de trabalhos é executada. As tarefas de preparação e lançamento de trabalhos oferecem funcionalidades familiares de tarefas do Batch, tais como:

  • Transferência do ficheiro de recursos.
  • Execução elevada.
  • Variáveis de ambiente personalizadas.
  • Duração máxima da execução.
  • Contagem de repetições.
  • Tempo de retenção de ficheiros.

Este artigo mostra como utilizar as classes JobPreparationTask e JobReleaseTask na biblioteca .NET do Batch .

Dica

As tarefas de preparação e lançamento de trabalhos são especialmente úteis em ambientes de conjuntos partilhados , nos quais um conjunto de nós de computação persiste entre execuções de trabalhos e é utilizado por muitas tarefas.

Casos de utilização para tarefas de preparação e lançamento de trabalhos

As tarefas de preparação de trabalhos e de lançamento de trabalhos são uma boa opção para os seguintes cenários:

  • Transfira dados de tarefas comuns. Muitas vezes, as tarefas em lote requerem um conjunto comum de dados como entrada para as tarefas de uma tarefa. Pode utilizar uma tarefa de preparação de trabalhos para transferir estes dados para cada nó antes da execução das outras tarefas da tarefa.

    Por exemplo, nos cálculos de análise de risco diários, os dados de mercado são específicos do trabalho, mas comuns a todas as tarefas na tarefa. Pode utilizar uma tarefa de preparação de trabalhos para transferir estes dados de mercado, que muitas vezes são vários gigabytes de tamanho, para cada nó de computação para que qualquer tarefa executada no nó possa utilizá-la.

  • Eliminar tarefa e saída da tarefa. Num ambiente de conjunto partilhado, em que os nós de computação de um conjunto não são desativados entre tarefas, poderá ter de eliminar os dados da tarefa entre execuções. Por exemplo, poderá ter de poupar espaço em disco nos nós ou satisfazer as políticas de segurança da sua organização. Pode utilizar uma tarefa de lançamento de tarefas para eliminar dados que uma tarefa de preparação de tarefas transferiu ou que a execução da tarefa foi gerada.

  • Reter registos. Poderá querer manter uma cópia dos ficheiros de registo que as suas tarefas geram ou ficheiros de informação de falha de sistema gerados por aplicações falhadas. Pode utilizar uma tarefa de lançamento de tarefas para comprimir e carregar estes dados para uma conta de Armazenamento do Azure.

Tarefa de preparação de trabalhos

Antes de executar tarefas de trabalho, o Batch executa a tarefa de preparação da tarefa em cada nó de computação agendado para executar uma tarefa. Por predefinição, o Batch aguarda que a tarefa de preparação da tarefa seja concluída antes de executar tarefas agendadas, mas pode configurá-la para não esperar.

Se o nó for reiniciado, a tarefa de preparação da tarefa é executada novamente, mas também pode desativar este comportamento. Se tiver um trabalho com uma tarefa de preparação de trabalhos e uma tarefa de gestor de tarefas, a tarefa de preparação do trabalho é executada antes da tarefa do gestor de tarefas e antes de todas as outras tarefas. A tarefa de preparação da tarefa é sempre executada primeiro.

A tarefa de preparação da tarefa é executada apenas em nós agendados para executar uma tarefa. Este comportamento impede execuções desnecessárias em nós aos quais não são atribuídas tarefas. Podem não ser atribuídas tarefas aos nós quando o número de tarefas é menor do que o número de nós no conjunto. Este comportamento também se aplica quando a execução simultânea de tarefas está ativada, o que deixa alguns nós inativos se a contagem de tarefas for inferior ao total de tarefas simultâneas possíveis.

Nota

JobPreparationTask difere de CloudPool.StartTask no que é executado no início de cada tarefa, ao passo que JobPreparationTaskStartTask é executado apenas quando um nó de computação associa um conjunto ou reinicia pela primeira vez.

Tarefa de lançamento da tarefa

Depois de marcar uma tarefa como concluída, a tarefa de lançamento da tarefa é executada em cada nó no conjunto que executou uma tarefa de preparação de trabalhos. Marca uma tarefa como concluída através da emissão de um pedido de fim. Este pedido define o estado da tarefa como terminando, termina todas as tarefas ativas ou em execução associadas à tarefa e executa a tarefa de lançamento da tarefa. Em seguida, a tarefa passa para o estado concluído .

Nota

A eliminação de uma tarefa também executa a tarefa de lançamento da tarefa. No entanto, se uma tarefa já estiver terminada, a tarefa de lançamento não será executada uma segunda vez se a tarefa for eliminada posteriormente.

As tarefas de lançamento de tarefas podem ser executadas durante um máximo de 15 minutos antes de o serviço Batch as terminar. Para obter mais informações, veja a documentação de referência da API REST.

Tarefas de preparação e lançamento de tarefas com o Batch .NET

Para executar uma tarefa de preparação de tarefas, atribua um objeto JobPreparationTask à propriedade CloudJob.JobPreparationTask da sua tarefa. Da mesma forma, para utilizar uma tarefa de lançamento de tarefas, inicialize uma JobReleaseTask e atribua-a ao CloudJob.JobReleaseTask da sua tarefa.

No fragmento de código seguinte, myBatchClient é uma instância do BatchClient e myPool é um conjunto existente na conta do 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();

A tarefa de lançamento da tarefa é executada quando uma tarefa é terminada ou eliminada. Termina uma tarefa com JobOperations.TerminateJobAsync e elimina uma tarefa com JobOperations.DeleteJobAsync. Normalmente, termina ou elimina uma tarefa quando as tarefas estão concluídas ou quando é atingido um tempo limite definido.

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

Exemplo de código no GitHub

Para ver as tarefas de preparação e lançamento de trabalhos em ação, crie e execute o projeto de exemplo JobPrepRelease a partir do GitHub. Esta aplicação de consola executa as seguintes ações:

  1. Cria um conjunto com dois nós.
  2. Cria uma tarefa com preparação, lançamento e tarefas padrão.
  3. Executa a tarefa de preparação da tarefa, que primeiro escreve o ID do nó num ficheiro de texto no diretório partilhado de um nó.
  4. Executa uma tarefa em cada nó que escreve o respetivo ID de tarefa no mesmo ficheiro de texto.
  5. Assim que todas as tarefas estiverem concluídas ou o tempo limite for atingido, imprime o conteúdo do ficheiro de texto de cada nó na consola do .
  6. Executa a tarefa de lançamento da tarefa para eliminar o ficheiro do nó quando a tarefa estiver concluída.
  7. Imprime os códigos de saída das tarefas de preparação e libertação da tarefa para cada nó em que foram executados.
  8. Interrompe a execução para permitir a confirmação da eliminação do trabalho e/ou do conjunto.

O resultado da aplicação de exemplo é semelhante ao seguinte exemplo:

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

As diferentes horas de criação e início de nós num novo conjunto significam que alguns nós estão prontos para tarefas antes de outros, pelo que poderá ver resultados diferentes. Especificamente, uma vez que as tarefas são concluídas rapidamente, um dos nós do conjunto pode executar todas as tarefas da tarefa. Se isto ocorrer, as tarefas de preparação e versão da tarefa não existem para o nó que não executou nenhuma tarefa.

Ver tarefas de preparação e lançamento de tarefas no portal do Azure

Pode utilizar o portal do Azure para ver as propriedades e tarefas do trabalho do Batch, incluindo tarefas de preparação e lançamento de trabalhos. Na página da sua conta do Batch, selecione Tarefas no painel de navegação esquerdo e, em seguida, selecione uma tarefa. Se executar o exemplo de aplicação, navegue para a página da tarefa após a conclusão das tarefas, mas antes de eliminar o trabalho e o conjunto.

Pode monitorizar o progresso e o estado da tarefa ao expandir Contagem aproximada de tarefas na página Descrição Geral da tarefa ou Tarefas .

Captura de ecrã a mostrar o progresso da tarefa na portal do Azure.

A seguinte captura de ecrã mostra a página JobPrepReleaseSampleJob após a execução da aplicação de exemplo. Esta tarefa tinha tarefas de preparação e lançamento, pelo que pode selecionar Tarefas de preparação ou Tarefas de lançamento no painel de navegação esquerdo para ver as respetivas propriedades.

Captura de ecrã a mostrar as propriedades da tarefa de lançamento da tarefa no portal do Azure.

Passos seguintes