你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

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

先决条件

  • 如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户

  • Azure Cloud Shell 或 Azure CLI。

    可以在 Azure Cloud Shell 中以交互方式运行本快速入门中的 Azure CLI 命令。 要在 Cloud Shell 中运行命令,请选择代码块右上角的“打开 Cloudshell”。 选择“复制”以复制代码,并将其粘贴到 Cloud Shell 以运行。 也可以从 Azure 门户中运行 Cloud Shell。 Cloud Shell 始终使用最新版本的 Azure CLI。

    或者,也可以在本地安装 Azure CLI 以运行命令。 本文中的步骤需要 Azure CLI 版本 2.0.20 或更高版本。 运行 az version 以查看已安装的版本和依赖库,并运行 az upgrade 进行升级。 如果使用本地安装,请使用 az login 命令登录到 Azure。

注意

对于某些区域和订阅类型,配额限制可能会导致 Batch 帐户或节点创建失败或无法完成。 在这种情况下,可以免费请求增加配额。 有关详细信息,请参阅 Batch 服务的配额和限制

创建资源组

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

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

创建存储帐户

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

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

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

创建批处理帐户

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

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

运行 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.eastus2.batch.azure.com/jobs/myJob/tasks/myTask1/files/stdout.txt  False                  695
certs       https://mybatchaccount.eastus2.batch.azure.com/jobs/myJob/tasks/myTask1/files/certs       True
wd          https://mybatchaccount.eastus2.batch.azure.com/jobs/myJob/tasks/myTask1/files/wd          True
stderr.txt  https://mybatchaccount.eastus2.batch.azure.com/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.eastus2.batch.azure.com/
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 教程。