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 início rápido mostra como começar a usar o Azure Batch executando um aplicativo que utiliza as bibliotecas Azure Batch para Python. O aplicativo Python:
- 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 sistema operacional Ubuntu 22.04 LTS.
- Cria um trabalho e três tarefas a serem executadas em nós. Cada tarefa processa um dos arquivos de entrada usando uma linha de comando do shell bash.
- Exibe os arquivos de saída retornados pelas tarefas.
Depois de concluir este 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: Azure CLI | portal do Azure | Bicep | modelo ARM | Terraform.
Python versão 3.8 ou posterior, que inclui o gerenciador de pacotes pip .
Executar o aplicativo
Para concluir este início rápido, baixe ou clone o aplicativo Python, forneça os valores de sua conta, execute o aplicativo e verifique a saída.
Baixar ou clonar o aplicativo
Baixe ou clone o aplicativo Azure Batch Python 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-python-quickstart.gitAlterne para a pasta batch-python-quickstart/src e instale os pacotes necessários usando
pip.pip install -r requirements.txt
Forneça as informações da sua conta
O aplicativo Python 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 de pesquisa do Azure Search, procure e selecione o nome da sua conta do Batch.
- Na página da sua conta do Batch, selecione Chaves no menu à esquerda.
- Na página Chaves , copie os seguintes valores:
- Conta do Lote
- Ponto de extremidade da conta
- Chave de acesso primária
- Nome da conta de armazenamento
- Key1
No aplicativo Python baixado, edite as seguintes cadeias de caracteres no arquivo config.py para fornecer os valores copiados.
BATCH_ACCOUNT_NAME = '<batch account>'
BATCH_ACCOUNT_KEY = '<primary access key>'
BATCH_ACCOUNT_URL = '<account endpoint>'
STORAGE_ACCOUNT_NAME = '<storage account name>'
STORAGE_ACCOUNT_KEY = '<key1>'
Importante
Não é recomendável expor chaves de conta na fonte do aplicativo para uso em produção. Você deve restringir o acesso às credenciais e fazer referência a elas em seu código usando variáveis ou um arquivo de configuração. É melhor armazenar chaves de conta do Lote e do Armazenamento no Azure Key Vault.
Executar o aplicativo e exibir a saída
Execute o aplicativo para ver o fluxo de trabalho em lote em ação.
python python_quickstart_client.py
O tempo de execução típico é de aproximadamente três minutos. A instalação inicial do pool leva mais tempo.
O aplicativo retorna uma saída semelhante ao seguinte exemplo:
Sample start: 11/26/2012 4:02:54 PM
Uploading file taskdata0.txt to container [input]...
Uploading file taskdata1.txt to container [input]...
Uploading file taskdata2.txt to container [input]...
Creating pool [PythonQuickstartPool]...
Creating job [PythonQuickstartJob]...
Adding 3 tasks to job [PythonQuickstartJob]...
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 o status dos nós, das tarefas e dos trabalhos na página da sua conta Batch 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 output:
Batch processing began with mainframe computers and punch cards. Today it still plays a central role...
Examine o código
Revise o código para entender as etapas na Introdução ao Python no Azure Batch.
Criar clientes de serviço e carregar arquivos de recurso
O aplicativo cria um objeto BlobServiceClient para interagir com a conta de Armazenamento.
blob_service_client = BlobServiceClient( account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/", credential=config.STORAGE_ACCOUNT_KEY )O aplicativo usa a
blob_service_clientreferê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.input_file_paths = [os.path.join(sys.path[0], 'taskdata0.txt'), os.path.join(sys.path[0], 'taskdata1.txt'), os.path.join(sys.path[0], 'taskdata2.txt')] input_files = [ upload_file_to_container(blob_service_client, input_container_name, file_path) for file_path in input_file_paths]O aplicativo cria um objeto BatchServiceClient para criar e gerenciar pools, trabalhos e tarefas na conta do Batch. O cliente Batch usa a autenticação por chave compartilhada. A Batch também suporta a autenticação do Microsoft Entra.
credentials = SharedKeyCredentials(config.BATCH_ACCOUNT_NAME, config.BATCH_ACCOUNT_KEY) batch_client = BatchServiceClient( credentials, batch_url=config.BATCH_ACCOUNT_URL)
Criar um pool de nós de computação
Para criar um pool do Batch, o aplicativo usa a classe PoolAddParameter para definir o número de nós, o tamanho da VM e a configuração do pool. O objeto VirtualMachineConfiguration a seguir especifica uma ImageReference para uma imagem do Azure Marketplace do Ubuntu Server 22.04 LTS. Batch suporta uma ampla gama de imagens do Marketplace do Linux e do Windows Server e também suporta imagens de VM personalizadas.
As POOL_NODE_COUNT e POOL_VM_SIZE são constantes definidas. O aplicativo cria um pool de dois nós de tamanho Standard_DS1_v2. Esse tamanho oferece um bom equilíbrio de desempenho versus custo para este início rápido.
O método pool.add submete o pool ao Batch service.
new_pool = batchmodels.PoolAddParameter(
id=pool_id,
virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
image_reference=batchmodels.ImageReference(
publisher="canonical",
offer="0001-com-ubuntu-server-focal",
sku="22_04-lts",
version="latest"
),
node_agent_sku_id="batch.node.ubuntu 22.04"),
vm_size=config.POOL_VM_SIZE,
target_dedicated_nodes=config.POOL_NODE_COUNT
)
batch_service_client.pool.add(new_pool)
Criar uma tarefa em lote
Uma tarefa em lote é um agrupamento lógico de uma ou mais tarefas. O trabalho inclui configurações comuns às tarefas, como prioridade e o pool onde elas devem ser executadas.
O aplicativo usa a classe JobAddParameter para criar um trabalho no pool. O método job.add adiciona o trabalho à conta do Batch especificada. Inicialmente, o trabalho não tem tarefas.
job = batchmodels.JobAddParameter(
id=job_id,
pool_info=batchmodels.PoolInformation(pool_id=pool_id))
batch_service_client.job.add(job)
Criar tarefas
O Lote fornece várias maneiras para implantar aplicativos e scripts em nós de computação. Este aplicativo cria uma lista de objetos de tarefa usando a classe TaskAddParameter . Cada tarefa processa um arquivo de entrada usando um command_line parâmetro para especificar um aplicativo ou script.
O script a seguir processa os objetos de entrada resource_files executando o comando shell cat bash para exibir os arquivos de texto. Em seguida, o aplicativo usa o método task.add_collection para adicionar cada tarefa ao trabalho, que enfileira as tarefas a serem executadas nos nós de computação.
tasks = []
for idx, input_file in enumerate(resource_input_files):
command = f"/bin/bash -c \"cat {input_file.file_path}\""
tasks.append(batchmodels.TaskAddParameter(
id=f'Task{idx}',
command_line=command,
resource_files=[input_file]
)
)
batch_service_client.task.add_collection(job_id, tasks)
Exibir saída da tarefa
O aplicativo monitora o estado da tarefa para garantir que as tarefas sejam concluídas. Quando cada tarefa é executada com êxito, a saída do comando de tarefa é gravada no arquivo stdout.txt . Em seguida, o aplicativo exibe o arquivo stdout.txt para cada tarefa concluída.
tasks = batch_service_client.task.list(job_id)
for task in tasks:
node_id = batch_service_client.task.get(job_id, task.id).node_info.node_id
print(f"Task: {task.id}")
print(f"Node: {node_id}")
stream = batch_service_client.file.get_from_task(
job_id, task.id, config.STANDARD_OUT_FILE_NAME)
file_text = _read_stream_as_string(
stream,
text_encoding)
if text_encoding is None:
text_encoding = DEFAULT_ENCODING
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = text_encoding)
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = text_encoding)
print("Standard output:")
print(file_text)
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 dos recursos do Lote, 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
Neste início rápido, você executou um aplicativo que usa a API Python 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 do Lote, está pronto para usá-lo com cargas de trabalho mais realistas em maior escala. Para saber mais sobre o Azure Batch e percorrer uma carga de trabalho paralela com um aplicativo do mundo real, vá para o tutorial de Python do Azure Batch.