目錄html
前文提到過,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流。
在命令提示符窗口中輸入condor_submit指令:
能夠看到成功提交後,返回了一個任務ID號。能夠經過condor_q指令查看當前的任務隊列狀態:
ST這一列的I表明idle,也就是閒置的。這時因爲任務剛提交上去,還來不及匹配任務機器或者沒有更新狀態,多刷新幾回,能夠看到這一欄會編程R,也就是Run,表示運行狀態:
繼續輸入condor_status,查看當前計算機資源的狀況。這時的狀態刷新會更慢些,也能夠多輸入幾回:
State表示資源佔用狀況,Claimed表示已佔用,Claimed表示未佔用。Activity表示當前的活動狀態,Idle就是閒置,Busy表示繁忙。
經過以上指令,能夠查看當前任務是否正常。等待直到condor_q中的任務隊列爲空,就說明當前全部的任務已經完成了。
根據任務描述文件,任務程序會返回一個輸出數據output.dat已經相關的日誌信息.log、.out、.error。任務完成後會回傳到各自的初始化目錄中:
.out是任務程序的stdout流,能夠用來輸出信息;.error是任務程序的stderr流,能夠用來輸出錯誤信息。在任務程序中輸出信息和日誌是必要的,能夠第一事件排查是哪一段代碼出問題。若是連這兩個文件都沒有,能夠考慮是不是HTCondor的環境配置問題,或者任務描述文件是否出錯。
.log是HTCondor的輸出日誌,能夠用來參考。output.dat就是任務程序的輸出數據了,固然這個數據因任務程序而異,任務程序輸出什麼,任務描述文件就返回對應的數據,固然也能夠什麼都不用返回。
在HTCondor任務程序計算的過程當中,會把任務程序傳送到對應的任務機器,也就是任務機器HTCondor安裝目錄的execute目錄中,運行時會看到任務程序,以及傳送過來的數據等:
固然,在運行完成後,這個execute目錄就會自動清空。
至此,一個簡單的分佈式計算流程就算完成了。實際的運用固然沒這麼簡單,可是整體的思路都是這樣的:
拆分任務——提交任務——監視任務——任務完成——合併結果。