本文檔將介紹如何使用命令列工具來提交一個作業,目的是統計一個記錄檔中“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圖例:

上傳資料檔案到OSS
下載本例子所需的資料:log-count-data.txt
將 log-count-data.txt 上傳到:oss://your-bucket/log-count/log-count-data.txt
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}