快速入门:使用 Azure CLI 运行第一个 Batch 作业

通过使用 Azure CLI 创建 Batch 帐户、计算节点(虚拟机)池以及在池中运行任务的作业,开始使用 Azure Batch。 每个示例任务在一个池节点上运行一个基本命令。

Azure CLI 用于从命令行或脚本创建和管理 Azure 资源。 完成本快速入门以后,你会了解 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”命令创建资源组。 Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。

以下示例在“chinanorth2”位置创建名为“QuickstartBatch-rg”的资源组 。

az group create \
    --name QuickstartBatch-rg \
    --location chinanorth2

创建存储帐户

可以将 Azure 存储帐户与 Batch 帐户相关联。 虽然本快速入门不需要,但存储帐户可以用于为大多数现实世界的工作负荷部署应用程序和存储输入和输出数据。 使用 az storage account create 命令在资源组中创建存储帐户。

az storage account create \
    --resource-group QuickstartBatch-rg \
    --name mystorageaccount \
    --location chinanorth2 \
    --sku Standard_LRS

创建批处理帐户

使用 az batch account create 命令创建 Batch 帐户。 需要一个帐户来创建计算资源(计算节点池)和 Batch 作业。

以下示例在“QuickstartBatch-rg”中创建名为“mybatchaccount”的 Batch 帐户,并关联已创建的存储帐户 。

az batch account create \
    --name mybatchaccount \
    --storage-account mystorageaccount \
    --resource-group QuickstartBatch-rg \
    --location chinanorth2

若要创建和管理计算池和作业,需使用 Batch 进行身份验证。 使用 az batch account login 命令登录到帐户。 登录后,az batch 命令使用此帐户上下文。

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

创建计算节点池

有了 Batch 帐户以后,即可使用 az batch pool create 命令创建包含 Linux 计算节点的示例池。 以下示例创建一个名为“mypool”的池,其中包含两个运行 Ubuntu 18.04 LTS 的 Standard_A1_v2 节点。 就此快速示例来说,建议的节点大小在性能和成本之间达成了很好的平衡。

az batch pool create \
    --id mypool --vm-size Standard_A1_v2 \
    --target-dedicated-nodes 2 \
    --image canonical:ubuntuserver:18.04-LTS \
    --node-agent-sku-id "batch.node.ubuntu 18.04"

Batch 会立即创建池,但分配和启动计算节点则需要数分钟。 在此期间,池处于resizing状态。 若要查看池的状态,请运行 az batch pool show 命令。 此命令显示池的所有属性,你可以查询特定的属性。 以下命令获取池的分配状态:

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

继续以下步骤,在池状态更改的情况下创建作业和任务。 如果分配状态为steady且所有节点处于运行状态,则说明池已做好运行任务的准备。

创建作业

有了池之后,请创建可在其中运行的作业。 Batch 作业是适用于一个或多个任务的逻辑组。 作业包含任务的公用设置,例如优先级以及运行任务的池。 使用 az batch job create 命令创建 Batch 作业。 以下示例在 mypool 池中创建 myjob 作业。 作业一开始没有任务。

az batch job create \
    --id myjob \
    --pool-id mypool

创建任务

现在,请使用 az batch task create 命令创建一些在作业中运行的任务。 此示例创建四个相同的任务。 每个任务都运行command-line,用于显示计算节点上的 Batch 环境变量,然后等待 90 秒。 使用 Batch 时,可以在此命令行中指定应用或脚本。 Batch 提供了多种将应用和脚本部署到计算节点的方式。

以下 Bash 脚本创建四个并行任务(mytask1 到 mytask4)。

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

命令输出包括许多详细信息,但请记下任务命令行的 exitCode 以及 nodeIdexitCode 为 0 指示任务命令行已成功完成。 nodeId 指示任务运行时所在池节点的 ID。

查看任务输出

若要列出计算节点上的任务所创建的文件,请使用 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.chinanorth2.batch.chinacloudapi.cn/jobs/myjob/tasks/mytask1/files/stdout.txt  False                  695
certs       https://mybatchaccount.chinanorth2.batch.chinacloudapi.cn/jobs/myjob/tasks/mytask1/files/certs       True
wd          https://mybatchaccount.chinanorth2.batch.chinacloudapi.cn/jobs/myjob/tasks/mytask1/files/wd          True
stderr.txt  https://mybatchaccount.chinanorth2.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.chinanorth2.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

如果不再需要资源组、Batch 帐户、池和所有相关的资源,则可以使用 az group delete 命令将其删除。 删除资源,如下所示:

az group delete --name QuickstartBatch-rg

后续步骤

本快速入门创建了 Batch 帐户、Batch 池和 Batch 作业。 作业运行示例任务,你查看了在其中一个节点上产生的输出。 了解 Batch 服务的重要概念以后,即可使用更逼真的工作负荷进行更大规模的 Batch 试用。 若要详细了解 Azure Batch,请继续学习 Azure Batch 教程。