练习 - 在 CLI 中监视 Azure Batch 作业

已完成

如果你使用 Azure Batch 运行密集型任务,通常希望了解任务的进展情况。

作为非营利组织的解决方案架构师,你需要各种方法来了解 Azure Batch 中发生的情况。 还需要确定节点和任务是否正常运行,它们的进度及其是否生成了可下载的输出文件。

在本单元中,你将使用 Azure CLI 创建与上一单元类似的作业,监视其任务的进度,并下载任务生成的文件作为输出。

重要

本模块中的练习是可选的。 要完成练习,你需要使用自己的 Azure 订阅。

使用 CLI 监视任务

Azure Batch 处理创建和管理计算节点以及在这些节点上运行的调度作业的所有详细信息。

在最后一个单元中创建任务时,Azure Batch 会将要在池中运行的任务进行排队。 由于确定节点具有可用容量,Azure Batch 会安排在这些节点上运行的任务。

在最后一个单元的末尾,我们删除了作业,这具有删除其所有任务的效果。 现在,我们将创建新的作业和任务。 值得注意的是,删除和重新创建任务是一项相当快速的操作,可以让你轻松地在 Azure Batch 中分离出不同的试验和项目。 与此相反,删除和重新创建更高级别的 Batch 实体(如帐户)则需要更多时间,因为必须重新创建 Batch 池和分配虚拟机。

  1. 登录到 Azure 门户

  2. 选择顶部菜单中的 Cloud Shell 图标 (>_),打开 Cloud Shell。

  3. 在 Cloud Shell 中运行以下命令,以便创建新的 Batch 作业:

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

    我们将其命名为不同的名称,以避免与上一个单元的作业发生任何冲突,之前已计划将该单元删除但尚未将其删除。

  4. 运行以下命令以在此新作业中创建 Batch 任务:

    for i in {1..10}
    do
       az batch task create \
        --task-id mytask$i \
        --job-id myjob2 \
        --command-line "/bin/bash -c 'echo \$(printenv | grep \AZ_BATCH_TASK_ID) processed by; echo \$(printenv | grep \AZ_BATCH_NODE_ID)'"
    done
    
  5. 在 Cloud Shell 中运行以下命令,以查看创建的某个任务的状态:

    az batch task show \
     --job-id myjob2 \
     --task-id mytask1
    

使用 CLI 下载任务输出

要检查批处理作业是否正确执行,可以下载并检查其创建的文件。

  1. 在 Cloud Shell 中运行以下命令,以显示所创建的某个任务生成的所有文件的表:

    az batch task file list \
     --job-id myjob2 \
     --task-id mytask5 \
     --output table
    

    注意

    如果看到错误消息 The files of the specified task cannot be accessed as the task state is still active,请等待几分钟,然后再次运行该命令。

  2. 在 Cloud Shell 中运行以下命令,以为任务输出创建专用目录并导航到该目录:

    mkdir taskoutputs && cd taskoutputs
    
  3. 在 Cloud Shell 中运行以下命令,以下载由所创建的所有任务生成的文件:

    for i in {1..10}
    do
    az batch task file download \
        --job-id myjob2 \
        --task-id mytask$i \
        --file-path stdout.txt \
        --destination ./stdout$i.txt
    done
    

    任务具有默认工作目录,并且默认情况下,他们的工作将定向到 stdout.txt。 通过循环,可以将 stdout.txt 重定向到 stdout.txt 带编号的版本,每个版本都显示给定任务的工作以及用于执行该作业的节点。

  4. 运行以下命令以查看几个示例生成的文件的文本内容:

    cat stdout1.txt && cat stdout2.txt
    

    此输出显示在 Batch 调度程序进行处理时,不同的任务被调度到不同的节点上。

    同样,我们将保留 Azure Batch 帐户和工作器节点池以供在下一个单元中使用,但我们将删除 Batch 作业。 由于 Batch 作业充当其 Batch 任务的容器,因此我们也会删除这些任务。

  5. 使用以下命令删除批处理作业:

    az batch job delete --job-id myjob2 -y