高通量計算框架HTCondor(五)——分佈計算

1. 正文

1.1. 任務描述文件

前文提到過,HTCondor是經過condor_submit命令將提交任務的,這個命令須要提供一個任務描述文件。這個任務描述文件詳細描述了任務運行的需求狀況,以下所示:git

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環境提供了斷點和遷移的功能,不過須要一些額外的重連接操做生成特定的可執行程序。github

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表示當任務程序完成以後,會有輸出的文件一塊兒傳送回本機。ui

接下來arguments開頭queue結尾的代碼描述了16組任務的詳細描述。initialdir是初始化目錄,也就是上一節中建立的每一個分任務的目錄。3d

transfer_input_files表示傳送到任務機的文件。這個參數能夠設置成具體的文件,目錄,設置是可執行程序依賴的dll。注意發送到任務機後這些文件與執行任務文件在同一個目錄中。日誌

when_to_transfer_output表示發送回本機的文件。當任務程序運行完成後,會生成處理好的數據,能夠經過這個參數將文件傳送回本機。code

output表示任務程序的輸出文件,能夠截獲任務程序的stdout流。

log表示集羣執行任務程序的狀態,通常是HTCondor框架自動生成。

error表示任務程序的錯誤文件,能夠截獲任務程序的stderr流。

1.2. 提交任務

在命令提示符窗口中輸入condor_submit指令:

condor_submit指令

能夠看到成功提交後,返回了一個任務ID號。能夠經過condor_q指令查看當前的任務隊列狀態:

condor_q指令

ST這一列的I表明idle,也就是閒置的。這時因爲任務剛提交上去,還來不及匹配任務機器或者沒有更新狀態,多刷新幾回,能夠看到這一欄會編程R,也就是Run,表示運行狀態:

condor_q指令

繼續輸入condor_status,查看當前計算機資源的狀況。這時的狀態刷新會更慢些,也能夠多輸入幾回:

condor_status指令
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. 相關

代碼和數據地址

上一篇
目錄 下一篇

相關文章
相關標籤/搜索