快速入门:使用 Azure CLI 创建 Batch 帐户并运行作业

本快速入门介绍如何通过使用 Azure CLI 命令与脚本创建和管理 Batch 资源,来开始使用 Azure Batch。 请创建一个包含虚拟机或计算节点池的 Batch 帐户。 然后创建并运行一个作业,其中包含在池节点上运行的任务。

完成本快速入门后,你将了解 Batch 服务的关键概念,并准备好将 Batch 用于更现实、更大规模的工作负载。

如果没有 Azure 订阅,可在开始前创建一个试用帐户

先决条件

可以使用本地 Azure CLI。

  • 如果需要,请安装 Azure CLI 来运行 CLI 参考命令。

  • 本地 Azure CLI,请了解如何安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI

    • 通过使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展

    • 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade

  • 本快速入门需要 Azure CLI 版本 2.0.20 或更高版本。

创建资源组

运行以下 az group create 命令,在 chinaeast2 Azure 区域中创建名为 qsBatch 的 Azure 资源组。 资源组是一个逻辑容器,用于保存本快速入门的 Azure 资源。

az group create \
    --name qsBatch \
    --location chinaeast2

创建存储帐户

使用 az storage account create 命令创建一个 Azure 存储帐户来链接到 Batch 帐户。 尽管本快速入门不使用存储帐户,但大多数实际 Batch 工作负载都使用链接的存储帐户来部署应用程序并存储输入和输出数据。

运行以下命令,在资源组中创建名为 mybatchstorage 的 Standard_LRS SKU 存储帐户:

az storage account create \
    --resource-group qsBatch \
    --name mybatchstorage \
    --location chinaeast2 \
    --sku Standard_LRS

创建批处理帐户

运行以下 az batch account create 命令,在资源组中创建名为 mybatchaccount 的 Batch 帐户并将其与 mybatchstorage 存储帐户链接起来。

az batch account create \
    --name mybatchaccount \
    --storage-account mybatchstorage \
    --resource-group qsBatch \
    --location chinaeast2

运行 az batch account login 命令,登录到新的 Batch 帐户。 使用 Batch 对帐户进行身份验证后,此会话中的后续 az batch 命令将使用此帐户上下文。

az batch account login \
    --name mybatchaccount \
    --resource-group qsBatch \
    --shared-key-auth

创建计算节点池

运行 az batch pool create 命令,在 Batch 帐户中创建 Linux 计算节点池。 以下示例创建一个名为 myPool 的池,其中包含两个运行 Ubuntu 20.04 LTS OS 的 Standard_A1_v2 大小 VM。 就此快速入门示例来说,此节点大小在性能和成本之间达成了很好的平衡。

az batch pool create \
    --id myPool \
    --image canonical:0001-com-ubuntu-server-focal:20_04-lts \
    --node-agent-sku-id "batch.node.ubuntu 20.04" \
    --target-dedicated-nodes 2 \
    --vm-size Standard_A1_v2

Batch 会立即创建池,但分配和启动计算节点需要数分钟。 若要查看池状态,请使用 az batch pool show 命令。 此命令显示池的所有属性,你可以查询特定的属性。 以下命令查询池的分配状态:

az batch pool show --pool-id myPool \
    --query "allocationState"

Batch 分配并启动节点时,池处于 resizing 状态。 当池状态仍为 resizing 时,可以创建作业和任务。 如果分配状态为steady且所有节点处于运行状态,则说明池已做好运行任务的准备。

创建作业

使用 az batch job create 命令创建要在池上运行的 Batch 作业。 Batch 作业是一个或多个任务的逻辑组。 该作业包含任务的公用设置,例如运行任务的池。 以下示例在 myPool 上创建一个名为 myJob 的作业,该作业最初没有任务。

az batch job create \
    --id myJob \
    --pool-id myPool

创建作业任务

Batch 提供了多种将应用和脚本部署到计算节点的方式。 使用 az batch task create 命令创建在作业中运行的任务。 每个任务都有一个命令行,用于指定应用或脚本。

以下 Bash 脚本通过 myTask4 创建四个相同的并行任务 myTask1。 任务命令行会显示计算节点上的 Batch 环境变量,然后等待 90 秒。

for i in {1..4}
do
   az batch task create \
    --task-id myTask$i \
    --job-id myJob \
    --command-line "/bin/bash -c 'printenv | grep AZ_BATCH; sleep 90s'"
done

命令输出显示每个任务的设置。 Batch 将任务分发到计算节点。

查看任务状态

创建任务后,Batch 会让其排队在池中运行。 节点可用后,任务将在该节点上运行。

使用 az batch task show 命令查看 Batch 任务的状态。 以下示例显示了有关 myTask1 的状态的详细信息:

az batch task show \
    --job-id myJob \
    --task-id myTask1

命令输出包含许多详细信息。 例如,exitCode0 指示任务命令已成功完成。 nodeId 显示运行了任务的池节点的名称。

查看任务输出

使用 az batch task file list 命令列出在节点上创建的任务的文件。 以下命令列出 myTask1 创建的文件:

az batch task file list \
    --job-id myJob \
    --task-id myTask1 \
    --output table

结果类似于以下输出:

Name        URL                                                                                       Is Directory    Content Length
---------- ----------------------------------------------------------------------------------------  -------------- ----------------
stdout.txt  https://mybatchaccount.chinaeast2.batch.chinacloudapi.cn/jobs/myJob/tasks/myTask1/files/stdout.txt  False                  695
certs       https://mybatchaccount.chinaeast2.batch.chinacloudapi.cn/jobs/myJob/tasks/myTask1/files/certs       True
wd          https://mybatchaccount.chinaeast2.batch.chinacloudapi.cn/jobs/myJob/tasks/myTask1/files/wd          True
stderr.txt  https://mybatchaccount.chinaeast2.batch.chinacloudapi.cn/jobs/myJob/tasks/myTask1/files/stderr.txt  False                    0

az batch task file download 命令可将输出文件下载到本地目录。 运行以下示例以下载 stdout.txt 文件:

az batch task file download \
    --job-id myJob \
    --task-id myTask1 \
    --file-path stdout.txt \
    --destination ./stdout.txt

可以在文本编辑器中查看标准输出文件的内容。 下面的示例演示了典型的 stdout.txt 文件。 此任务的标准输出显示节点上设置的 Azure Batch 环境变量。 可以在 Batch 作业任务命令行以及命令行运行的应用和脚本中引用这些环境变量。

AZ_BATCH_TASK_DIR=/mnt/batch/tasks/workitems/myJob/job-1/myTask1
AZ_BATCH_NODE_STARTUP_DIR=/mnt/batch/tasks/startup
AZ_BATCH_CERTIFICATES_DIR=/mnt/batch/tasks/workitems/myJob/job-1/myTask1/certs
AZ_BATCH_ACCOUNT_URL=https://mybatchaccount.chinaeast2.batch.chinacloudapi.cn/
AZ_BATCH_TASK_WORKING_DIR=/mnt/batch/tasks/workitems/myJob/job-1/myTask1/wd
AZ_BATCH_NODE_SHARED_DIR=/mnt/batch/tasks/shared
AZ_BATCH_TASK_USER=_azbatch
AZ_BATCH_NODE_ROOT_DIR=/mnt/batch/tasks
AZ_BATCH_JOB_ID=myJobl
AZ_BATCH_NODE_IS_DEDICATED=true
AZ_BATCH_NODE_ID=tvm-257509324_2-20180703t215033z
AZ_BATCH_POOL_ID=myPool
AZ_BATCH_TASK_ID=myTask1
AZ_BATCH_ACCOUNT_NAME=mybatchaccount
AZ_BATCH_TASK_USER_IDENTITY=PoolNonAdmin

清理资源

若要继续学习 Batch 教程和示例,可以继续使用在本快速入门中创建的 Batch 帐户和关联的存储帐户。 Batch 帐户本身不收费。

池和节点在节点运行时会产生费用,即使它们未运行作业也是如此。 不再需要池时,请使用 az batch pool delete 命令将其删除。 删除池会删除节点上的所有任务输出以及节点本身。

az batch pool delete --pool-id myPool

当不再需要为本快速入门创建的任何资源时,可以使用 az group delete 命令删除资源组及其所有资源。 若要删除资源组和存储帐户、Batch 帐户、节点池和所有相关资源,请运行以下命令:

az group delete --name qsBatch

后续步骤

在本快速入门中,你创建了 Batch 帐户和池,创建并运行了 Batch 作业和任务,并查看了节点的任务输出。 现在你已经了解了 Batch 服务的关键概念,可以将 Batch 用于更现实、更大规模的工作负载了。 若要详细了解 Azure Batch,请继续学习 Azure Batch 教程。