集群任務(wù)管理系統(tǒng)SGE的簡明教程

我用的一個服務(wù)器上裝了一個集群管理工具(SGE, Sun Grid Engine), 用于從登陸節(jié)點上向計算節(jié)點進行任務(wù)投遞。一開始,不太會用,但是經(jīng)過一段時間的摸索學(xué)習(xí)后,終于能順手的用起來了。

在使用SGE之前,你得先了解SGE到底做了什么事情. SGE或者其他集群管理工作做的事情就是將用戶投遞的任務(wù)進行排隊,然后將任務(wù)交給能夠運行的結(jié)算節(jié)點執(zhí)行,工作流程可以分為四步:

  1. 接受用戶投放的任務(wù)
  2. 在任務(wù)運行以前,將任務(wù)放到一個存儲區(qū)域
  3. 發(fā)送任務(wù)到一個執(zhí)行設(shè)備,并監(jiān)控任務(wù)的運行
  4. 運行結(jié)束寫回結(jié)果并記錄運行日志

SGE的常用命令

任務(wù)投遞

SGE中投遞任務(wù)所用到的命令是qsub. 最簡單的用法是下面這種,即,將要執(zhí)行的命令通過標(biāo)準(zhǔn)輸入的方式傳遞給qsub

echo "ls -l " | qsub

投遞之后可以用qstat查看自己投遞的任務(wù)的運行情況,如下圖

任務(wù)投遞情況

第一列是任務(wù)編號, 第二列是優(yōu)先級,第三列是任務(wù)名字,在參數(shù)里沒有特別說明的情況下,SGE會用任務(wù)的來源進行命令,STDIN表示來自于標(biāo)準(zhǔn)輸入,第四列是用戶名,第五列是運行狀態(tài)("r"表示運行中), 第六列表示任務(wù)投遞和開始時間,第七列是任務(wù)投遞的節(jié)點,第8列則是要申請的線程數(shù)。在執(zhí)行完成后會在家目錄下生成"STDIN.e7883"和"STDIN.o7883", 其中7883就是任務(wù)編號, 前者存放標(biāo)準(zhǔn)錯誤輸出, 后者存放標(biāo)準(zhǔn)輸出, 因此"cat STDIN.o7883"的內(nèi)容就是ls -l的內(nèi)容。

另一種方法是先寫一個腳本然后投遞,比如先編輯一個文件"ls.sh", 內(nèi)容如下,然后用"qsub ls.sh"投遞任務(wù)。

ls -l

跟之前一樣,最后在家目錄下產(chǎn)生了"ls.sh.exxxx"和"ls.sh.exxxx"兩個文件

當(dāng)然實際時肯定沒有那么簡單,我們需要增加各種參數(shù)來調(diào)整qsub的行為,用qsub -help可以看完整的參數(shù),但是常用的為如下幾個

  • -q xxx : 指定要投遞到的隊列,如果不指定的話,SGE會在用戶可使用的隊列中選擇一個滿足要求的隊列。
  • -V: 將當(dāng)前的環(huán)境變量傳遞到執(zhí)行命令的節(jié)點中
  • cwd: 在當(dāng)前目錄下執(zhí)行任務(wù), sge的日志會輸出到當(dāng)前路徑。 不增加該指令,所有投遞的任務(wù)都會在家目錄下執(zhí)行
  • -l resource=value: 請求資源數(shù), 例如 -l vf=25G -l h=node1 就是任務(wù)的預(yù)估內(nèi)存要25G(內(nèi)存估計的值應(yīng)稍微大于真實的內(nèi)存,內(nèi)存預(yù)估偏小可能會導(dǎo)致節(jié)點跑掛), 申請在node1上運行
  • -S /bin/bash: 表示在bash環(huán)境下執(zhí)行命令。默認(rèn)tcsh.
  • -pe openmpi 4: 表示使用openmpi進行并行運算,且申請的線程是4,
  • -N 任務(wù)名: 手動執(zhí)行任務(wù)的名字
  • -j y|n :是否將標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸入合并成一個文件
  • -sync y|n: 是否等待任務(wù)結(jié)束,返回退出碼
  • -o path: 指定標(biāo)準(zhǔn)輸出的文件夾

那么接下來就可以添加這些參數(shù)運行一些命令了,例如在命令行里投遞一個比對任務(wù)

echo "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

這些參數(shù)除了在外部設(shè)置外,還可以在shell腳本里設(shè)置,如下

#!/bin/bash
#$ -S /bin/bash
#$ -V
#$ -cwd
#$ -l vf=25G
#$ -pe openmpi 8
#$ -N a.bt2
bowtie2 -p 8 -x index/ref -1 data/A_1.fq -2 data/A_2.fq | samtools sort > A.bam

查詢?nèi)蝿?wù)

除了任務(wù)投遞外,查詢?nèi)蝿?wù)也是一個非常常用的命令,除了剛才直接用qstat查看,還有如下參數(shù)比較好用

qstat -f        # 查看用戶任務(wù)
qstat -j jobId  # 按任務(wù)id查看
qstat -explain a|c|A|E -j jobID # 查看任務(wù)任務(wù)并給出解釋
qstat -u user   # 按用戶查看

任務(wù)狀態(tài):

  • qw: 表示等待狀態(tài)
  • hqw: 任務(wù)掛起等待中,待依賴的任務(wù)完成后執(zhí)行
  • Eqw: 投遞任務(wù)出錯
  • r: 表示任務(wù)正在運行
  • s: 暫時掛起
  • dr: 節(jié)點掛了之后,刪除任務(wù)就會出現(xiàn)這個狀態(tài),只有節(jié)點重啟之后,任務(wù)才會消失

刪除任務(wù)

任務(wù)刪除也比較重要,畢竟偶爾會出現(xiàn)任務(wù)投遞出錯的情況

qdel -j 1111   刪除任務(wù)號為1111的任務(wù)

其他命令

  • qrsh:與qsub相比,是交互式的投遞任務(wù),注意參數(shù):-now yes|no默認(rèn)設(shè)置為yes
    • 若設(shè)置為yes,立即調(diào)度作業(yè),如果沒有可用資源,則拒絕作業(yè),任務(wù)投遞失敗,任務(wù)狀態(tài)為Eqw。
    • 若設(shè)置為no,調(diào)度時如果沒有可用資源,則將作業(yè)排入隊列,等待調(diào)度。
    • 例子: qrsh -l vf=*G -q all.q -now no -w n *sh
  • qacct 從集群日志中抽取任意賬戶信息
  • qalter 更改已提交但正處于暫掛狀態(tài)的作業(yè)的屬性
  • qconf 為集群和隊列配置提供用戶界面
    • qconf -spl查看可用并行環(huán)境
  • qhold 阻止已提交作業(yè)的執(zhí)行
  • qhost 顯示SGE執(zhí)行主機(即各個計算節(jié)點)的狀態(tài)信息
    • qhost -j按照節(jié)點顯示任務(wù)
    • qhost -F展示每個節(jié)點的資源
  • qlogin 啟動telnet或類似的登錄會話。

案例:一個投遞比對任務(wù)的簡單腳本


#!/bin/bash

set -e
set -u
set -o pipefail

threads=8
index=index/hg19

FQ_DIR="analysis/0-raw-data"
ALIGN_DIR="analysis/2-read-align"
LOG_DIR="analysis/log"
TMP_DIR="analysis/tmp"

mkdir -p ${ALIGN_DIR}
mkdir -p ${LOG_DIR}
mkdir -p ${TMP_DIR}

tail -n+2 download_table.txt | cut -f 6 | while read id;
do
    echo "
    bowtie2 --very-sensitive-local --mm -p $threads -x $index -U ${FQ_DIR}/$id.fastq.gz 2> ${LOG_DIR}/$id.bt2.log | \
    samtools sort -@ 2 -m 1G -T ${TMP_DIR}/${id} -o ${ALIGN_DIR}/${id}.sort.bam" | qsub -V -cwd -pe openmpi $threads -N ${id}_bt2 -q all.q -S /bin/bash
done

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容