主要有三部分:
安装:服务器端搭建,一般服务端只需要搭一次
配置:服务端和节点,后续主要是新增节点才需配置
使用:一般使用者可以忽略前两个,直接看使用说明
安装
一些参考网站
http://linoxide.com/ubuntu-how-to/setup-open-grid-engine-cluster-ubuntu
http://www.yinqisen.cn/blog-212.html
https://informatics.malariagen.net/2011/06/01/gridengine-the-ubuntu-debian-way/
http://m.blog.csdn.net/article/details?id=42707901
server服务端需要一下配置:
apt-get update
adduser gsadmin --uid 500 #pass cool
wget http://downloads.sourceforge.net/project/gridscheduler/GE2011.11p1/GE2011.11p1.tar.gz
tar -zxvf GE2011.11p1.tar.gz
mv GE2011.11p1 /home/gsadmin/
chown -R gsadmin:gsadmin /home/gsadmin/
##Setup NFS Server on Master Host
apt-get install nfs-kernel-server
##may be /etc/exports: Permission denied
echo "/home/gsadmin *(rw,sync,no_subtree_check)" >> /etc/exports
exportfs -a
service nfs-kernel-server restart
##Setup OpenJDK-8 On Master Node
apt-get install openjdk-8-jdk
##setting jdk
echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/" >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
echo "export PATH=$PATH:/usr/lib/jvm/java-8-openjdk-amd64/bin" >> ~/.bashrc
export PATH=$PATH:/usr/lib/jvm/java-8-openjdk-amd64/bin
echo "export SGE_ROOT=/home/gsadmin/GE2011.11p1" >>~/.bashrc
export SGE_ROOT=/home/gsadmin/GE2011.11p1/
export PATH=$PATH:~/GE2011.11p1/bin/linux-x64:$SGE_ROOT
##server
ssh-keygen
##if no ssh install openssh-server
####Open Grid Scheduler/Grid Engine Installation
#Server
cd /home/gsadmin/GE2011.11p1/source/clients/gui-installer/templates/
./start_gui_installer.sh
##OR
##delete package and config: sudo apt-get --purge remove gridengine-master
##or sudo aptitude purge gridengine-master
apt-get install gridengine-master
服务器端初次配置
#假设主机是 master01; 第一句的两个gsadmin 分别代表是用户和用户组,为了方便起了一样的名字
#把用户gsadmin加到组gsadmin里面
qconf -au gsadmin gsadmin
#把主机加到提交主机里面
qconf -as master01
qconf -ahgrp @allhosts # just save the file without modifying it
#Add an execution host:把主机加到执行主机里面
qconf -aattr hostgroup hostlist master01 @allhosts
qconf -aq main.q # just save the file without modifying it
#Add the host group to the queue:把主机组加到队列里面
qconf -aattr queue hostlist @allhosts main.q
# 4 by default for all nodes, 3 specifically for master01, which leaves 1 of the 4 cpus free for the master process
qconf -aattr queue slots "4, [master01=3]" main.q
配置host 通过名字来访问结点
增加hosts
sudo vim /etc/hosts
#例如如下 其中 slave01 是主机master,其他是client
202.116.161.100 slave01
114.113.126.32 coolb-PowerEdge-R730
192.168.68.39 hp2
192.168.68.40 gcxyb
192.168.68.42 hp1
结点配置
客户端安装:
apt-get install gridengine-client gridengine-qmon gridengine-exec #gridengine-master
会弹出框需要填写一些信息
注意填写master为对应的master主机即可,其他可以默认。
填写完之后需要重新启动exec
#重启服务
ps aux |grep sge
sudo /etc/init.d/gridengine-exec restart
配置:
#加入主机队列 hp1是client,假设为当前配置的机器
qconf -ah hp1 cool3-PowerEdge-T130
#加入提交队列
qconf -as hp1
# 把客户端节点加进去到hostlist里面
qconf -aattr hostgroup hostlist hp1 @allhosts
#或者直接编辑配置
qconf -shgrpl #显示已存在的主机组
qconf -mhgrp @allhosts #配置(修改)一个主机组,@allhosts是默认的主机列表,根据查看到的修改
使用:
常用的SGE命令:
1. 投递任务到指定队列main.q
方法一: qsub -cwd -l vf=*G -q main.q *.sh
方法二: qsub -cwd -S /bin/bash -l vf=*G -q main.q *.sh
-cwd 表示在当前路径下投递,sge的日志会输出到当前路径。
-l vf=*G 任务的预估内存,内存估计的值应稍微大于真实的内存,内存预估偏小可能会导致节点跑挂。
-q 指定要投递到的队列,如果不指定的话,SGE会在用户可使用的队列中选择一个满足要求的队列。
注: 方法一和方法二都可以投递任务到指定队列,但是方法一可能会输出警告信息“Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.” 这是因为SGE默认使用的是tcsh,而*.sh使用的是bash,所以应该在投递的时候指明命令解释器。若非要使用方法一的话,可以在脚本*.sh的开头加上#$ -S /bin/bash。
2. 投递任务到指定节点
qsub -cwd -l vf=*G -l h=node1 *.sh
qsub -cwd -l vf=*G -l h=node1 -P project -q main.q *.sh
-P 参数指明任务所属的项目
3. 查询任务
qstat -f /qstat 查看所有任务
qstat -j jobId 按任务id查看
qstat -u user 按用户查看
任务状态:
qw 表示等待状态
Eqw 投递任务出错
r 表示任务正在运行
dr 节点挂了之后,删除任务就会出现这个状态,只有节点重启之后,任务才会消失
4. 删除任务
qdel -j 1111 删除任务号为1111的任务
5. 其他命令
qrsh 与qsub相比,是交互式的投递任务,注意参数:
-now yes|no 默认设置为yes
若设置为yes,立即调度作业,如果没有可用资源,则拒绝作业,任务投递失败,任务状态为Eqw。
若设置为no,调度时如果没有可用资源,则将作业排入队列,等待调度。
例子: qrsh -l vf=*G -q all.q -now no -w n *sh
qacct 从集群日志中抽取任意账户信息
qalter 更改已提交但正处于暂挂状态的作业的属性
qconf 为集群和队列配置提供用户界面
qhold 阻止已提交作业的执行
qhost 显示SGE执行主机(即各个计算节点)的状态信息
qlogin 启动telnet或类似的登录会话。
6. bash脚本与Linux环境变量
为了防止脚本运行时找不到环境变量,在投递的bash脚本的前面最好加上以下两句话:(原因见1)
#! /bin/bash
#$ -S /bin/bash
7.使用grid最好切换到gsadmin用户下,因为集群里每一台服务器的gsadmin目录都通过nfs挂载了master的gsadmin。所有服务器都共享master(cool4)的gsadmin目录
1. 投递任务到指定队列main.q
方法一: qsub -cwd -l vf=*G -q main.q *.sh
方法二: qsub -cwd -S /bin/bash -l vf=*G -q main.q *.sh
-cwd 表示在当前路径下投递,sge的日志会输出到当前路径。
-l vf=*G 任务的预估内存,内存估计的值应稍微大于真实的内存,内存预估偏小可能会导致节点跑挂。
-q 指定要投递到的队列,如果不指定的话,SGE会在用户可使用的队列中选择一个满足要求的队列。
注: 方法一和方法二都可以投递任务到指定队列,但是方法一可能会输出警告信息“Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.” 这是因为SGE默认使用的是tcsh,而*.sh使用的是bash,所以应该在投递的时候指明命令解释器。若非要使用方法一的话,可以在脚本*.sh的开头加上#$ -S /bin/bash。
2. 投递任务到指定节点
qsub -cwd -l vf=*G -l h=node1 *.sh
qsub -cwd -l vf=*G -l h=node1 -P project -q main.q *.sh
-P 参数指明任务所属的项目
3. 查询任务
qstat -f /qstat 查看所有任务
qstat -j jobId 按任务id查看
qstat -u user 按用户查看
任务状态:
qw 表示等待状态
Eqw 投递任务出错
r 表示任务正在运行
dr 节点挂了之后,删除任务就会出现这个状态,只有节点重启之后,任务才会消失
4. 删除任务
qdel -j 1111 删除任务号为1111的任务
5. 其他命令
qrsh 与qsub相比,是交互式的投递任务,注意参数:
-now yes|no 默认设置为yes
若设置为yes,立即调度作业,如果没有可用资源,则拒绝作业,任务投递失败,任务状态为Eqw。
若设置为no,调度时如果没有可用资源,则将作业排入队列,等待调度。
例子: qrsh -l vf=*G -q all.q -now no -w n *sh
qacct 从集群日志中抽取任意账户信息
qalter 更改已提交但正处于暂挂状态的作业的属性
qconf 为集群和队列配置提供用户界面
qhold 阻止已提交作业的执行
qhost 显示SGE执行主机(即各个计算节点)的状态信息
qlogin 启动telnet或类似的登录会话。
6. bash脚本与Linux环境变量
为了防止脚本运行时找不到环境变量,在投递的bash脚本的前面最好加上以下两句话:(原因见1)
#! /bin/bash
#$ -S /bin/bash
7.使用grid最好切换到gsadmin用户下,因为集群里每一台服务器的gsadmin目录都通过nfs挂载了master的gsadmin。所有服务器都共享master(cool4)的gsadmin目录
挂载远程服务器网络硬盘的方法:
见参考文献:挂载网络硬盘
加上下面这一句 服务器重启之后就不需要重新挂载一遍
echo "master_ip:/home/gsadmin /home/gsadmin nfs" >> /etc/fstab