集群和节点的概念:
集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。其中单个的计算机系统就是集群的节点(node)【即集群的基本单位是节点】。一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。
集群优越性:
使用集群起源于其良好的性能可扩展性(scalability)。提高cpu主频和总线带宽是最初提供计算机性能的主要手段。但是这一手段对系统性能的提供是有限的。接着人们通过增加CPU个数和内存容量来提高性能,于是出现了向量机,对称多处理机(SMP)等。但是当CPU的个数超过某一阈值,像SMP这些多处理机系统的可扩展性就变的极差。主要瓶颈在于CPU访问内存的带宽并不能随着CPU个数的增加而有效增长。因此,集群的优势显现出来了,集群系统的性能随着CPU个数的增加几乎是线性变化的。下图显示了这种情况:
其它优势:
- 高可用性:集群中的一个节点失效,它的任务可以传递给其他节点。可以有效防止单点失效。
- 高性能:负载平衡集群允许系统同时接入更多的用户。
- 高性价比:可以采用廉价的符合工业标准的硬件构造高性能的系统。
了解了集群和节点的概念后,就是使用了。
在服务器提交任务之前应养成看节点占用情况的习惯,然后将任务提交到free的节点,避免任务一直在队列中等待的情况,查看占用情况有下面两种方式。
我们首先使用SGE集群管理系统在登录节点【登录节点一般就是你登录的节点】投递任务,SGE接收到任务后会将任务储存至一个指定区域,随后将任务投递至一个计算节点运行,运行结束后将结果返回。这样我们我们在登录节点投递任务后,就可以关掉电脑做其他事,SGE会把我们的任务安排在计算节点里执行。
## 投递任务
qsub -cwd -l vf=*G,p=n,h=node -q bc_rd.q -P RNAProj -binding linear:2 *.sh
-cwd:在当前目录下执行任务,同时,SGE的运行日志也会输出在当前目录
-l:申请所需的资源。vf=*G设置任务预计使用的内存大小(一般设置的值要稍微大一些,负责容易让节点挂掉),p=n设置所需的CPU数[一个cpu核心数对应一个线程],h=node设置任务指定投递的节点名称。日常使用时,并不是每次都要设置这三个参数,大家可以根据自己的需要自行删减。
-q:指定任务要投递到队列名称。
-P: 指定将此作业分配给的项目。如果管理员向你及部分其他用户授予向特定项目提交作业的权限,那么需要增加这一参数。
-binding linear:2 #将作业绑定到处理器核心
*.sh:需要投递的任务,建议在脚本前加上完整路径。
输入这条命令,我们的任务就投递到服务器上啦!
任务投递成功后,我们可以使用"qstat "查询任务的状态。
## 查看任务状态
qstat
## 查看指定任务状态
qstat -j job-ID
## 删除任务
qdel job-ID
## 查看计算节点资源状况信息
qhost
job-ID:任务号
qstate:任务状态。一般会有以下情况,"qw"代表任务在等待执行状态,"r"代表任务正在执行,"s"代表任务暂时挂起,"dr"代表任务所在的计算节点挂了,需要联系管理员重启节点。任务还有其他状态,大家具体遇到时可以查询一下。
queue:任务所在的队列及计算节点。如图所示,代表任务被投递在了"rna"队列的“cu-0029"队列上。
qhost:使用该命令可以查看计算节点的资源状况,方便我们选择任务投递的队列和节点。
qdel :删除任务 qdel jobid #可同时删除多个,如qdel jobid1 jodid2
qdel -u username #删除某用户所有任务
qhold命令:挂起qw的任务 ,qhold jobid
qhold -u *
qrls jobid #恢复
qmod命令:挂起running中的任务, qmod -sj jobid
qmod -usj jobid #恢复
如果未提交到SGE系统,直接运行的命令用kill -STOP pid 挂起,用kill -CONT pid恢复。