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
-- 显示执行节点的状态信息
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 xxx@XXX.com
#$ -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
(任务挂起等待中,待依赖的任务完成后执行)
qhold + jobid
-
qrls
释放先前被阻止执行的作业
qrls
的语法:qrls jobid
qrls+jobid
任务重新运行
6.2.2 qmod -s
和 qmod -us
-
qmod -s + jobidqmod -s
暂停已经在运行的作业
qmod -s
的语法:qmod -s jobid
任务挂起后,状态变为s
(暂时挂起)
任务暂停 -
qmod -us + jobidqmod -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
的作业qalter -N
修改后的结果:
qalter -N RESULT 204065
6.4 删除作业 qdel
qdel
常用的参数:
-f
强制删除
-u
删除指定用户的作业
网友评论