SGE作業調度系統的簡單理解

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

任務解釋:使用bowtieA_1.fqA_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 qholdqrls
  • qhold 阻止已提交作業的執行
    qhold 的語法:qhold jobid
    任務掛起後,狀態變爲 hqw(任務掛起等待中,待依賴的任務完成後執行)
  • qrls 釋放先前被阻止執行的作業
    qrls 的語法:qrls jobid

6.2.2 qmod -sqmod -us
  • qmod -s 暫停已經在運行的作業
    qmod -s的語法:qmod -s jobid
    任務掛起後,狀態變爲 s(暫時掛起)


  • qmod -us 啓動暫停的作業
    qmod -us的語法:qmod -us jobid


attention: qmod -sqmod -us還可以用於暫停和啓動隊列,
前提是擁有對應的隊列管理權限。

6.3 修改作業屬性 qalter

qalter 語法:qalter [參數] 修改內容 jobid
常用參數:
-q :修改指定隊列
-l :修改限制資源
-N :修改指定作業名稱
-P :修改指定項目名稱
這裏以修改指定作業名稱 qalter -N 舉例吧:


修改jobid204065的作業

修改後的結果:

6.4 刪除作業 qdel

qdel常用的參數:
-f 強制刪除
-u 刪除指定用戶的作業

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章