Trabalhos e tarefas no Azure Batch

No Azure Batch, uma tarefa representa uma unidade de computação. Uma tarefa é uma coleção destas tarefas. Mais informações sobre trabalhos e tarefas, e como são utilizados num fluxo de trabalho Azure Batch, é descrito 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.

Uma tarefa especifica o conjunto no qual o trabalho deve ser executado. Pode criar um novo conjunto para cada trabalho ou utilizar um conjunto para muitos trabalhos. Pode criar um conjunto para cada tarefa associada a um agendamento de tarefas ou um conjunto para todas as tarefas associadas a um agendamento de tarefas.

Prioridade dos trabalhos

Pode atribuir uma prioridade de tarefa opcional às tarefas que criar. O serviço Batch utiliza o valor de prioridade da tarefa para determinar a ordem de agendamento (para todas as tarefas dentro da tarefa) em cada conjunto.

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

No mesmo conjunto, as tarefas de prioridade mais alta têm precedência de agendamento sobre tarefas de prioridade inferior. As tarefas em tarefas de prioridade inferior que já estão em execução não serão impedidas por tarefas numa tarefa de prioridade mais alta. As tarefas com o mesmo nível de prioridade têm uma probabilidade igual de serem agendadas e a ordenação da execução da tarefa não é definida.

Uma tarefa com um valor de alta prioridade em execução num conjunto não afetará o agendamento de tarefas em execução num conjunto separado ou numa conta do Batch diferente. A prioridade da tarefa não se aplica aos conjuntos automáticos, que são criados quando a tarefa é submetida.

Restrições de tarefas

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.
  • Pode especificar o número máximo de repetições de tarefas como uma restrição, incluindo se uma tarefa é sempre repetida ou nunca repetida. Repetir uma tarefa significa que, se a tarefa falhar, será colocada novamente em fila para ser executada novamente.

Tarefas do gestor de tarefas e terminaçã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 gestor de tarefas é processada especificamente pelo Batch; é em fila assim que a tarefa é criada e é reiniciada se falhar. É necessária uma tarefa de gestor de tarefas para tarefas criadas por um agendamento de tarefas, porque é a única forma de definir as tarefas antes de a tarefa ser instanciada.

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 da tarefa (OnAllTasksComplete no Batch .NET) como terminatejob*' para terminar automaticamente a tarefa quando todas as tarefas estiverem no estado concluído.

O serviço Batch considera que uma tarefa sem tarefas tem todas as tarefas concluídas. Por conseguinte, esta opção é frequentemente utilizada com uma tarefa de gestor de trabalhos. Se quiser utilizar a terminação automática de tarefas sem um gestor de tarefas, deve inicialmente definir a propriedade onAllTasksComplete de uma nova tarefa como noactione, em seguida, defini-la como terminatejob*' apenas depois de terminar de adicionar tarefas à tarefa.

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. Pode especificar a duração da agenda (quanto tempo e quando a agenda está em vigor) e a frequência com que as tarefas são criadas 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 ter em atenção que a linha de comandos não é executada numa 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 tirar partido destas funcionalidades, tem de invocar a shell na linha de comandos, 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 Ficheiros e diretórios.

  • As variáveis de ambiente de que a aplicação precisa. Para obter mais informações, veja Definiçõ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

A duração máxima de uma tarefa, desde quando é adicionada à tarefa até à conclusão, é de 180 dias. As tarefas concluídas persistem durante 7 dias; os dados das tarefas não concluídas durante a duração máxima não estão acessíveis.

Além das tarefas que define para realizar a computação num nó, são também fornecidas várias tarefas especiais 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, desde que permaneça no conjunto. Isto inclui quando o nó é adicionado pela primeira vez ao conjunto e quando é 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 de início fornece as informações necessárias para que o serviço Batch configure os novos nós e os prepare para aceitar tarefas.

À semelhança de qualquer tarefa do Batch, pode especificar uma lista de ficheiros de recursos no Armazenamento do Azure, além de uma linha de comandos para 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 executar uma robocopy operação para copiar ficheiros de aplicação (que foram especificados como ficheiros de recursos e transferidos para o nó) do diretório de trabalho da tarefa inicial para a pasta partilhada e, em seguida, executar um MSI ou setup.exe.

Normalmente, vai querer que o serviço Batch aguarde pela conclusão da tarefa de início antes de considerar que o nó está pronto para ser atribuído às tarefas. No entanto, pode configurar isto 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, utiliza uma tarefa do gestor de tarefas para controlar e/ou monitorizar a execução de trabalhos. Por exemplo, as tarefas do gestor de tarefas são frequentemente utilizadas para criar e submeter as tarefas de um trabalho, determinar tarefas adicionais a executar e determinar quando o trabalho está concluído.

No entanto, as tarefas de gestor de trabalhos não estão confinadas a estas atividades. É uma tarefa completa que pode efetuar quaisquer ações necessárias para a tarefa. 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 trabalhos para a configuração da execução pré-tarefa e tarefas de lançamento de tarefas para manutenção ou limpeza pós-trabalho.

Uma tarefa de preparação de tarefas é executada em todos os nós de computação agendados para executar tarefas, antes de qualquer uma das outras tarefas serem executadas. Por exemplo, pode utilizar uma tarefa de preparação de trabalhos para copiar dados que são partilhados por todas as tarefas, mas que são exclusivos da tarefa.

Quando uma tarefa estiver concluída, é executada uma tarefa de lançamento de tarefas em cada nó do conjunto que executou, pelo menos, uma tarefa. Por exemplo, uma tarefa de lançamento de tarefas pode eliminar dados que foram copiados pela tarefa de preparação da tarefa ou pode comprimir e carregar dados de registo 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 as tarefas de várias instâncias, pode ativar cenários de computação de alto desempenho que requerem um grupo de nós de computação que são alocados em conjunto para processar uma única carga de trabalho, como a Interface de Passagem de Mensagens (MPI).

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 tarefas

As dependências de tarefas, como o nome indica, permitem-lhe especificar que uma tarefa depende da conclusão de outras tarefas antes da respetiva execução. 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 utilizar esta funcionalidade, primeiro tem de ativar as dependências de tarefas no seu trabalho do Batch. 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 tarefa A (a tarefaB não iniciará a execução até que a tarefaA esteja concluída).
  • taskC depende da tarefaA e da tarefaB.
  • taskD depende de um intervalo de tarefas, como tarefas 1 a 10, antes de ser executada.

Para obter mais detalhes, veja Dependências de tarefas no Azure Batch e o exemplo de código TaskDependencies no repositório do 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. Isto inclui variáveis de ambiente definidas pelo serviço Batch e variáveis de ambiente personalizadas que pode definir para as suas tarefas. As aplicações e scripts que as suas tarefas executam têm acesso a estas 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 detalhes, veja as propriedades Adicionar uma tarefa a uma tarefa (REST do Batch) ou CloudTask.EnvironmentSettings e CloudJob.CommonEnvironmentSettings no 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).

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

Passos seguintes