Trabalhos e tarefas no Azure Batch

No Lote do Azure, uma tarefa representa uma unidade de computação. Um trabalho é uma coleção dessas tarefas. Mais informações sobre trabalhos e tarefas, e como eles são usados em um fluxo de trabalho do Lote do Azure, são descritas abaixo.

Tarefas

Um trabalho é uma coleção de tarefas. Gere de que forma é que a computação é realizada pelas respetivas tarefas nos nós de computação de um conjunto.

Um trabalho especifica o pool no qual o trabalho deve ser executado. Pode criar um novo conjunto para cada trabalho ou utilizar um conjunto para muitos trabalhos. Você pode criar um pool para cada trabalho associado a uma agenda de trabalho ou um pool para todos os trabalhos associados a uma agenda de trabalho.

Prioridade dos trabalhos

Você pode atribuir uma prioridade de trabalho opcional aos trabalhos criados. O serviço Batch usa o valor de prioridade do trabalho para determinar a ordem de agendamento (para todas as tarefas dentro do trabalho) dentro de cada pool.

Para atualizar a prioridade de um trabalho, chame Atualizar as propriedades de uma operação de trabalho (Batch REST) ou modifique o CloudJob.Priority (Batch .NET). Os valores de prioridade variam de -1000 (prioridade mais baixa) a +1000 (prioridade mais alta).

Dentro do mesmo pool, os trabalhos de prioridade mais alta têm precedência de agendamento sobre os trabalhos de prioridade mais baixa. As tarefas em trabalhos de prioridade mais baixa que já estão em execução não serão antecipadas por tarefas em um trabalho de prioridade mais alta. Trabalhos com o mesmo nível de prioridade têm a mesma chance de serem agendados e a ordem de execução da tarefa não é definida.

Um trabalho com um valor de alta prioridade em execução em um pool não afetará o agendamento de trabalhos executados em um pool separado ou em uma conta de lote diferente. A prioridade do trabalho não se aplica aos pools automáticos, que são criados quando o trabalho é enviado.

Restrições de trabalho

Pode utilizar restrições de trabalhos para especificar determinados limites para os trabalhos:

  • Pode definir um tempo máximo cronometrado, para que, se um trabalho for executado durante mais tempo do que o tempo máximo cronometrado especificado, o trabalho e as respetivas tarefas são terminados.
  • Você pode especificar o número máximo de novas tentativas de tarefas como uma restrição, incluindo se uma tarefa é sempre repetida ou nunca repetida. Repetir uma tarefa significa que, se a tarefa falhar, ela será colocada novamente na fila para ser executada novamente.

Tarefas do gestor de tarefas e rescisão automática

A aplicação cliente pode adicionar tarefas a um trabalho ou pode especificar uma tarefa de gestão de trabalhos. As tarefas de gestão de trabalhos contêm as informações necessárias para criar as tarefas necessárias para um trabalho, sendo a tarefa de gestão de trabalhos executada num dos nós de computação do conjunto. A tarefa do gerenciador de tarefas é tratada especificamente pelo Batch; ele é enfileirado assim que o trabalho é criado e é reiniciado se falhar. Uma tarefa do gerenciador de tarefas é necessária para trabalhos criados por uma agenda de trabalhos, porque é a única maneira de definir as tarefas antes que o trabalho seja instanciado.

Por predefinição, os trabalhos permanecem no estado ativo quando todas as tarefas dentro do trabalho estiverem concluídas. Pode alterar este comportamento para que o trabalho seja automaticamente terminado quando todas as tarefas no trabalho estiverem concluídas. Defina a propriedade onAllTasksComplete do trabalho (OnAllTasksComplete em Batch .NET) como terminatejob*' para encerrar automaticamente o trabalho quando todas as suas tarefas estiverem no estado concluído.

O serviço Batch considera um trabalho sem tarefas como tendo todas as suas tarefas concluídas. Por conseguinte, esta opção é frequentemente utilizada com uma tarefa de gestor de trabalhos. Se você quiser usar o encerramento automático de trabalho sem um gerente de trabalho, defina inicialmente a propriedade onAllTasksComplete de um novo trabalho como noactione, em seguida, defina-a como terminatejob*' somente depois de terminar de adicionar tarefas ao trabalho.

Tarefas agendadas

Agendas de tarefas permitem-lhe criar tarefas recorrentes no âmbito do serviço Batch. Uma agenda de tarefas especifica quando executar tarefas e inclui as especificações das tarefas a executar. Você pode especificar a duração da agenda (quanto tempo e quando a agenda está em vigor) e com que frequência os trabalhos são criados durante o período agendado.

Tarefas

As tarefas são uma unidade de computação que estão associadas a um trabalho. São executadas num nó. As tarefas são atribuídas a um nó para execução ou são colocadas na fila até que um nó fique livre. Resumindo, as tarefas executam um ou mais programas ou scripts num nó de computação para fazer os trabalhos necessários.

Quando cria uma tarefa, pode especificar:

  • A linha de comandos da tarefa. Esta é a linha de comandos que executa a aplicação ou script no nó de computação.

    É importante observar que a linha de comando não é executada sob um shell. Por conseguinte,-não é possível tirar partido nativamente das funcionalidades de shell, como a expansão da variável de ambiente expansão (inclui PATH). Para aproveitar esses recursos, você deve invocar o shell na linha de comando, como ao iniciar cmd.exe em nós do Windows ou /bin/sh no Linux:

    cmd /c MyTaskApplication.exe %MY_ENV_VAR%

    /bin/sh -c MyTaskApplication $MY_ENV_VAR

    Se as suas tarefas tiverem de executar uma aplicação ou script que não esteja no PATH ou de referenciar variáveis de ambiente, invoque a shell explicitamente na linha de comandos das tarefas.

  • Os ficheiros de recursos que contêm os dados a serem processados. Estes ficheiros são copiados automaticamente para o nó a partir do Armazenamento de blobs numa conta de Armazenamento do Azure antes de a linha de comando da tarefa ser executada. Para obter mais informações, consulte Iniciar tarefa e Arquivos e diretórios.

  • As variáveis de ambiente de que a aplicação precisa. Para obter mais informações, consulte Configurações de ambiente para tarefas.

  • As restrições sob as quais a computação deve ocorrer. Por exemplo, as restrições incluem o tempo máximo dentro do qual a tarefa pode ser executada, o número máximo de vezes que uma tarefa falhada deve ser repetida e o tempo máximo durante o qual os ficheiros no diretório de trabalho da tarefa são retidos.

  • Pacotes de aplicações para implementar o nó de computação no qual a tarefa está agendada para ser executada. Os pacotes de aplicações fornecem uma implementação simplificada e o controlo de versões das aplicações que as suas tarefas executam. Os pacotes de aplicações ao nível das tarefas são particularmente úteis em ambientes de conjunto partilhado, em que as diferentes tarefas são executadas num conjunto, e o conjunto não é eliminado quando um trabalho estiver concluído. Se o trabalho tiver menos tarefas do que nós no conjunto, os pacotes de aplicações de tarefas podem minimizar a transferência de dados, uma vez que a aplicação é implementada apenas nos nós que executam tarefas.

  • Referência da imagem de contentor no Docker Hub ou num registo privado e as definições adicionais para criar um contentor do Docker no qual a tarefa seja executada no nó. Apenas pode especificar estas informações se o agrupamento tiver uma configuração de contentor.

Nota

O tempo de vida máximo de uma tarefa, desde quando é adicionada ao trabalho até quando é concluída, é de 180 dias. As tarefas concluídas persistem por 7 dias; Os dados de tarefas não concluídas dentro do tempo de vida máximo não estão acessíveis.

Além das tarefas definidas para executar a computação em um nó, várias tarefas especiais também são fornecidas pelo serviço Batch:

Tarefa de início

Ao associar uma tarefa de início a um conjunto, pode preparar o ambiente de funcionamento dos respetivos nós. Por exemplo, pode realizar ações como instalar as aplicações que as suas tarefas vão executar ou começar processos em segundo plano. A tarefa de início é executada sempre que um nó é iniciado, enquanto permanecer no pool. Isso inclui quando o nó é adicionado pela primeira vez ao pool e quando ele é reiniciado ou recriado.

Uma das principais vantagens da tarefa de início é o facto de poder conter todas as informações necessárias para configurar um nó de computação e instalar as aplicações necessárias para a execução de tarefas. Por conseguinte, aumentar o número de nós num conjunto é tão simples como especificar a nova contagem de nó de destino. A tarefa Start fornece as informações necessárias para que o serviço Batch configure os novos nós e os prepare para aceitar tarefas.

Como em qualquer tarefa do Lote do Azure, você pode especificar uma lista de arquivos de recursos no Armazenamento do Azure, além de uma linha de comando a ser executada. O serviço do Batch começa por copiar os ficheiros de recursos para o nó a partir do Armazenamento do Azure e, depois, executa a linha de comandos. Numa tarefa de início de conjunto, a lista de ficheiros contém, geralmente, a aplicação de tarefa e as respetivas dependências.

Contudo, a tarefa de início também pode incluir dados de referência que todas as tarefas em execução no nó de computação podem utilizar. Por exemplo, a linha de comandos de uma tarefa de início pode fazer uma operação robocopy para copiar os ficheiros de aplicação (que foram especificados como ficheiros de recursos e transferidos para o nó) do diretório de trabalho da tarefa de início para a pasta partilhada e, em seguida, executar um MSI ou setup.exe.

Normalmente, você desejará que o serviço em lote aguarde a conclusão da tarefa inicial antes de considerar o nó pronto para receber tarefas. No entanto, você pode configurar isso de forma diferente, conforme necessário.

Se uma tarefa inicial falhar num nó de computação, o estado do nó é atualizado para refletir a falha e não são atribuídas tarefas ao nó. Uma tarefa de início pode falhar se houver um problema ao copiar os respetivos ficheiros de recursos do armazenamento ou se o processo executado pela respetiva linha de comandos devolver um código de saída diferente de zero.

Se adicionar ou atualizar a tarefa de início para um agrupamento existente, tem de reiniciar os nós de computação para que a tarefa de início seja aplicada aos mesmos.

Nota

O Batch limita o tamanho total de uma tarefa de início, o que inclui os ficheiros de recurso e as variáveis de ambiente. Se precisar de reduzir o tamanho de uma tarefa de início, pode usar uma de duas abordagens:

  1. Pode utilizar pacotes de aplicações para distribuir aplicações ou dados para todos os nós do agrupamento do Batch. Para obter mais informações sobre os pacotes de aplicações, veja Implementar aplicações em nós de computação com pacotes de aplicações do Batch.

  2. Pode criar manualmente um arquivo zipado que contenha os seus ficheiros de aplicação. Carregue o arquivo zipado para o Armazenamento do Azure como um blob. Especifique este arquivo como um ficheiro de recursos para a tarefa de início. Antes de executar a linha de comandos da tarefa de início, descomprima o arquivo a partir da linha de comandos.

    Para descomprimir o arquivo, pode utilizar uma ferramenta de arquivos à sua escolha. Tem de incluir a ferramenta utilizada para descomprimir o arquivo como um ficheiro de recursos para a tarefa de início.

Tarefa do gestor de tarefas

Normalmente, você usa uma tarefa do gerenciador de tarefas para controlar e/ou monitorar a execução da tarefa. Por exemplo, as tarefas do gerenciador de tarefas geralmente são usadas para criar e enviar as tarefas para um trabalho, determinar tarefas adicionais a serem executadas e determinar quando o trabalho é concluído.

No entanto, as tarefas de gestor de trabalhos não estão confinadas a estas atividades. É uma tarefa completa que pode executar quaisquer ações necessárias para o trabalho. Por exemplo, uma tarefa de gestor de trabalhos pode transferir um ficheiro especificado como um parâmetro, analisar o conteúdo desse ficheiro e submeter mais tarefas com base nesse conteúdo.

A tarefa de gestor de trabalhos é iniciada antes de todas as outras tarefas. Proporciona as seguintes funcionalidades:

  • É submetida automaticamente como uma tarefa pelo serviço de Batch quando a tarefa é criada.
  • É agendada para execução antes das outras tarefas numa tarefa.
  • O seu nó associado é o último a ser removido de um conjunto quando este está a ser reduzido.
  • A sua terminação pode ser vinculada à terminação de todas as tarefas na tarefa.
  • A tarefa do gestor de trabalhos recebe a prioridade mais elevada quando tem de ser reiniciada. Se um nó inativo não estiver disponível, o serviço Batch pode terminar uma das outras tarefas em execução no conjunto, de modo a criar espaço para a tarefa do gestor de trabalhos ser executada.
  • Uma tarefa do gestor de tarefas numa tarefa não tem prioridade sobre as tarefas de outras tarefas. No âmbito das tarefas, apenas as prioridades ao nível da tarefa são respeitadas.

Tarefas de preparação e de lançamento da tarefa

O Batch fornece tarefas de preparação de trabalho para configuração de execução de pré-trabalho e tarefas de liberação de trabalho para manutenção ou limpeza pós-trabalho.

Uma tarefa de preparação de trabalho é executada em todos os nós de computação agendados para executar tarefas, antes que qualquer uma das outras tarefas de trabalho seja executada. Por exemplo, você pode usar uma tarefa de preparação de trabalho para copiar dados que são compartilhados por todas as tarefas, mas são exclusivos para o trabalho.

Quando um trabalho é concluído, uma tarefa de liberação de trabalho é executada em cada nó do pool que executou pelo menos uma tarefa. Por exemplo, uma tarefa de liberação de trabalho pode excluir dados que foram copiados pela tarefa de preparação de trabalho ou pode compactar e carregar dados de log de diagnóstico.

Quer a tarefa de preparação de trabalhos, quer a de libertação de trabalhos, permitem-lhe especificar uma linha de comandos a ser executada quando a tarefa é invocada. Oferecem funcionalidades como, por exemplo, transferência de ficheiros, execução elevada, variáveis de ambiente personalizadas, duração de execução máxima e tempo de retenção de ficheiros.

Para obter mais informações sobre as tarefas de lançamento e de preparação da tarefa, consulte Executar tarefas de preparação e de conclusão da tarefa em nós de computação do Azure Batch.

Tarefa de várias instâncias

Um tarefa de várias instâncias é uma tarefa que está configurada para ser executada simultaneamente em mais do que um nó de computação. Com tarefas de várias instâncias, você pode habilitar cenários de computação de alto desempenho que exigem um grupo de nós de computação alocados juntos para processar uma única carga de trabalho, como MPI (Message Passing Interface).

Para ver um debate detalhado sobre a execução de trabalhos de MPI no Batch com a biblioteca .NET do Batch, veja Use multi-instance tasks to run Message Passing Interface (MPI) applications in Azure Batch (Utilizar tarefas de várias instâncias para executar aplicações de Interface de Passagem de Mensagens (MPI) no Azure Batch).

Dependências de tarefa

As dependências de tarefas, como o nome indica, permitem-lhe especificar que uma tarefa depende da conclusão de outras tarefas antes de ser executada. Esta funcionalidade fornece suporte para situações em que uma tarefa “a jusante” consome o resultado de uma tarefa “a montante” ou quando uma tarefa a montante efetua alguma inicialização que seja necessária para uma tarefa a jusante.

Para usar esse recurso, você deve primeiro habilitar as dependências de tarefas em seu trabalho em lote. Em seguida, para cada tarefa que dependa de outra (ou de muitas outras), especifique as tarefas das quais essa tarefa depende.

Com as dependências de tarefas, pode configurar cenários como os seguintes:

  • A tarefaB depende da tarefaA (a execução da tarefaB não é iniciada enquanto a tarefaA não tiver sido concluída).
  • A tarefaC depende da tarefaA e da tarefaB.
  • A tarefaD depende de um intervalo de tarefas, como as tarefas 1 à 10, antes de ser executada.

Para obter mais informações, consulte Dependências de tarefas no Lote do Azure e o exemplo de código TaskDependencies no repositório GitHub azure-batch-samples .

Definições de ambiente para tarefas

Cada tarefa executada pelo serviço Batch tem acesso às variáveis de ambiente que define nos nós de computação. Isso inclui variáveis de ambiente definidas pelo serviço Batch e variáveis de ambiente personalizadas que você pode definir para suas tarefas. Os aplicativos e scripts que suas tarefas executam têm acesso a essas variáveis de ambiente durante a execução.

Pode definir variáveis de ambiente personalizadas ao nível da tarefa ou do trabalho ao preencher a propriedade definições de ambiente dessas entidades. Para obter mais informações, consulte Adicionar uma tarefa a uma operação de trabalho (Batch REST) ou as propriedades CloudTask.EnvironmentSettings e CloudJob.CommonEnvironmentSettings em Batch .NET.

O serviço ou aplicação cliente pode obter as variáveis de ambiente de uma tarefa, quer definidas pelo serviço, quer personalizadas, através da operação Get information about a task (REST do Batch) (Obter informações sobre uma tarefa) ou ao aceder à propriedade CloudTask.EnvironmentSettings (.NET do Batch). Os processos em execução num nó de computação podem aceder a estas e outras variáveis de ambiente no nó, por exemplo, com a sintaxe familiar %VARIABLE_NAME% (Windows) ou $VARIABLE_NAME (Linux).

Você pode encontrar uma lista de todas as variáveis de ambiente definidas pelo serviço em Variáveis de ambiente do nó de computação.

Próximos passos