說明
可以使用 config 檔案指定多個任務和依賴關係,然後使用下面的命令提交:
bcs sub --file job.cfg # 檔案名稱可以隨意定
1. 單個任務支援
job.cfg 內容:
[taskname]
cmd=python test.py
job_name=demo
cluster=img=img-ubuntu:type=ecs.sn1.medium
description=test job
nodes=1
pack=./src/
read_mount=oss:
write_mount=oss:
這個設定檔含有一個section: [taskname], 這個taskname將作為task名提交。
除了cmd 和 job_name 外,其他的選項, 都是通過 bcs sub -h 看到的長選項名稱, 等同於使用命令—${option}。
2. 多任務支援
說明
config 檔案也可以配置多個任務,可以指定任務間依賴關係。
job.cfg 內容:
[DEFAULT]
job_name=log-count
description=demo
force=True
deps=split->count;count->merge
#下面是任務公用配置
env=public_key:value,key2:value2
read_mount=oss:
write_mount=oss:
pack=./src/
[split]
cmd=python split.py
cluster=img=img-ubuntu:type=ecs.sn1.medium
nodes=1
[count]
cmd=python count.py
cluster=img=img-ubuntu:type=ecs.sn1.medium
nodes=3
[merge]
cmd=python merge.py
cluster=img=img-ubuntu:type=ecs.sn1.medium
nodes=1
[DEFAULT] section中指定job層級的配置, 其他section指定task配置, 其他section名為task名
配置項優先順序:直接在命令列中的—${option}; 優先順序最高,其次task section中指定的,最後是DEFAULT section中指定的。
env, read_mount, write_mount, mount 這4個配置項, 可merge, 其他配置項遇到高優先順序直接被覆蓋
deps=split->count;count->merge 指定依賴, split任務運行完成後,再運行count,count運行完成後,再運行merge.
cluster配置用的img和type,不同region支援是不一樣的,請根據當前region具體情況設定。
(1) 關於deps
如果DAG如下:

則deps配置:
deps=split->count1,count2;count1->merge;count2->merge
每個dep是一對多的形式: task1->task2,taks3
多個task之間用逗號隔開,多個dep用分號隔開。
(2) 關於 pack
./src/
|-- split.py
|-- ...
如果指定目錄:pack=./src/, 則打包src下面的所有檔案到 worker.tar.gz, 指定cmd時,需要從 ./src/目錄下開始指定,如:cmd=python split.py
如果指定檔案:pack=./src/split.py, 則只打包檔案到worker.tar.gz, 指定cmd時,只需要指定檔案名稱, 如:cmd=python split.py
pack可以在[DEFAULT]這個section中配置,也可以在每個task中配置, 當然也可以在命令列中指定。
(3) 關於 mount
read_mount 為唯讀掛載,將OSS目錄掛載到運行程式的虛擬機器的檔案系統中,linux可以掛載為一個目錄,window下只能掛載為一個Driver,如:”E:”。
如果掛載多個,可以使用英文逗號隔開,如:read_mount=oss://bucket/input/:/home/input/,oss://bucket/input2/:/home/input2/
。write_mount和mount也是如此。
write_mount 為可寫掛載,將OSS目錄映射到運行程式的虛擬機器的目錄,只能映射為一個目錄,如果這個目錄不存在,需要程式建立一下。寫入到這個目錄的所有檔案將會被上傳到相應的OSS目錄。
mount可以用於 NAS 的掛載,比如:
mount=nas:
vpc_id=vpc-xxxxxxxxxxyyyyyy
vpc_cidr_block=192.168.0.0/16
說明
注意:使用 NAS 時要指定 vpc_id 和 cidr_block。
這裡mount資訊中的 true/false 指的是是否支援可寫。
(4) 關於cluster
有2種格式:
AutoCluster格式:
cluster=img=<img-id>:type=<instance-type>
AutoCluster指定任務運行時會自動建立相應配置的叢集,運行完成後自動釋放掉。
Cluster格式:
運行:bcs c 可以查看我的叢集,如果沒有,可以自行建立。
如:
bcs cc <cluster-name> -i <img-id> -t <instance-type> -n 3
使用叢集可以大大縮短作業啟動時間,但是由於叢集是一直運行著的,會一直計費,請自行權衡。
(5) 關於docker
格式如:
使用docker,需要支援docker的ImageId才能運行成功。如果你沒有指定cluster,預設的imageId是支援Docker的,或者你顯式指定也行,或者使用clusterId,但是這個cluster的ImageId也要支援docker才行。
這裡的myubuntu全名為:localhost:5000/myubuntu,製作docker鏡像的時候,首碼必須為localhost:5000/, 因此這裡可以省略掉首碼。後面的OSS目錄,是OSS私人docker鏡像倉庫目錄,詳情請看如何使用docker。
(6) 關於nodes
nodes 表示指定使用多少台虛擬機器運行任務程式。
(7) 關於force
force 為 True,表示如果某台虛擬機器運行程式出錯,整個作業不會失敗,繼續運行。為False,則整個作業失敗。預設為False。