SGE(Sun Grid Engine)是一种开源的集群管理软件,用于管理和调度计算集群中的任务。它最初由Sun Microsystems开发,后来由Oracle继续开发和支持。SGE的主要目标是提供高性能计算环境,使用户能够有效地利用集群资源。
SGE集群具备以下特性:
1. 集群管理:SGE允许用户将计算集群中的资源进行管理和调度。它可以管理多台计算节点(包括服务器、工作站等),并将任务分配给这些节点进行并行计算。
2. 作业调度:SGE使用作业调度器来决定何时运行哪个任务。它可以根据用户的需求和集群的负载情况,智能地将作业分配给可用的计算节点。
3. 作业优先级:SGE支持作业的优先级设置。用户可以根据任务的重要性和紧急程度设置不同的优先级,以确保重要任务能够尽快得到执行。
4. 资源管理:SGE可以跟踪和管理集群中的资源使用情况。它可以监控计算节点的负载、内存使用情况等,并根据需要动态地分配资源。
5. 队列管理:SGE允许用户创建多个队列,每个队列可以有不同的属性和调度策略。这样可以根据不同类型的任务设置不同的调度规则,以优化集群资源的利用。
6. 用户接口:SGE提供了命令行和图形用户界面(GUI)两种方式来管理和监控集群。用户可以使用命令行工具来提交、控制和监视作业,也可以通过GUI来可视化地管理集群。
总的来说,SGE集群管理软件提供了一个强大而灵活的工具,用于管理和调度计算集群中的任务。它可以帮助用户更好地利用集群资源,提高计算效率,并提供了丰富的功能和接口来满足不同用户的需求。
SGE集群由以下几个组件组成:
- Master节点:负责接收用户提交的任务,并将任务分配给可用的节点。
- Slave节点:负责执行任务。
- Resource Manager:负责管理集群中的资源,包括节点、内存、CPU、磁盘等。
- Job Queue:负责对任务进行排队,并根据资源情况将任务分配给节点。
- Job Control System:负责监控任务的运行状态,并在任务发生异常时采取相应的措施。
SGE集群的工作流程如下:
- 用户在Master节点上提交任务。
- Master节点将任务分配给可用的Slave节点。
- Slave节点执行任务。
- Job Control System监控任务的运行状态。
- 任务完成后,Slave节点将结果返回给Master节点
sge集群管理命令
## 查看任务状态
qstat
(base) [root@qmaster ~]# qstat
job-ID prior name user state submit/start at queue slots ja-task-ID
-----------------------------------------------------------------------------------------------------------------
2 0.55500 test.csh root qw 08/23/2023 15:10:42 1
# 查看所有队列
qconf -sql
# 查看队列详情
# qconf -sq queue-name
(env_nf) [root@qmaster ~]# qconf -sq all.q
qname all.q
hostlist @allhosts
seq_no 0
load_thresholds np_load_avg=1.75
suspend_thresholds NONE
nsuspend 1
suspend_interval 00:05:00
priority 0
min_cpu_interval 00:05:00
processors UNDEFINED
qtype BATCH INTERACTIVE
ckpt_list NONE
pe_list make smp mpi
rerun FALSE
slots 1,[qmaster.local=8]
tmpdir /tmp
shell /bin/sh
prolog NONE
epilog NONE
shell_start_mode posix_compliant
starter_method NONE
suspend_method NONE
resume_method NONE
terminate_method NONE
notify 00:00:60
owner_list NONE
user_lists NONE
xuser_lists NONE
subordinate_list NONE
complex_values NONE
projects NONE
xprojects NONE
calendar NONE
initial_state default
s_rt INFINITY
h_rt INFINITY
s_cpu INFINITY
h_cpu INFINITY
s_fsize INFINITY
h_fsize INFINITY
s_data INFINITY
h_data INFINITY
s_stack INFINITY
h_stack INFINITY
s_core INFINITY
h_core INFINITY
s_rss INFINITY
h_rss INFINITY
s_vmem INFINITY
h_vmem INFINITY
# 添加队列
qconf -aq rnaseq
# 删除队列中的作业
qdel 2
# 查看作业运行详情
qstat -j 31
# 修改队列权重
qconf -mq all.q
修改结果后如下:
(env_nf) [root@qmaster ~]# qconf -sq all.q
qname all.q
hostlist @allhosts
seq_no 0
load_thresholds np_load_avg=1.75
suspend_thresholds NONE
nsuspend 1
suspend_interval 00:05:00
priority 10
min_cpu_interval 00:05:00
processors 8
qtype BATCH INTERACTIVE
ckpt_list NONE
pe_list make smp mpi
rerun FALSE
slots 6,[qmaster.local=8]
tmpdir /tmp
shell /bin/sh
prolog NONE
epilog NONE
shell_start_mode posix_compliant
starter_method NONE
suspend_method NONE
resume_method NONE
terminate_method NONE
notify 00:00:60
owner_list NONE
user_lists NONE
xuser_lists NONE
subordinate_list NONE
complex_values NONE
projects NONE
xprojects NONE
calendar NONE
initial_state default
s_rt INFINITY
h_rt INFINITY
s_cpu INFINITY
h_cpu INFINITY
s_fsize INFINITY
h_fsize INFINITY
s_data INFINITY
h_data INFINITY
s_stack INFINITY
h_stack INFINITY
s_core INFINITY
h_core INFINITY
s_rss INFINITY
h_rss INFINITY
s_vmem INFINITY
h_vmem INFINITY
## 查看指定任务状态
qstat -j job-ID
## 删除任务
qdel job-ID
## 查看计算节点资源状况信息-集群状态
qhost
#用来查看所有的job queues和job与机器的分配关系。
qaccess
## 投递任务
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:需要投递的任务,建议在脚本前加上完整路径。
输入这条命令,我们的任务就投递到服务器上啦!