我用的一个服务器上装了一个集群管理工具(SGE, Sun Grid Engine), 用于从登陆节点上向计算节点进行任务投递。一开始,不太会用,但是经过一段时间的摸索学习后,终于能顺手的用起来了。

在使用SGE之前,你得先了解SGE到底做了什么事情. SGE或者其他集群管理工作做的事情就是将用户投递的任务进行排队,然后将任务交给能够运行的结算节点执行,工作流程可以分为四步:

  1. 接受用户投放的任务
  2. 在任务运行以前,将任务放到一个存储区域
  3. 发送任务到一个执行设备,并监控任务的运行
  4. 运行结束写回结果并记录运行日志

SGE的常用命令

任务投递

SGE中投递任务所用到的命令是qsub. 最简单的用法是下面这种,即,将要执行的命令通过标准输入的方式传递给qsub

echo "ls -l " | qsub

投递之后可以用qstat查看自己投递的任务的运行情况,如下图

任务投递情况

第一列是任务编号, 第二列是优先级,第三列是任务名字,在参数里没有特别说明的情况下,SGE会用任务的来源进行命令,STDIN表示来自于标准输入,第四列是用户名,第五列是运行状态("r"表示运行中), 第六列表示任务投递和开始时间,第七列是任务投递的节点,第8列则是要申请的线程数。在执行完成后会在家目录下生成"STDIN.e7883"和"STDIN.o7883", 其中7883就是任务编号, 前者存放标准错误输出, 后者存放标准输出, 因此"cat STDIN.o7883"的内容就是ls -l的内容。

另一种方法是先写一个脚本然后投递,比如先编辑一个文件"ls.sh", 内容如下,然后用"qsub ls.sh"投递任务。

ls -l

跟之前一样,最后在家目录下产生了"ls.sh.exxxx"和"ls.sh.exxxx"两个文件

当然实际时肯定没有那么简单,我们需要增加各种参数来调整qsub的行为,用qsub -help可以看完整的参数,但是常用的为如下几个

  • -q xxx : 指定要投递到的队列,如果不指定的话,SGE会在用户可使用的队列中选择一个满足要求的队列。
  • -V: 将当前的环境变量传递到执行命令的节点中
  • cwd: 在当前目录下执行任务, sge的日志会输出到当前路径。 不增加该指令,所有投递的任务都会在家目录下执行
  • -l resource=value: 请求资源数, 例如 -l vf=25G -l h=node1 就是任务的预估内存要25G(内存估计的值应稍微大于真实的内存,内存预估偏小可能会导致节点跑挂), 申请在node1上运行
  • -S /bin/bash: 表示在bash环境下执行命令。默认tcsh.
  • -pe openmpi 4: 表示使用openmpi进行并行运算,且申请的线程是4,
  • -N 任务名: 手动执行任务的名字
  • -j y|n :是否将标准输入和标准输入合并成一个文件
  • -sync y|n: 是否等待任务结束,返回退出码
  • -o path: 指定标准输出的文件夹

那么接下来就可以添加这些参数运行一些命令了,例如在命令行里投递一个比对任务

echo "bowtie2 -p 8 -x index/ref -1 data/A_1.fq -2 data/A_2.fq | samtools sort > A.bam" | qsub -V -cwd -l vf=25G -S /bin/bash -pe openmpi 8 -N A.bt2

这些参数除了在外部设置外,还可以在shell脚本里设置,如下

#!/bin/bash
#$ -S /bin/bash
#$ -V
#$ -cwd
#$ -l vf=25G
#$ -pe openmpi 8
#$ -N a.bt2
bowtie2 -p 8 -x index/ref -1 data/A_1.fq -2 data/A_2.fq | samtools sort > A.bam

查询任务

除了任务投递外,查询任务也是一个非常常用的命令,除了刚才直接用qstat查看,还有如下参数比较好用

qstat -f        # 查看用户任务
qstat -j jobId  # 按任务id查看
qstat -explain a|c|A|E -j jobID # 查看任务任务并给出解释
qstat -u user   # 按用户查看

任务状态:

  • qw: 表示等待状态
  • hqw: 任务挂起等待中,待依赖的任务完成后执行
  • Eqw: 投递任务出错
  • r: 表示任务正在运行
  • s: 暂时挂起
  • dr: 节点挂了之后,删除任务就会出现这个状态,只有节点重启之后,任务才会消失

删除任务

任务删除也比较重要,毕竟偶尔会出现任务投递出错的情况

qdel -j 1111   删除任务号为1111的任务

其他命令

  • qrsh:与qsub相比,是交互式的投递任务,注意参数:-now yes|no默认设置为yes

    • 若设置为yes,立即调度作业,如果没有可用资源,则拒绝作业,任务投递失败,任务状态为Eqw。
    • 若设置为no,调度时如果没有可用资源,则将作业排入队列,等待调度。
    • 例子: qrsh -l vf=*G -q all.q -now no -w n *sh
  • qacct 从集群日志中抽取任意账户信息
  • qalter 更改已提交但正处于暂挂状态的作业的属性
  • qconf 为集群和队列配置提供用户界面
    • qconf -spl查看可用并行环境
  • qhold 阻止已提交作业的执行
  • qhost 显示SGE执行主机(即各个计算节点)的状态信息
    • qhost -j按照节点显示任务
    • qhost -F展示每个节点的资源
  • qlogin 启动telnet或类似的登录会话。

案例:一个投递比对任务的简单脚本


#!/bin/bashset -e
set -u
set -o pipefailthreads=8
index=index/hg19FQ_DIR="analysis/0-raw-data"
ALIGN_DIR="analysis/2-read-align"
LOG_DIR="analysis/log"
TMP_DIR="analysis/tmp"mkdir -p ${ALIGN_DIR}
mkdir -p ${LOG_DIR}
mkdir -p ${TMP_DIR}tail -n+2 download_table.txt | cut -f 6 | while read id;
doecho "bowtie2 --very-sensitive-local --mm -p $threads -x $index -U ${FQ_DIR}/$id.fastq.gz 2> ${LOG_DIR}/$id.bt2.log | \samtools sort -@ 2 -m 1G -T ${TMP_DIR}/${id} -o ${ALIGN_DIR}/${id}.sort.bam" | qsub -V -cwd -pe openmpi $threads -N ${id}_bt2 -q all.q -S /bin/bash
done

集群任务管理系统SGE的简明教程相关推荐

  1. xshell 登录计算节点_集群服务器节点远程登录使用教程

    集群服务器节点远程登录使用教程 第一步:安装两个软件--XShell &Xftp. XShell是用来远程控制集群节点的,以Linux命令行的形式运行程序. Xftp是用来远程上传下载文件的, ...

  2. (海贼)集群监控管理系统

    集群监控管理系统 设计说明 名称:集群监控管理系统 英文名:SystemMonitor 物理架构:C/S架构,即客户端,服务器型架构 开发语言:C 开发平台:CentOS  10 最新版本:v0.1 ...

  3. Hadoop-HDFS详解与HA,完全分布式集群搭建(细到令人发指的教程)

    前言 本篇篇幅较长,有许多集群搭建干货,和枯燥乏味但是面试可能问到的理论知识. 思来想去不知道怎样才能鼓励自己加油学习,想想要面对的生活还是假吧意思打开学习视频吧. 目录 一.引入 hdfs是什么 h ...

  4. nginx 集群部署_入门级实操教程!从概念到部署,全方位了解K8S Ingress!

    Kubernetes Ingress用于添加规则,以将流量从外部路由到Kubernetes集群的服务中.在本文中你将了解ingress 的概念,以及用于路由外部流量到Kubernetes deploy ...

  5. 分布式 PostgreSQL 集群(Citus),官方快速入门教程

    多租户应用程序 在本教程中,我们将使用示例广告分析数据集来演示如何使用 Citus 来支持您的多租户应用程序. 注意 本教程假设您已经安装并运行了 Citus. 如果您没有运行 Citus,则可以使用 ...

  6. k8s containerd集群配置安装完整踩坑教程

    完整踩坑和精简内容 k8s containerd配置 containerd安装参考 k8s安装参考 环境 两台机器 hostnamectl set-hostname master hostnamect ...

  7. 集群资源管理系统 yarn平台的配置

    1.    首先找到hadoop/etc/hadoop/mapred-site.xml.template文件,重名为mapred-site.xml 修改hadoop/etc/hadoop/mapred ...

  8. 群晖安装docker utorrent简明教程-傻子看了都会

    首先进套件中心,搜索docker,并安装. 打开docker,点注册表,搜索utorrent.搜索结果右键下载. 转到 映像,双击刚才下载的uTorrent. 点击高级设置 添加一个文件夹给uTorr ...

  9. 【云原生-K8s-1】kubeadm搭建k8s集群(一主两从)完整教程及kubernetes简介

最新文章

  1. 【已解决】TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘_Python系列学习笔记
  2. SpringData ES中字段名和索引中的列名字不一致导致的无法查询数据的解决方法
  3. 一文带你吃透Vue生命周期(结合案例通俗易懂)
  4. Oracle中的wmsys.wm_concat
  5. Python基础(随笔)
  6. 关于在vSphere环境中,安装WindowsServer2008_R2_x64系统,分区格式为GPT,隐藏分区为200M方法心得
  7. 36.Linux/Unix 系统编程手册(下) -- 进程资源
  8. C#与OC交互方法中的ong参数的兼容性问题
  9. 使用scala使用fastjson将map转json报错
  10. 平面关系:平行,垂直,夹角判定
  11. [翻译]Web开发牛人访谈:你们都在用什么?
  12. 版式设计——网页排版
  13. 渐近记号Θ、Ο、o、Ω、ω详解
  14. 11.2.5 云计算、大数据时代
  15. 福州大学数据科学与计算机学院分数,2021福州大学录取分数线-福州大学分数线-2021福州大学录取查询网址...
  16. PaddlePaddle - 人脸关键点检测课程笔记
  17. linux 时钟分频,浅析AD9522时钟分频电路原理
  18. 网络安全专栏——修改电脑密码修改虚拟机密码(图文)
  19. 如何查看PostgreSQL数据库的版本
  20. 家用计算机的发展历史,计算机发展简史

热门文章

  1. 国家税务总局发票查验平台爬虫
  2. remote: error: cannot lock ref ‘refs/heads/dev/mz/dev‘: ‘refs/heads/dev‘ exists; cannot create ‘refs
  3. 【2022工作】【httplib工作记录】【使用curl Post 上传文件】
  4. 基于RK3399+PID的手持稳定云台的设计与实现
  5. 51中ret和reti的区别
  6. python游戏编程入门
  7. DAMA-第三章(数据治理)
  8. Python爬虫技术栈 | urllib库urllib3库
  9. win7下U盘安装Ubuntu14.04桌面版实现双系统
  10. 【Android】【Android相关网址】Android官方网站索引