目錄
- 1. 正文
- 1.1. 任務描述檔案
- 1.2. 提交任務
- 1.3. 回傳結果
- 2. 相關
1. 正文
1.1. 任務描述檔案
前文提到過,HTCondor是通過condor_submit命令將提交任務的,這個命令需要提供一個任務描述檔案,這個任務描述檔案詳細描述了任務運行的需求情況,如下所示:
universe = vanilla
requirements = (Arch == "INTEL" || Arch == "X86_64") && (OpSys == "WINDOWS") && (Machine == "charlee-PC" || Machine == "DESKTOP-OVHV440")
executable = D:\Work\HTC\Work\bin\TaskProgram.exe
should_transfer_files = YES
when_to_transfer_output = on_exit
notification = complete
skip_filechecks = true
arguments = 0
initialdir = D:\Work\HTC\Work\0
transfer_input_files = input.txt
transfer_output_files = output.dat
output = $(CLUSTER)_$(PROCESS).out
log = $(CLUSTER)_$(PROCESS).log
error = $(CLUSTER)_$(PROCESS).error
queue
arguments = 1
initialdir = D:\Work\HTC\Work\1
transfer_input_files = input.txt
transfer_output_files = output.dat
output = $(CLUSTER)_$(PROCESS).out
log = $(CLUSTER)_$(PROCESS).log
error = $(CLUSTER)_$(PROCESS).error
queue
...
arguments = 15
initialdir = D:\Work\HTC\Work\15
transfer_input_files = input.txt
transfer_output_files = output.dat
output = $(CLUSTER)_$(PROCESS).out
log = $(CLUSTER)_$(PROCESS).log
error = $(CLUSTER)_$(PROCESS).error
queue
universe引數表示HTCondor的運行環境,默認為vanilla,vanilla提供的功能會少一些,但是使用也會較為方便,如果要使用一些高級的功能,可以使用standard環境,standard環境提供了斷點和遷移的功能,不過需要一些額外的重鏈接操作生成特定的可執行程式,
requirements引數表示該一系列任務的需求,HTCondor采取了一種ClassAds匹配策略,每臺計算機會一直在Pool中廣播關于自己資源的Ad,通過這個引數,可以匹配該任務是否與該計算機適配,這里設定的意思是選擇X86的Windows機器,且機器名稱為"charlee-PC"或"DESKTOP-OVHV440",使用"name == "slot1@USER-EHN3KRBP1V"的形式,甚至可以指定到某一核來運行,
executable也就是上一篇中實作的可執行程式,
should_transfer_files表示使用檔案傳輸機制,檔案傳輸機制也就是任務程式需要的資料,跟隨任務程式一起發送到任務機中運行,如果不使用檔案傳輸機制,就需要如NFS或AFS這樣的共享檔案系統,
when_to_transfer_output = on_exit表示當任務程式完成之后,會有輸出的檔案一起傳送回本機,
接下來arguments開頭queue結尾的代碼描述了16組任務的詳細描述,initialdir是初始化目錄,也就是上一節中創建的每個分任務的目錄,
transfer_input_files表示傳送到任務機的檔案,這個引數可以設定成具體的檔案,目錄,設定是可執行程式依賴的dll,注意發送到任務機后這些檔案與執行任務檔案在同一個目錄中,
when_to_transfer_output表示發送回本機的檔案,當任務程式運行完成后,會生成處理好的資料,可以通過這個引數將檔案傳送回本機,
output表示任務程式的輸出檔案,可以截獲任務程式的stdout流,
log表示集群執行任務程式的狀態,一般是HTCondor框架自動生成,
error表示任務程式的錯誤檔案,可以截獲任務程式的stderr流,
1.2. 提交任務
在命令提示符視窗中輸入condor_submit指令:
可以看到成功提交后,回傳了一個任務ID號,可以通過condor_q指令查看當前的任務佇列狀態:
ST這一列的I代表idle,也就是閑置的,這時由于任務剛提交上去,還來不及匹配任務機器或者沒有更新狀態,多重繪幾次,可以看到這一欄會編程R,也就是Run,表示運行狀態:
繼續輸入condor_status,查看當前計算機資源的情況,這時的狀態重繪會更慢些,也可以多輸入幾次:

State表示資源占用情況,Claimed表示已占用,Claimed表示未占用,Activity表示當前的活動狀態,Idle就是閑置,Busy表示繁忙,
通過以上指令,可以查看當前任務是否正常,等待直到condor_q中的任務佇列為空,就說明當前所有的任務已經完成了,
1.3. 回傳結果
根據任務描述檔案,任務程式會回傳一個輸出資料output.dat已經相關的日志資訊.log、.out、.error,任務完成后會回傳到各自的初始化目錄中:
.out是任務程式的stdout流,可以用來輸出資訊;.error是任務程式的stderr流,可以用來輸出錯誤資訊,在任務程式中輸出資訊和日志是必要的,可以第一事件排查是哪一段代碼出問題,如果連這兩個檔案都沒有,可以考慮是否是HTCondor的環境配置問題,或者任務描述檔案是否出錯,
.log是HTCondor的輸出日志,可以用來參考,output.dat就是任務程式的輸出資料了,當然這個資料因任務程式而異,任務程式輸出什么,任務描述檔案就回傳對應的資料,當然也可以什么都不用回傳,
在HTCondor任務程式計算的程序中,會把任務程式傳送到對應的任務機器,也就是任務機器HTCondor安裝目錄的execute目錄中,運行時會看到任務程式,以及傳送過來的資料等:
當然,在運行完成后,這個execute目錄就會自動清空,
至此,一個簡單的分布式計算流程就算完成了,實際的運用當然沒這么簡單,但是總體的思路都是這樣的:
拆分任務——提交任務——監視任務——任務完成——合并結果,
2. 相關
代碼和資料地址
上一篇
目錄
下一篇
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/43562.html
標籤:其他
