Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este guia de início rápido mostra como começar a usar o Lote do Azure executando um aplicativo C# que usa a API .NET do Lote do Azure. O aplicativo .NET:
- Carrega vários arquivos de dados de entrada em um contêiner de blob do Armazenamento do Microsoft Azure a ser usado para processamento de tarefas do Lote.
- Cria um pool de duas VMs (máquinas virtuais) ou nós de computação executando o Windows Server.
- Cria um trabalho que executa tarefas nos nós para processar cada arquivo de entrada usando uma linha de comando do Windows.
- Exibe os arquivos de saída retornados pelas tarefas.
Depois de concluir este guia de início rápido, você entenderá os principais conceitos do serviço Lote e estará pronto para experimentá-lo com cargas de trabalho mais realistas em maior escala.
Pré-requisitos
Uma conta do Azure com uma assinatura ativa. Se você não tiver, crie uma conta gratuita.
Uma conta do Batch com uma conta de Armazenamento do Azure vinculada. Você pode criar as contas usando qualquer um dos seguintes métodos: CLI do Azure | portal do Azure | Bicep | modelo ARM | Terraform.
Visual Studio 2019 ou posterior, ou .NET 6.0 ou posterior, para Linux ou Windows.
Executar o aplicativo
Para concluir este início rápido, baixe ou clone o aplicativo, forneça os valores da sua conta, compile e execute o aplicativo e verifique a saída.
Baixar ou clonar o aplicativo
Baixe ou clone o aplicativo Lote do Azure .NET Quickstart do GitHub. Use o seguinte comando para clonar o repositório de aplicativos com um cliente Git:
git clone https://github.com/Azure-Samples/batch-dotnet-quickstart.git
Forneça as informações da sua conta
O aplicativo precisa usar seus nomes de conta do Lote e do Armazenamento, valores de chave de conta e ponto de extremidade da conta do Lote. Você pode obter essas informações no portal do Azure, nas APIs do Azure ou nas ferramentas de linha de comando.
Para obter informações da sua conta no portal do Azure:
- Na barra do Azure Search, pesquise e selecione o nome da conta do Lote.
- Conta do Lote
- Ponto de extremidade da conta
- nome da conta de armazenamento
- ID da assinatura
- Nome do grupo de recursos
Navegue até a pasta batch-dotnet-quickstart baixada e edite as credenciais no Program.cs para fornecer os valores copiados.
// Batch account credentials
const string BatchAccountName = "<batch account>";
const string BatchAccountUrl = "<account endpoint>";
// Azure Resource Manager credentials for the Batch account
const string SubscriptionId = "<subscription ID>";
const string ResourceGroupName = "<resource group name>";
// Storage account credentials
const string StorageAccountName = "<storage account name>";
Compilar e executar o aplicativo e exibir a saída
Para ver o fluxo de trabalho em lote em ação, compile e execute o aplicativo no Visual Studio. Você também pode usar a linha de comando dotnet build e os comandos dotnet run.
No Visual Studio:
Abra o arquivo BatchDotNetQuickstart.sln , clique com o botão direito do mouse na solução no Gerenciador de Soluções e selecione Compilar. Se solicitado, use o Gerenciador de Pacotes NuGet para atualizar ou restaurar pacotes NuGet.
Depois que o build for concluído, selecione BatchDotNetQuickstart na barra de menus superior para executar o aplicativo.
O tempo de execução típico com a configuração padrão é de aproximadamente cinco minutos. A instalação inicial do pool leva mais tempo. Para executar novamente o trabalho, exclua o trabalho da execução anterior, mas não exclua o pool. Em um pool pré-configurado, o trabalho é concluído em alguns segundos.
O aplicativo retorna uma saída semelhante ao seguinte exemplo:
Sample start: 11/16/2022 4:02:54 PM
Container [input] created.
Uploading file taskdata0.txt to container [input]...
Uploading file taskdata1.txt to container [input]...
Uploading file taskdata2.txt to container [input]...
Creating pool [DotNetQuickstartPool]...
Creating job [DotNetQuickstartJob]...
Adding 3 tasks to job [DotNetQuickstartJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
Há uma pausa em Monitoring all tasks for 'Completed' state, timeout in 00:30:00... enquanto os nós de computação do pool são iniciados. À medida que as tarefas são criadas, o Lote as enfileira para serem executadas no pool. Assim que o primeiro nó de computação estiver disponível, a primeira tarefa será executada no nó. Você pode monitorar status de nó, tarefa e trabalho na página da conta do Lote no portal do Azure.
Após a conclusão de cada tarefa, você verá uma saída semelhante ao seguinte exemplo:
Printing task output.
Task: Task0
Node: tvm-2850684224_3-20171205t000401z
Standard out:
Batch processing began with mainframe computers and punch cards. Today it still plays a central role...
stderr:
...
Examine o código
Revise o código para entender as etapas no Início Rápido do Lote do Azure .NET.
Criar clientes de serviço e carregar arquivos de recurso
Para interagir com a conta de armazenamento, o aplicativo usa a biblioteca de clientes de Blobs de Armazenamento do Azure para .NET para criar um BlobServiceClient.
string blobUri = "https://" + storageAccountName + ".blob.core.windows.net"; var blobServiceClient = new BlobServiceClient(new Uri(blobUri), new DefaultAzureCredential()); return blobServiceClient;O aplicativo usa a
blobServiceClientreferência para criar um contêiner na conta de armazenamento e carregar arquivos de dados no contêiner. Os arquivos no armazenamento são definidos como objetos ResourceFile do Lote que ele pode baixar mais tarde para os nós de computação.List<string> inputFilePaths = new() { "taskdata0.txt", "taskdata1.txt", "taskdata2.txt" }; var inputFiles = new List<ResourceFile>(); foreach (var filePath in inputFilePaths) { inputFiles.Add(UploadFileToContainer(containerClient, inputContainerName, filePath)); }O aplicativo cria um objeto BatchClient da biblioteca Azure.Compute.Batch para criar e gerenciar trabalhos em lote e tarefas. O cliente do Batch usa a autenticação do Microsoft Entra.
BatchClient batchClient = new BatchClient(new Uri(BatchAccountUrl), new DefaultAzureCredential()); ...O aplicativo também usa a biblioteca Azure.ResourceManager.Batch para gerenciar a conta do Batch e seus pools. Cria um ArmClient e obtém uma referência BatchAccountResource para a conta do Lote usando a ID da assinatura, o nome do grupo de recursos e o nome da conta do Lote.
ArmClient armClient = new ArmClient(new DefaultAzureCredential()); ResourceIdentifier batchAccountIdentifier = BatchAccountResource.CreateResourceIdentifier( SubscriptionId, ResourceGroupName, BatchAccountName); BatchAccountResource batchAccount = armClient.GetBatchAccountResource(batchAccountIdentifier);
Criar um pool de nós de computação
Para criar um pool do Batch, o aplicativo usa o método BatchAccountPoolCollection.CreateOrUpdateAsync para definir o número de nós, o tamanho da VM e a configuração do pool. O objeto BatchVmConfiguration a seguir especifica um objeto BatchImageReference para uma imagem do Marketplace Windows Server. O Lote oferece suporte a uma ampla variedade de imagens do sistema operacional do Windows Server e Linux Marketplace e também oferece suporte a imagens de VM personalizadas.
O PoolNodeCount e o tamanho da VM PoolVMSize são constantes definidas. O aplicativo cria um pool de dois nós Standard_A1_v2. Esse tamanho oferece um bom equilíbrio de desempenho versus custo para este início rápido.
BatchImageReference imageReference = new BatchImageReference()
{
Publisher = "MicrosoftWindowsServer",
Offer = "WindowsServer",
Sku = "2016-datacenter-smalldisk",
Version = "latest"
};
BatchVmConfiguration vmConfiguration = new BatchVmConfiguration(
imageReference: imageReference,
nodeAgentSkuId: "batch.node.windows amd64");
BatchAccountPoolData poolData = new BatchAccountPoolData()
{
VmSize = PoolVMSize,
DeploymentConfiguration = new BatchDeploymentConfiguration() { VmConfiguration = vmConfiguration },
ScaleSettings = new BatchAccountPoolScaleSettings()
{
FixedScale = new BatchAccountFixedScaleSettings() { TargetDedicatedNodes = PoolNodeCount }
}
};
await batchAccount.GetBatchAccountPools().CreateOrUpdateAsync(WaitUntil.Completed, PoolId, poolData);
Criar um trabalho do Lote
Um processo em lote é um agrupamento lógico de uma ou mais tarefas. O trabalho inclui configurações comuns às tarefas, como prioridade e o pool para executar tarefas.
O aplicativo usa BatchClient.CreateJobAsync para criar uma tarefa no seu pool. Inicialmente, o trabalho não tem tarefas.
BatchJobCreateOptions job = new BatchJobCreateOptions(JobId, new BatchPoolInfo() { PoolId = PoolId });
await batchClient.CreateJobAsync(job);
Criar tarefas
Batch fornece várias maneiras de implantar aplicativos e scripts em nós de computação. Este aplicativo cria uma lista de objetos de entrada BatchTaskCreateOptionsResourceFile. Cada tarefa processa um arquivo de entrada usando uma propriedade CommandLine . Linha de comando do Batch é onde você especifica seu aplicativo ou script.
A linha de comando no código a seguir executa o comando do Windows type para exibir os arquivos de entrada. Em seguida, o aplicativo adiciona as tarefas ao trabalho com BatchClient.CreateTasksAsync, que enfileira as tarefas a serem executadas nos nós de computação.
for (int i = 0; i < inputFiles.Count; i++)
{
string taskId = String.Format("Task{0}", i);
string inputFilename = inputFiles[i].FilePath;
string taskCommandLine = String.Format("cmd /c type {0}", inputFilename);
BatchTaskCreateOptions task = new BatchTaskCreateOptions(taskId, taskCommandLine)
{
ResourceFiles = { inputFiles[i] }
};
tasks.Add(task);
}
await batchClient.CreateTasksAsync(JobId, tasks);
Exibir saída da tarefa
O aplicativo aguarda a conclusão das tarefas. Quando cada tarefa é executada com êxito, sua saída é registrada em stdout.txt. Em seguida, o aplicativo usa a propriedade BatchTask.NodeInfo para exibir o arquivo stdout.txt para cada tarefa concluída.
await foreach (BatchTask task in batchClient.GetTasksAsync(JobId))
{
string nodeId = task.NodeInfo?.NodeId ?? "<unknown>";
Console.WriteLine("Task: {0}", task.Id);
Console.WriteLine("Node: {0}", nodeId);
Console.WriteLine("Standard out:");
BinaryData stdout = await batchClient.GetTaskFileAsync(JobId, task.Id, "stdout.txt");
Console.WriteLine(stdout.ToString());
}
Limpar os recursos
O aplicativo exclui automaticamente o contêiner de armazenamento que cria e oferece a opção para excluir o pool e o trabalho do Lote. Pools e nós incorrem em encargos enquanto os nós estão em execução, mesmo que não estejam executando trabalhos. Se você não precisar mais do pool, exclua-o.
Quando você não precisar mais da conta do Lote e da conta de armazenamento, poderá excluir o grupo de recursos que os contém. No portal do Azure, selecione Excluir grupo de recursos na parte superior da página do grupo de recursos. Na tela Excluir um grupo de recursos , insira o nome do grupo de recursos e selecione Excluir.
Próximas etapas
Nesse início rápido, você executou um aplicativo que usa a API .NET do Lote para criar um pool, nós, trabalho e tarefas do Lote. O trabalho carregou arquivos de recurso em um contêiner de armazenamento, executou tarefas nos nós e exibiu a saída dos nós.
Agora que você conhece os conceitos principais do serviço Batch, está pronto para usá-lo com cargas de trabalho mais realistas e em maior escala. Para saber mais sobre o Lote do Azure e explorar uma carga de trabalho paralela com uma aplicação prática, continue para o tutorial do Lote do Azure para .NET.