本文档将介绍如何使用命令行工具来提交一个作业,目的是统计一个日志文件中“INFO”,”WARN”,”ERROR”,”DEBUG”出现的次数。

命令行工具安装和配置

作业准备

目的:统计一个日志文件中“INFO”,”WARN”,”ERROR”,”DEBUG”出现的次数。

该作业包含3个任务: split, count 和 merge:

  • split 任务会把日志文件分成 3 份。
  • count 任务会统计每份日志文件中“INFO”,”WARN”,”ERROR”,”DEBUG”出现的次数 (count 任务需要配置 InstanceCount 为3,表示同时启动 3 个 count 任务)。
  • merge 任务会把 count 的结果合并起来。

DAG图例:

DAG

上传数据文件到OSS

下载本例子所需的数据: log-count-data.txt

将 log-count-data.txt 上传到: oss://your-bucket/log-count/log-count-data.txt

说明 your-bucket 表示您自己创建的 bucket,本例子假设 region 为: cn-shenzhen。
bcs oss upload ./log-count-data.txt oss://your-bucket/log-count/log-count-data.txt

bcs oss cat oss://your-bucket/log-count/log-count-data.txt  # 检查是否上传成功

bcs o 命令提供几个 OSS 常用的功能,使用 bcs o -h 可以查看帮助,测试少量数据时使用很方便,但上传下载大量数据时不建议使用(没有实现多线程,上传下载慢。更多关于如何上传到 OSS,请参考 OSS常用工具汇总

准备任务程序

本例的作业程序是使用 python 编写的, 下载本例所需的程序: log-count.tar.gz

使用下面的目录解压:

mkdir log-count && tar -xvf log-count.tar.gz -C log-count

解压后的log-count/目录结构如下

log-count
  |-- conf.py    # 配置
  |-- split.py       # split 任务程序
  |-- count.py      # count 任务程序
  |-- merge.py    # merge 任务程序

说明:不需要改动程序

提交作业

编写作业配置

在 log-count 的父目录下创建一个文件: job.cfg(此文件要与 log-count 目录平级), 内容如下:

[DEFAULT]
job_name=log-count
description=demo
pack=./log-count/
deps=split->count;count->merge

[split]
cmd=python split.py

[count]
cmd=python count.py
nodes=3

[merge]
cmd=python merge.py

这里描述了一个多任务的作业,任务的执行顺序是 split>count>merge。

关于 cfg 格式的描述,请看 多任务

提交命令

bcs sub --file job.cfg -r oss://your-bucket/log-count/:/home/input/ -w oss://your-bucket/log-count/:/home/output/
  • -r 和 -w 表示只读挂载和可写映射,具体请查看 OSS挂载
  • 同一个 oss 路径,可以挂载到不同的本地目录。但是不同的 oss 路径是不能挂载到同一个本地目录的,一定要注意。
  • 这里需要注意的是,如果挂载的是目录,一定要以“/”结尾。

查看作业运行状态

bcs j   # 获取作业列表, 每次获取作业列表后都会将列表缓存下来,一般第一个即是你刚才提交的作业
bcs ch 1  # 查看缓存中作业的状态,这里的1是bcs j命令查询出的刚刚提交的作业序号
bcs log 1 # 查看缓存中序号为1的作业日志

查看结果

Job 结束后,可以使用以下命令查看 OSS 的结果。

bcs oss cat oss://your-bucket/log-count/merge_result.json

内容应该如下:

{"INFO": 2460, "WARN": 2448, "DEBUG": 2509, "ERROR": 2583}