控制臺(tái)快速開(kāi)始
介紹如何使用控制臺(tái)來(lái)提交一個(gè)作業(yè),目的是統(tǒng)計(jì)一個(gè)日志文件中 INFO、WARN、ERROR、DEBUG 出現(xiàn)的次數(shù)。
步驟預(yù)覽
作業(yè)準(zhǔn)備
上傳數(shù)據(jù)文件到 OSS
上傳任務(wù)程序到 OSS
使用控制臺(tái)提交作業(yè)
查看作業(yè)狀態(tài)
查看結(jié)果
1. 作業(yè)準(zhǔn)備
本作業(yè)是統(tǒng)計(jì)一個(gè)日志文件中 INFO、WARN、ERROR、DEBUG 出現(xiàn)的次數(shù)。
該作業(yè)包含3個(gè)任務(wù):split、 count 和 merge:
split 任務(wù)會(huì)把日志文件分成 3 份。
count 任務(wù)會(huì)統(tǒng)計(jì)每份日志文件中 INFO、WARN、ERROR、DEBUG 出現(xiàn)的次數(shù)(count 任務(wù)需要配置 InstanceCount 為3,表示同時(shí)啟動(dòng) 3 個(gè) count 任務(wù))。
merge 任務(wù)會(huì)把 count 的結(jié)果統(tǒng)一合并起來(lái)。
DAG圖例
上傳數(shù)據(jù)文件到OSS
下載本例子所需的數(shù)據(jù):log-count-data.txt
將 log-count-data.txt 上傳到:
oss://your-bucket/log-count/log-count-data.txt
your-bucket 表示您自己創(chuàng)建的 bucket,本例假設(shè) region 為:cn-shenzhen。
上傳任務(wù)程序到OSS
本例的作業(yè)程序是使用 python 編寫的, 下載本例所需的程序:log-count.tar.gz
本例不需要改動(dòng)示例代碼。直接將 log-count.tar.gz 上傳到 oss,如上傳到:
oss://your-bucket/log-count/log-count.tar.gz。
如何上傳前面已經(jīng)講過(guò)。
BatchCompute 只支持以 tar.gz 為后綴的壓縮包, 請(qǐng)注意務(wù)必用以上方式(gzip)打包, 否則將會(huì)無(wú)法解析。
如果你要修改代碼,可以解壓后修改,然后要用下面的方法打包:
命令如下:
> cd log-count #進(jìn)入目錄
> tar -czf log-count.tar.gz * #打包,將所有這個(gè)目錄下的文件打包到 log-count.tar.gz
可以運(yùn)行這條命令查看壓縮包內(nèi)容:
$ tar -tvf log-count.tar.gz
可以看到以下列表:
conf.py
count.py
merge.py
split.py
2. 使用控制臺(tái)提交作業(yè)
單擊 作業(yè)列表 > 提交作業(yè) 進(jìn)行作業(yè)提交。請(qǐng)選擇合適的 Region(該 region 需要和前面上傳數(shù)據(jù)的OSS的 bucket 的 region 一致)。
如上圖所示,首先填寫作業(yè)名稱、作業(yè)優(yōu)先級(jí)等基本信息,接下來(lái)填寫作業(yè)的詳細(xì)描述,有兩種方法:
DAG編輯器:DAG編輯器可以用圖形化的方式來(lái)描述作業(yè) (Job) 包含的任務(wù) (Task) 以及依賴關(guān)系。拖動(dòng)編輯器左上角的“+”來(lái)添加 Task,拖動(dòng) Task上的箭頭來(lái)描述依賴關(guān)系。單擊 Task,可以為每個(gè) Task 設(shè)置參數(shù)。
JSON編輯器:也可以直接使用 JSON 的方式描述作業(yè) (Job) 包含的任務(wù) (Task) 以及依賴關(guān)系,關(guān)于作業(yè)的 JSON 描述及其參數(shù)說(shuō)明,可參考作業(yè) (Job) 相關(guān)的API使用文檔。
我們這里直接采用下面已經(jīng)準(zhǔn)備好的JSON描述粘貼到 JSON編輯器中就可以完成作業(yè)描述。
{ "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 描述的作業(yè)要正常運(yùn)行,您需要根據(jù)自己的實(shí)際情況,對(duì)描述中一些配置項(xiàng)做一些適配修改,包括:
實(shí)例類型:
"InstanceType": "ecs.sn1ne.large"
。用戶實(shí)際可用的實(shí)例類型,可以單擊 DAG編輯器中的單個(gè) Task,通過(guò)下拉選擇框來(lái)選擇。程序包的OSS路徑:
"PackagePath": "oss://your-bucket/log-count/log-count.tar.gz"
,填寫為實(shí)際的程序包路徑。Stdout日志的OSS路徑:
oss://your-bucket/log-count/logs/
,填寫為實(shí)際的日志路徑(需要在OSS上提前創(chuàng)建好)。Stderr日志的OSS路徑:
oss://your-bucket/log-count/logs/
,填寫為實(shí)際的日志路徑(需要在OSS上提前創(chuàng)建好)。輸入數(shù)據(jù)的映射路徑:
"oss://your-bucket/log-count/": "/home/input/"
,填寫為輸入數(shù)據(jù)的實(shí)際路徑。輸出數(shù)據(jù)的映射路徑:
"/home/output/": "oss://your-bucket/log-count/"
,填寫為輸出數(shù)據(jù)的實(shí)際路徑。確定各個(gè)參數(shù)及路徑填寫正確后,點(diǎn)擊左下角的提交作業(yè)并確認(rèn),就完成了作業(yè)提交。
3. 查看作業(yè)狀態(tài)
單擊作業(yè)列表中最新提交的 log-count 作業(yè),可以查看詳情:
單擊任務(wù)名稱 split,可以查看任務(wù)詳情:
單擊綠色方塊,可以查看實(shí)例的日志:
4. 查看結(jié)果
您可以登錄 OSS 控制臺(tái) 查看 your-bucket 這個(gè) bucket 下面的這個(gè)文件:/log-count/merge_result.json。
內(nèi)容應(yīng)該如下:
{"INFO": 2460, "WARN": 2448, "DEBUG": 2509, "ERROR": 2583}