Sun網格引擎(Sun Grid, SGE)是一種來自於 SUN Microsystem的分佈式資源管理和調度系統,它用來在基於UNIX的計算環境中優化軟件和硬件資源的使用。SGE能用於查找資源池內的閒置資源並利用這些資源(將用戶投遞的任務進行排隊,然後將任務交給能夠運行的結算節點執行);它同樣用於通常的一些事務中,例如管理和調度作業到可用資源中。當然,作業調度系統的種類有很多,除了SEG,常見的還有Condor、負載共享設施(LSF)、便攜式批處理系統(PBS)。
對用戶而言,SGE就是一個大系統,提供單個切入點,以訪問強大而分散的資源。用戶將網格視作單個計算資源。資源管理軟件(SGE)接受由用戶提交的作業(也就是分析任務),並根據資源管理策略將作業安排在網格內適當的系統上執行。用戶可以一次提交數千個作業,而不必考慮他們在何處運行,如此一來簡化了用戶的使用。
對管理者而言,SGE依據管理者制定的規則,檢測網格的所有可用資源後,聚集資源,並在該網格內自動、最優地分配和利用資源。同時提供廣泛的工具,用以監控投放的任務。
SGE的工作流程可以分爲四步:
- 接受用戶投放的任務
- 在任務運行以前,將任務放到一個存儲區域
- 發送任務到一個執行設備,並監控任務的運行
- 運行結束返回結果並記錄運行日誌
用戶可以在提交作業時描述出作業需求的概況,從而協助SGE的資源分配(例如,通過qsub -l
申請資源)。此外,SGE系統也會檢索用戶的身份以及他與項目或用戶組的從屬關係,根據管理者的設定規則爲任務分配優先級或等待時間。
1.節點的基本概念
貓毛的理解:一個節點也就相當於一臺服務器
主控節點:主控節點是所有集羣活動的中心,控制SGE系統組件。一般情況,主控節點也是管理節點和提交節點。
執行節點:執行節點有權限執行作業的系統,執行節點有附加到它上面的隊列。
管理節點:管理節點有權運行SGE系統的任何類型的管理操作。
提交節點:提交節點只允許用戶提交和控制批處理作業。具體說,用戶登陸後,可以使用qsub
命令提交作業,使用qstat
命令監控作業狀態。
瞭解隊列的概念
在SGE中,隊列就是存放能在某一節點上運行的所有任務的容器。一個隊列從某種方面也決定了所含任務的屬性。
隊列存在的本質:爲任務提供服務
隊列存在的意義:(由於SGE允許同時運行多個任務,爲了優化資源利用)系統會試着最小負荷的合適隊列開始新的任務
2.用戶的基本概念
管理人員:管理人員擁有完全操作SGE系統的能力。默認情況,管理主機的超級用戶都具有管理人員權限。
操作員:操作員可以執行很多管理人員命令,但是進行配置更改除外。
擁有者:隊列擁有者可以暫停或者啓動其擁有的隊列,還可以暫停或啓動其擁有的隊列中的作業。隊列擁有者沒有其他管理權限。
用戶:用戶有一定的訪問權限。
3.資源檢索
3.1 qhost
-- 顯示執行節點的狀態信息
其中:
- ARCH:CPU架構
- NCPU:CPU核數
- LOAD:負載情況
3.2 qconf
-- 提供集羣配置和隊列配置的用戶界面
qconf -sel
顯示“執行主機”列表
qconf -sh
顯示“管理主機”列表
qconf -ss
顯示“提交任務主機”列表
qconf -sql
顯示“集羣隊列”列表
qconf -spl
顯示“集羣並行環境”列表
4. 任務投遞
使用qsub
進行任務投遞時需要添加參數來調整qsub
的行爲。下面只列幾個常用的參數。
參數 | 默認值 | 說明 |
---|---|---|
-b | 表示運行二進制命令,而非腳本 | |
-cwd | 家目錄 | 運行前切換至當前目錄。如此一來,stdout 和 stderr 將輸出在當前目錄 |
-wd | 定義工作目錄 | |
-A | 當前用戶 | 任務的擁有者 |
-j | n(默認否定) | 是否將標準輸入和標準輸出合併成一個文件 |
-m | 任務結束後,通過哪種方式通知任務擁有者:‘b’ Mail is sent at the beginning of the job; 'e' Mail is sent at the end of the job; 'a' Mail is sent when the job is aborted or rescheduled; 's' Mail is sent when the job is suspended; 'n' No mail is sent.(job開始和終止發送郵件,使用 -m be 這種形式) |
|
-M | -m 郵件通知時的郵箱 | |
-p | 任務的優先級 | |
-r | 當操作系統重啓後,自動重啓任務 | |
-N | 任務名 | |
-o | stdout 指定標準輸出的文件夾 | |
-e | stderr 指定標準錯誤的文件夾 | |
-v | 開始任務前設置指定變量 | |
-V | 將當前的環境變量傳遞到執行命令的節點中 | |
-hold_jid | eg: -hold_jid 135 在job ID 爲135 的任務完成之後運行 |
|
-q | 指定隊列 | |
-l resource=value | 請求資源數 eg:-l vf=25G -l h=node1(任務的預估內存爲25G,申請在node1上運行) 申請內存時儘可能大於真實內存,內存預估偏低的話可能會導致節點跑掛掉 |
|
-pe smp | eg:-pe smp 5 申請5個線程 |
|
-S | tcsh | 規定作業的shell解釋器 -S /bin/bash 表示在bash環境下執行命令 |
4.1 命令行投遞
bowtie2 -p 8 -x index/ref -1 data/A_1.fq -2 data/A_2.fq | samtools sort > A.bam | qsub -V -cwd -l vf=25G -S /bin/bash -pe openmpi 8 -N A.bt2
任務解釋:使用bowtie
將 A_1.fq
和 A_2.fq
和參考基因組比對生成bam文件,然後再使用samtools sort
將bam排序獲得A.bam
。
qsub
命令解釋:申請8個線程並使用openmpi進行運算(同時申請內存25G),這裏定義任務名稱爲 A.bt2
4.2 腳本投遞
編輯shell腳本 test.sh
,內容如下
#!/bin/bash
#$ -V
#$ -N A.bt2
#$ -pe openmpi 8
#$ -cwd
#$ -l vf=25G
#$ -M [email protected]
#$ -m be
bowtie2 -p 8 -x index/ref -1 data/A_1.fq -2 data/A_2.fq | samtools sort > A.bam
投遞時直接qsub test.sh
5.任務查詢 qstat
qstat
是一個非常有用的任務查詢命令
-
prior
代表任務的優先級,數值越高越優先 -
name
爲任務名稱(這裏爲test) -
slots ja-task-ID
線程數(這裏爲 1 ) -
state
爲任務狀態
-- qw: 表示等待狀態
-- hqw: 任務掛起等待中,依賴於其他正在執行的任務,待依賴的任務完成後執行
-- Eqw: 投遞任務出錯
-- r:表示任務正在運行
-- s:暫時掛起(往往由於優先級更高的job搶佔了資源)
-- dr:節點掛了之後,刪除任務就會出現這個狀態,只有節點重啓之後,任務纔會消失
認識幾個qstat
的常用參數 -
qstat -f
查看用戶任務 -
qstat -j jobId
按任務id查看 -
qstat -explain a|c|A|E -j jobID
查看任務並給出解釋 -
qstat -u user
查看指定用戶投遞的任務
6. 其餘幾個SGE 常用命令
6.1查看可用節點 qselect
qselect 的語法:qselect [options]
常用參數:
qselect -U
查看指定用戶的可用隊列節點
qselect -q
查看指定隊列有哪些可用節點
6.2 掛起作業使用的命令
6.2.1 qhold
和 qrls
-
qhold
阻止已提交作業的執行
qhold
的語法:qhold jobid
任務掛起後,狀態變爲hqw
(任務掛起等待中,待依賴的任務完成後執行)
-
qrls
釋放先前被阻止執行的作業
qrls
的語法:qrls jobid
6.2.2 qmod -s
和 qmod -us
-
qmod -s
暫停已經在運行的作業
qmod -s
的語法:qmod -s jobid
任務掛起後,狀態變爲s
(暫時掛起)
-
qmod -us
啓動暫停的作業
qmod -us
的語法:qmod -us jobid
attention: qmod -s
和 qmod -us
還可以用於暫停和啓動隊列,
前提是擁有對應的隊列管理權限。
6.3 修改作業屬性 qalter
qalter
語法:qalter [參數] 修改內容 jobid
常用參數:
-q
:修改指定隊列
-l
:修改限制資源
-N
:修改指定作業名稱
-P
:修改指定項目名稱
這裏以修改指定作業名稱 qalter -N
舉例吧:
修改
jobid
爲204065
的作業修改後的結果:
6.4 刪除作業 qdel
qdel
常用的參數:
-f
強制刪除
-u
刪除指定用戶的作業