介绍如何使用控制台来提交一个作业,目的是统计一个日志文件中 INFO、WARN、ERROR、DEBUG 出现的次数。
步骤预览
作业准备
上传数据文件到 OSS
上传任务程序到 OSS
使用控制台提交作业
查看作业状态
查看结果
1. 作业准备
本作业是统计一个日志文件中 INFO、WARN、ERROR、DEBUG 出现的次数。
该作业包含3个任务:split、 count 和 merge:
split 任务会把日志文件分成 3 份。
count 任务会统计每份日志文件中 INFO、WARN、ERROR、DEBUG 出现的次数(count 任务需要配置 InstanceCount 为3,表示同时启动 3 个 count 任务)。
merge 任务会把 count 的结果统一合并起来。
DAG图例
上传数据文件到OSS
下载本例子所需的数据:log-count-data.txt
将 log-count-data.txt 上传到:
oss://your-bucket/log-count/log-count-data.txt
上传任务程序到OSS
本例的作业程序是使用 python 编写的, 下载本例所需的程序:log-count.tar.gz
本例不需要改动示例代码。直接将 log-count.tar.gz 上传到 oss,如上传到:
oss://your-bucket/log-count/log-count.tar.gz。
如何上传前面已经讲过。
BatchCompute 只支持以 tar.gz 为后缀的压缩包, 请注意务必用以上方式(gzip)打包, 否则将会无法解析。
如果你要修改代码,可以解压后修改,然后要用下面的方法打包:
命令如下:
> cd log-count #进入目录
> tar -czf log-count.tar.gz * #打包,将所有这个目录下的文件打包到 log-count.tar.gz
可以运行这条命令查看压缩包内容:
$ tar -tvf log-count.tar.gz
可以看到以下列表:
conf.py
count.py
merge.py
split.py
2. 使用控制台提交作业
登录 BatchCompute 控制台 。
单击 作业列表 > 提交作业 进行作业提交。请选择合适的 Region(该 region 需要和前面上传数据的OSS的 bucket 的 region 一致)。
如上图所示,首先填写作业名称、作业优先级等基本信息,接下来填写作业的详细描述,有两种方法:
DAG编辑器:DAG编辑器可以用图形化的方式来描述作业 (Job) 包含的任务 (Task) 以及依赖关系。拖动编辑器左上角的“+”来添加 Task,拖动 Task上的箭头来描述依赖关系。单击 Task,可以为每个 Task 设置参数。
JSON编辑器:也可以直接使用 JSON 的方式描述作业 (Job) 包含的任务 (Task) 以及依赖关系,关于作业的 JSON 描述及其参数说明,可参考作业 (Job) 相关的API使用文档。
我们这里直接采用下面已经准备好的JSON描述粘贴到 JSON编辑器中就可以完成作业描述。
{ "DAG": { "Dependencies": { "split": [ "count" ], "count": [ "merge" ], "merge": [] }, "Tasks": { "split": { "InstanceCount": 1, "LogMapping": {}, "AutoCluster": { "Configs": { "Networks": { "VPC": { "CidrBlock": "192.168.0.0/16" } } }, "ResourceType": "OnDemand", "InstanceType": "ecs.sn1ne.large", "ImageId": "img-ubuntu-vpc" }, "Parameters": { "Command": { "EnvVars": {}, "CommandLine": "python split.py", "PackagePath": "oss://your-bucket/log-count/log-count.tar.gz" }, "InputMappingConfig": { "Lock": true }, "StdoutRedirectPath": "oss://your-bucket/log-count/logs/", "StderrRedirectPath": "oss://your-bucket/log-count/logs/" }, "InputMapping": { "oss://your-bucket/log-count/": "/home/input/" }, "OutputMapping": { "/home/output/": "oss://your-bucket/log-count/" }, "MaxRetryCount": 0, "Timeout": 21600, "ClusterId": "" }, "merge": { "InstanceCount": 1, "LogMapping": {}, "AutoCluster": { "Configs": { "Networks": { "VPC": { "CidrBlock": "192.168.0.0/16" } } }, "ResourceType": "OnDemand", "InstanceType": "ecs.sn1ne.large", "ImageId": "img-ubuntu-vpc" }, "Parameters": { "Command": { "EnvVars": {}, "CommandLine": "python merge.py", "PackagePath": "oss://your-bucket/log-count/log-count.tar.gz" }, "InputMappingConfig": { "Lock": true }, "StdoutRedirectPath": "oss://your-bucket/log-count/logs/", "StderrRedirectPath": "oss://your-bucket/log-count/logs/" }, "InputMapping": { "oss://your-bucket/log-count/": "/home/input/" }, "OutputMapping": { "/home/output/": "oss://your-bucket/log-count/" }, "MaxRetryCount": 0, "Timeout": 21600, "ClusterId": "" }, "count": { "InstanceCount": 3, "LogMapping": {}, "AutoCluster": { "Configs": { "Networks": { "VPC": { "CidrBlock": "192.168.0.0/16" } } }, "ResourceType": "OnDemand", "InstanceType": "ecs.sn1ne.large", "ImageId": "img-ubuntu-vpc" }, "Parameters": { "Command": { "EnvVars": {}, "CommandLine": "python count.py", "PackagePath": "oss://your-bucket/log-count/log-count.tar.gz" }, "InputMappingConfig": { "Lock": true }, "StdoutRedirectPath": "oss://your-bucket/log-count/logs/", "StderrRedirectPath": "oss://your-bucket/log-count/logs/" }, "InputMapping": { "oss://your-bucket/log-count/": "/home/input/" }, "OutputMapping": { "/home/output/": "oss://your-bucket/log-count/" }, "MaxRetryCount": 0, "Timeout": 21600, "ClusterId": "" } } }, "Description": "batchcompute job", "Priority": 0, "JobFailOnInstanceFail": true, "Type": "DAG", "Name": "log-count" }
上述 JSON 描述的作业要正常运行,您需要根据自己的实际情况,对描述中一些配置项做一些适配修改,包括:
实例类型:
"InstanceType": "ecs.sn1ne.large"
。用户实际可用的实例类型,可以单击 DAG编辑器中的单个 Task,通过下拉选择框来选择。程序包的OSS路径:
"PackagePath": "oss://your-bucket/log-count/log-count.tar.gz"
,填写为实际的程序包路径。Stdout日志的OSS路径:
oss://your-bucket/log-count/logs/
,填写为实际的日志路径(需要在OSS上提前创建好)。Stderr日志的OSS路径:
oss://your-bucket/log-count/logs/
,填写为实际的日志路径(需要在OSS上提前创建好)。输入数据的映射路径:
"oss://your-bucket/log-count/": "/home/input/"
,填写为输入数据的实际路径。输出数据的映射路径:
"/home/output/": "oss://your-bucket/log-count/"
,填写为输出数据的实际路径。确定各个参数及路径填写正确后,点击左下角的提交作业并确认,就完成了作业提交。
3. 查看作业状态
单击作业列表中最新提交的 log-count 作业,可以查看详情:
单击任务名称 split,可以查看任务详情:
单击绿色方块,可以查看实例的日志:
4. 查看结果
您可以登录 OSS 控制台 查看 your-bucket 这个 bucket 下面的这个文件:/log-count/merge_result.json。
内容应该如下:
{"INFO": 2460, "WARN": 2448, "DEBUG": 2509, "ERROR": 2583}