SGE(Sun Grid Engine)是Linux环境下最成熟的开源集群作业调度系统之一,对于中小规模HPC集群,它依然是性价比最高的选择,但需注意原版社区已停止更新,生产环境建议采用活跃分支Open Grid Scheduler。
sge linux 安装教程:两种主流方式详解
部署SGE首先需要确定操作系统和版本,业内专家指出,包管理器安装最省力,但版本可能滞后;源码编译能获取最新特性,但需要额外配置,以下两种方式覆盖大多数Linux发行版。
通过EPEL仓库安装(适用于RHEL/CentOS)
基于Red Hat的发行版通常通过EPEL(Extra Packages for Enterprise Linux)获取SGE包,操作步骤如下:
- 启用EPEL仓库:
yum install epel-release - 安装SGE核心组件:
yum install gridengine gridengine-server gridengine-client - 安装完成后,执行
qconf -au添加管理员用户,并使用qconf -as添加主机。
注意:EPEL中SGE版本固定为8.1.6(基于原版),虽然稳定但缺少后续修复,若需要更新的功能,建议使用源码方式。
从源码编译最新版(适用于Ubuntu/Debian)
源码编译适合追求最新版本或需要自定义功能的场景,行业内普遍使用Open Grid Scheduler(OGS)的GitHub仓库作为上游。
- 克隆仓库:
git clone https://github.com/gridengine/gridengine.git - 安装依赖:
apt-get install build-essential libxt-dev libmotif-dev - 进入源码目录,执行
./autoreconf生成配置脚本,然后./configure并指定安装路径。 - 编译与安装:
make && make install
编译过程中常见错误包括缺少X11库或Motif开发包,根据提示安装对应依赖即可,安装后需要配置/etc/hosts保证主机名解析正常,否则execd服务无法启动。
sge linux 常用命令:作业提交、监控与删除
掌握常用命令是使用SGE的基础,根据社区统计,qsub、qstat、qdel是最频繁使用的三个命令,覆盖了作业生命周期管理。
作业提交命令 qsub
qsub是提交作业的入口,基本用法:
qsub job.sh提交脚本作业qsub -cwd -l h_vmem=2G -pe smp 4 job.sh指定运行目录、虚拟内存要求和并行环境
常用参数包括:
-N指定作业名称-o和-e分别指定标准输出和错误日志文件-hold_jid依赖前序作业完成后启动
作业状态查看 qstat 与 qhost
qstat用于查看作业队列状态:
qstat -f显示所有队列和作业详情qstat -u <username>筛选特定用户作业qstat -s r仅显示运行中的作业
qhost则展示节点资源状态:
qhost -q显示每个节点上各队列的负载情况qhost -j显示节点上正在运行的作业列表
作业删除与优先级管理
qdel <jobid>删除指定作业,但无法删除正在运行的作业(需先qmod -d)qalter -p <priority>调整作业优先级,取值范围-1023到1024,负值降低优先级
实际使用中,管理员常通过qconf定义队列的priority属性,避免用户随意调整优先级导致资源争抢。
sge linux 与 slurm 对比:核心差异与选型建议
在选择集群调度器时,管理员常纠结于SGE和Slurm,行业共识认为,SGE在传统学术HPC环境中根基深厚,但Slurm在大型集群和云原生场景中更具优势。
| 对比维度 | SGE(含Open Grid Scheduler) | Slurm |
|---|---|---|
| 架构设计 | 双主模式(master/slave) | 扁平架构,无单点故障 |
| 作业依赖 | 支持hold_jid,但无原生DAG |
内建作业依赖关系图 |
| 资源管理 | 基于队列(queue)和复杂资源(complex) | 基于分区(partition)和QoS |
| 社区活跃度 | 原版停止更新,OGS每月有少量commit | 每周多次commit,主流HPC集群首选 |
| 易用性 | 学习曲线较平缓,文档丰富 | 命令更直观,但配置复杂 |
SGE的优势:对于100-500节点的集群,SGE的队列模型(queue)比Slurm的分区更直观,且
qsub脚本语法与PBS相似,方便迁移,据统计,一些生命科学和气象领域的老牌机构仍在使用SGE,主要是因为现有脚本资源和运维惯性。
Slurm的优势:支持gpu资源管理(如--gpus)、原生REST API、以及更灵活的作业依赖(如--dependency=afterok),在云环境(如AWS ParallelCluster)中,Slurm是默认调度器。
选型建议:
- 如果你已有大量SGE脚本,且集群规模不超过500节点,继续使用Open Grid Scheduler即可。
- 如果从零开始搭建集群,且未来可能扩展至上千节点,直接选择Slurm更稳妥。
- 需要并行环境(如MPI)时,两者都支持,但Slurm的
srun命令在交互式作业上更高效。
sge linux 集群配置实战:队列与资源管理
配置SGE集群的核心是队列定义和资源限制,以下步骤基于Open Grid Scheduler。
队列配置 qconf 命令详解
- 添加队列:
qconf -aq <queue_name>,然后编辑队列属性,如slots(最大槽位数)、qtype(批处理模式或交互模式)。 - 修改队列:
qconf -mq <queue_name> - 查看队列列表:
qconf -sql
实际场景中,管理员常为不同用户组配置独立队列,限制每个用户的运行槽位数,并设置rerun属性允许作业失败后自动重试。
用户权限管理与共享树
- 添加用户到集群:
qconf -au <username> - 设置共享树(share tree):通过
qconf -ms定义用户组权重,实现公平调度,教学组权重为1,科研组权重为2,则科研组可获取双倍资源。
内存、CPU等资源限制设置
- 配置复杂资源(complex):
qconf -mc,可定义h_vmem(虚拟内存)、h_cpu(CPU时间)等。 - 在队列中引用这些资源:
qconf -mq <queue_name>,设置complex_values,如h_vmem=2G。
注意:资源限制必须在作业提交时生效,例如qsub -l h_vmem=4G,如果作业超出限制,SGE会将其挂起或杀死,管理员可通过
qconf -sc修改负载传感器的告警阈值。
sge linux 常见错误与解决方法
运维中常见问题有以下几种,均可通过检查日志和调整配置解决。
- execd无法连接master:原因通常是主机名解析失败,检查
/etc/hosts包含master的IP和主机名;确认$SGE_ROOT/$SGE_CELL/common/act_qmaster正确。 - 作业始终处于qw状态(等待中):可能原因包括队列关闭、槽位不足、资源需求不满足,使用
qstat -explain查看具体原因,或qhost -q查看各队列槽位占用。 - qsub提交时报错”无法解析主机”:SGE会反向解析提交端主机名,确保DNS或hosts文件设置正确,且在
qconf -as中添加了执行节点。 - 作业运行时内存溢出:检查
h_vmem是否设置合理,或使用qrsh交互式调试,若节点内存不足,需调整qconf -mq中的hlq(高负载队列)限制。
SGE尽管原版停止更新,但Open Grid Scheduler分支依然稳定运行在大量生产集群中,对于中小规模HPC环境,它凭借低门槛、易维护和丰富的脚本生态,仍是值得信赖的选择,若你正规划新集群,不妨先评估SGE,再决定是否迁移到Slurm等更现代化的调度器。
sge linux 常见问题解答
SGE Linux是否完全免费?
SGE最初是Sun公司商业产品,但开源后以Sun Open Grid Engine发布,所有功能免费,无许可费用,Open Grid Scheduler作为社区分支,同样采用开源协议,可自由使用和分发。
SGE与Open Grid Scheduler有什么区别?
Open Grid Scheduler(OGS)是SGE的社区维护分支,主要修复了原版8.1.6及后续版本中发现的bug,并增加了对较新Linux内核和编译器的支持,OGS完全兼容原版qsub脚本,建议新用户直接安装OGS而非原版SGE。
SGE适合多大规模的集群?
SGE的设计目标为中小型集群,通常建议节点数不超过500,作业并发数不超过5万,在超过1000节点时,调度器响应可能变慢,且Master单点故障风险增加,此时更适合使用Slurm或PBS Professional。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/506194.html



