有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

操作场景

本文介绍如何使用命令行 TCCLI 来提交一个简单的作业,文中示例为使用 Python 实现对斐波那契数列求和。Python 代码由任务中 Application 参数的 Command 字段指定,返回结果直接输出到任务配置的 stdout 输出地址。

前提条件

请参见 开始前的准备 中的步骤做好准备。

操作步骤

安装和配置 TCCLI

1. 请参见 安装 TCCLI 安装命令行工具。
2. 执行以下命令,验证 TCCLI 是否成功安装。
tccli batch help
返回结果如下,则成功安装。
NAME
batch
DESCRIPTION
batch-2017-03-12
USEAGE
tccli batch <action> [--param...]
OPTIONS
help
show the tccli batch help info
--version
specify a batch api version
AVAILABLE ACTION
DescribeComputeEnv
用于查询计算环境的详细信息
CreateTaskTemplate
用于创建任务模板
3. 请按照 配置 TCCLI 配置命令行工具。

创建保存结果的 COS Bucket

在本文示例中,返回结果将直接输出到系统标准输出中,而 Batch 可以采集系统标准输出 stdout 和 stderr,并在任务结束后将信息上传到已指定的 COS Bucket 中,您需提前创建 Bucket 及用于保存信息的子文件夹。
请参见 准备 COS 目录 创建对应 COS Bucket 和子文件夹。

作业配置简介

您可获取并修改官方提供的示例,作为个人账号下可执行的 Batch 计算环境。请参考以下内容了解计算环境各项配置的含义:
tccli batch SubmitJob --version 2017-03-12 --Job '{
"JobName": "TestJob", // 作业名称
"JobDescription": "for test ", // 作业描述
"Priority": "1", // 作业优先级
"Tasks": [ // 任务列表(本例仅一个任务)
{
"TaskName": "Task1", // 任务1名称
"Application": { // 任务执行命令
"DeliveryForm": "LOCAL", // 执行本地命令
"Command": "python -c \\"fib=lambda n:1 if n<=2 else fib(n-1)+fib(n-2); print(fib(20))\\" " // 命令具体内容(斐波拉契求和)
},
"ComputeEnv": { // 计算环境配置
"EnvType": "MANAGED", // 计算环境类型,托管型和非托管型
"EnvData": { // 具体配置(当前托管型,可参照CVM 创建实例说明)
"InstanceType": "S1.SMALL1", // CVM 实例类型
"ImageId": "img-m4q71qnf", // CVM 镜像 ID(需替换)
}
},
"RedirectInfo": { // 标准输出重定向配置
"StdoutRedirectPath": "cos://dondonbatchv5-125xxxxxx4.cosgz.myqcloud.com/logs/", // 标准输出(需替换)
"StderrRedirectPath": "cos://dondonbatchv5-125xxxxxx4.cosgz.myqcloud.com/logs/" // 标准错误(需替换)
}
}
]
}'
--Placement'{
"Zone": "ap-guangzhou-2" // 可用区(可能需替换)
}'

SubmitJob 命令

Batch 的 SubmitJob 命令示例:
tccli batch SubmitJob --version 2017-03-12 --Job '{"JobName": "TestJob", "JobDescription": "for test", "Priority": "1", "Tasks": [{"TaskName": "Task1", "TaskInstanceNum": 1, "Application": {"DeliveryForm": "LOCAL", "Command": "python -c \\"fib=lambda n:1 if n<=2 else fib(n-1)+fib(n-2); print(fib(20))\\" "}, "ComputeEnv": {"EnvType": "MANAGED", "EnvData": {"InstanceType": "S1.SMALL1", "ImageId": "待替换" } }, "RedirectInfo": {"StdoutRedirectPath": "待替换", "StderrRedirectPath": "待替换"}, "MaxRetryCount": 1 } ] }' --Placement '{"Zone": "ap-guangzhou-2"}'
SubmitJob 命令包含以下3个参数:
参数
描述
version
版本号,目前固定填写2017-03-12
Job
作业配置,JSON 格式,详细字段意义见示例
Placement
执行作业的可用区

在示例中已标识需替换的字段,您需要替换为个人信息后才可以执行。例如自定义镜像 ID,VPC 相关信息,COS Bucket 地址和对应 SecretId、SecretKey,可参见 修改配置
请使用示例后方的复制按钮,防止复制内容不完整。请将待替换信息全部替换后再执行命令。
详细 Job 配置说明请参见 作业配置说明

修改配置

填写 ImageId

"ImageId": "待替换"
您需要使用基于 Cloud-init 服务和配置过的镜像,官方提供可直接使用镜像如下:
CentOS 6.5 镜像:ID 为 img-m4q71qnf
Windows Server 2012 的官方镜像: ID 为 img-er9shcln

配置 StdoutRedirectPath 和 StderrRedirectPath

"StdoutRedirectPath": "待替换", "StderrRedirectPath": "待替换"
请将在 创建保存结果的 COS Bucket 获取的访问域名填写到 StdoutRedirectPath 和 StderrRedirectPath 中。

修改可用区(可选)

--Placement '{"Zone": "ap-guangzhou-2"}'
示例中指定在广州二区申请资源,您可以根据 TCCLI 中配置的默认地域,选择相应的可用区并申请资源。 地域和可用区的详细信息请查看 地域和可用区

查看结果

返回结果如下,则表示执行成功。
{
"RequestId": "db84b7f8-ff8e-4c11-81c1-9a3b02652a46",
"JobId": "job-cr8qyyh9"
}
执行以下命令,通过 DescribeJob 查看刚才提交的任务信息。
$ tccli batch DescribeJob --version 2017-03-12 --JobId job-cr8qyyh9
{
"EndTime": "2019-10-08T07:28:07Z",
"JobState": "SUCCEED",
"TaskInstanceMetrics": {
...
},
"Zone": "ap-guangzhou-2",
"TaskMetrics": {
...
},
"JobName": "TestJob",
"Priority": 1,
"RequestId": "0e5c5ea5-ef25-4f90-b355-cfaa8057d473",
"TaskSet": [
{
...
}
],
"StateReason": null,
"JobId": "job-cr8qyyh9",
"DependenceSet": [],
"CreateTime": "2019-10-08T07:27:17Z"
}
执行以下命令,通过 DescribeJobs 查看当前地域作业列表。
$ tccli batch DescribeJobs --version 2017-03-12

更多功能

文中的示例为单任务的作业,仅展示了最基本的功能,未使用远程存储映射能力,您可以通过以下文档或参见 API 文档 深入了解并使用 Batch:
更简单的操作方法:Batch 的能力强大,配置项较多,通过脚本来调用会更加简便快捷,请参见 前置准备简单开始 开始尝试这种方式。
执行远程代码包:Batch 提供自定义镜像 + 远程代码包 + 命令行的方式,在技术上全方位覆盖您的业务需要,详情请参见 执行远程代码包
远程存储映射:Batch 在存储访问上进行优化,将对远程存储服务的访问简化为对本地文件系统操作,详情请参见 远程存储映射