在Rocky 9.2 Linux系统部署SGE

目前,最新版本的SGE版本是8.1.9版本,其软件较旧,在Rocky 9.2 Linux系统上使用其高版本的GCC进行编译基本不会成功。于是采用特别提供repo源进行安装,即采用某些高人已经编译好的rpm软件进行安装。

1. 设置各节点的主机名

部署SGE前,需要设置好各个节点的主机名,需要修改3个文件。以设置node1主机为例:

echo 'NETWORKING=yes
HOSTNAME=node1' > /etc/sysconfig/network
echo 'node1' > /proc/sys/kernel/hostname
echo 'node1' > /etc/hostname

然后在各节点上设置主机名和其IP映射信息:

echo '10.0.0.1 node1
10.0.0.2 node2
10.0.0.3 node3
10.0.0.4 node4
10.0.0.5 node5
10.0.0.6 node6
10.0.0.7 node7
10.0.0.8 node8' > /etc/hosts

2. 在管理节点上安装SGE软件

首先,开放防火墙端口。

sudo firewall-cmd --add-port=992/udp --permanent
sudo firewall-cmd --add-port=6444/tcp --permanent
sudo firewall-cmd --add-port=6445/tcp --permanent
sudo systemctl restart firewalld.service

然后,安装SGE软件可能依赖的一些系统软件。

sudo dnf -y install csh java-1.8.0-openjdk java-1.8.0-openjdk-devel gcc ant automake hwloc-devel openssl-devel libdb-devel pam-devel libXt-devel motif-devel ncurses-libs ncurses-devel ant-junit junit javacc libdb-utils jemalloc munge-libs

继续,正式安装SGE软件,采用loveshack编译的SGE

sudo wget https://copr.fedorainfracloud.org/coprs/loveshack/SGE/repo/epel-9/loveshack-SGE-epel-9.repo -P /etc/yum.repos.d
sudo dnf -y install gridengine gridengine-devel gridengine-execd gridengine-drmaa4ruby gridengine-qmon
# 需要强制安装gridengine-qmaster,正常安装保存血少libdb4,而Rocky9默认安装libdb5。
sudo dnf -y download gridengine-qmaster
sudo rpm -ivh --nodeps gridengine-qmaster-8.1.9-6.el9.x86_64.rpm
sudo chown -R chenlianfu:chenlianfu /opt/sge

最后,在管理节点上部署SGE的qmaster服务。

cd /opt/sge
./install_qmaster
# 安装到靠后时,启动了Grid Engine qmasster服务,然后可以提供部署SGE的节点主机名信息,按y和Enter键使用一个文件来提供主机信息,输入文件路径/etc/hosts提供加入到SGE集群系统的主机信息。有利于后续在各计算节点上部署execd服务。

3. 在计算节点上部署SGE软件

首先安装SGE依赖的系统软件,然后部署SGE的execd服务。

sudo dnf -y install csh java-1.8.0-openjdk java-1.8.0-openjdk-devel gcc ant automake hwloc-devel openssl-devel libdb-devel pam-devel libXt-devel motif-devel ncurses-libs ncurses-devel ant-junit junit javacc libdb-utils jemalloc munge-libs

cd /opt/sge
./install_execd
# 全程按Enter键直到完毕即可。

4. 启动SGE软件

部署完毕后,若需要使用SGE软件,则执行如下命令载入SGE的环境变量信息:

source /opt/sge/default/common/settings.sh

或将该信息添加到~/.bashrc从而永久生效:

echo 'source /opt/sge/default/common/settings.sh' >> ~/.bashrc
source ~/.bashrc

启动SGE软件方法:

sudo /opt/sge/default/common/sgemaster restart   # 控制节点启动
sudo /opt/sge/default/common/sgeexecd restaart   # 计算节点启动

查看SGE软件运行日志文件:

Qmaster:      /opt/sge/default/spool/qmaster/messages
Exec daemon:  /opt/sge/default/spool/<hostname>/messages

我通过编写一个程序:keep_SGE,使用root用户或无密码sudo权限运行后能自动维持管理节点或计算节点的SGE服务。再继续通过例行任务流程,能使集群中服务器再SGE系统中的稳定性。

sudo mkdir /root/bin
sudo wget http://chenlianfu.com/public/bin/keep_SGE -P /root/bin/
sudo echo -e "1\t*\t*\t*\t*\t/root/bin/keep_SGE" > crontab.txt
sudo crontab crontab.txt
sduo rm crontab.txt

5. 使用SGE软件

部署完毕SGE后,会生成一个默认主机用户组@allhosts,它包含所有的执行节点;生成一个默认的all.q队列名,它包含所有节点所有计算资源。默认的队列包含的计算资源是最大的。 通过使用命令qconf -mq queuename来对队列进行配置。修改hostlist来配置该队列可以使用执行主机;修改slots来配置各台执行主机可使用的线程数。从而对队列的计算资源进行设置。

使用qconf命令对SGE进行配置:

qconf -ae hostname
    添加执行主机
qconf -de hostname
    删除执行主机
qconf -sel
    显示执行主机列表

qconf -ah hostname
    添加管理主机
qconf -dh hostname
    删除管理主机
qconf -sh
    显示管理主机列表

qconf -as hostname
    添加提交主机
qconf -ds hostname
    删除提交主机
qconf -ss
    显示提交主机列表

qconf -ahgrp groupname
    添加主机用户组
qconf -mhgrp groupname
    修改主机用户组
qconf -shgrp groupname
    显示主机用户组成员
qconf -shgrpl
    显示主机用户组列表

qconf -aq queuename
    添加集群队列
qconf -dq queuename
    删除集群队列
qconf -mq queuename
    修改集群队列配置
qconf -sq queuename
    显示集群队列配置
qconf -sql
    显示集群队列列表

qconf -ap PE_name
    添加并行化环境
qconf -mp PE_name
    修改并行化环境
qconf -dp PE_name
    删除并行化环境
qconf -sp PE_name
    显示并行化环境
qconf -spl
    显示并行化环境名称列表

qstat -f
    显示执行主机状态
qstat -u user
    查看用户的作业
qhost
    显示执行主机资源信息

使用qsub提交作业

qsub简单示例:
$ qsub -V -cwd -o stdout.txt -e stderr.txt run.sh

其中run.sh中包含需要运行的程序,其内容示例为如下三行:
#!/bin/bash
#$ -S /bin/bash
perl -e 'print "abc\n";print STDERR "123\n";'

qsub的常用参数:
-V
    将当前shell中的环境变量输出到本次提交的任务中。
-cwd
    在当前工作目录下运行程序。默认设置下,程序的运行目录是当前用户在其计算节点的家目录。
-o
    将标准输出添加到指定文件尾部。默认输出文件名是$job_name.o$job_id。
-e
    将标准错误输出添加到指定文件尾部。默认输出文件名是$job_name.e$job_id。
-q
    指定投递的队列,若不指定,则会尝试寻找最小负荷且有权限的队列开始任务。
-S
    指定运行run.sh中命令行的软件,默认是tcsh。推荐使用bash,设置该参数的值为 /bin/bash 即可,或者在run.sh文件首部添加一行#$ -S /bin/bash。若不设置为bash,则会在标准输出中给出警告信息:Warning: no access to tty (Bad file descriptor)。
-hold_jid
    后接多个使用逗号分隔的job_id,表示只有在这些job运行完毕后,才开始运行此任务。
-N
    设置任务名称。默认的job name为qsub的输入文件名。
-p
    设置任务优先级。其参数值范围为 -1023 ~ 1024 ,该值越高,越优先运行。但是该参数设置为正数需要较高的权限,系统普通用户不能设置为正数。
-j y|n
    设置是否将标准输出和标准错误输出流合并到 -o 参数结果中。
-pe
    设置并行化环境。

任务提交后的管理:

$ qstat -f
    查看当前用户在当前节点提交的所有任务,任务的状态有4中情况:qw,等待状态,刚提交任务的时候是该状态,一旦有计算资源了会马上运行;hqw,该任务依赖于其它正在运行的job,待前面的job执行完毕后再开始运行,qsub提交任务的时候使用-hold_jid参数则会是该状态;Eqw,投递任务出错;r,任务正在运行;s,被暂时挂起,往往是由于优先级更高的任务抢占了资源;dr,节点挂掉后,删除任务就会出现这个状态,只有节点重启后,任务才会消失。

$ qstat -j jobID
    按照任务id查看

$ qstat -u user
    按照用户查看

$ qdel -j jobID
    删除任务

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据