介紹如何使用控制台來提交一個作業,目的是統計一個記錄檔中 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}