閱讀英文

共用方式為

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

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

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

如果没有 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 或更高版本。

注意

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

创建资源组

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

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export REGION="canadacentral"
export RESOURCE_GROUP="qsBatch$RANDOM_SUFFIX"

az group create \
    --name $RESOURCE_GROUP \
    --location $REGION

结果:

{
    "id": "/subscriptions/xxxxx/resourceGroups/qsBatchxxx",
    "location": "chinaeast2",
    "managedBy": null,
    "name": "qsBatchxxx",
    "properties": {
         "provisioningState": "Succeeded"
    },
    "tags": null,
    "type": "Microsoft.Resources/resourceGroups"
}

创建存储帐户

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

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

export STORAGE_ACCOUNT="mybatchstorage$RANDOM_SUFFIX"

az storage account create \
    --resource-group $RESOURCE_GROUP \
    --name $STORAGE_ACCOUNT \
    --location $REGION \
    --sku Standard_LRS

创建批处理帐户

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

export BATCH_ACCOUNT="mybatchaccount$RANDOM_SUFFIX"

az batch account create \
    --name $BATCH_ACCOUNT \
    --storage-account $STORAGE_ACCOUNT \
    --resource-group $RESOURCE_GROUP \
    --location $REGION

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

az batch account login \
    --name $BATCH_ACCOUNT \
    --resource-group $RESOURCE_GROUP \
    --shared-key-auth

创建计算节点池

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

export POOL_ID="myPool$RANDOM_SUFFIX"

az batch pool create \
    --id $POOL_ID \
    --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 $POOL_ID \
    --query "{allocationState: allocationState}"

结果:

{
    "allocationState": "resizing"
}

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

创建作业

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

export JOB_ID="myJob$RANDOM_SUFFIX"

az batch job create \
    --id $JOB_ID \
    --pool-id $POOL_ID

创建作业任务

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

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

for i in {1..4}
do
   az batch task create \
    --task-id myTask$i \
    --job-id $JOB_ID \
    --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 $JOB_ID \
    --task-id myTask1

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

查看任务输出

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

# Wait for task to complete before downloading output
echo "Waiting for task to complete..."
while true; do
    STATUS=$(az batch task show --job-id $JOB_ID --task-id myTask1 --query "state" -o tsv)
    if [ "$STATUS" == "running" ]; then
        break
    fi
    sleep 10
done

az batch task file list --job-id $JOB_ID --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 $JOB_ID \
    --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=myJob
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 服务的关键概念,可以将 Batch 用于更现实、更大规模的工作负载了。 若要详细了解 Azure Batch,请继续学习 Azure Batch 教程。