Nextflow的基本概念和使用方法

目录

  • 1. 基本概念
    • channel
    • process
    • operators
    • executors
  • 2. 常见用法
    • channel duplication
    • scatter executions
    • gather results
    • organize outputs
  • 参考资料

Nextflow是一个常用的生信流程框架,一些公司部分业务线的生信流程搭建和运行也采用了该框架,如 23andMe,美因基因等。

1. 基本概念

简单来说,可以将process理解为流程图中的节点,而channel理解为流程图中的箭头。

channel

用于存放在process之间传递的数据。可分为队列(queue)和值(value)两种类型。

channel 特点 创建方法
queue 异步、单向、消耗内容(只能读取一次) of , fromPath
value 异步、单向、不消耗内容(可多次读取) value

process

构成流程的基本单元,可以包括directives, inputs, outputs, when clause, script等五部分,语法如下:

process < name > {

   [ directives ]

   input:
    <input qualifier> <input name> [from <source channel>] [attributes]

   output:
    < process outputs >

   when:
    < condition >

   [script|shell|exec]:
   < user script to be executed >

}

input 定义了process从哪个channel接收数据。①只能包含1个输入块,输入块中可以包含1或多个输入声明。②输入限定符(qualifier)声明了待接收数据的类型,包括value, file, path, env, stdin, tuple, each等。③直接影响产生的任务数量,process会逐项消耗channel中的数据,并依次产生新任务,直到数据被完全消耗。Nextflow会为每个任务创建一个运行目录,存放相关的文件、日志、输出等。

output 定义了哪些process结果数据传输到哪个channel。①只能包含1个输出块,输出块中可以包含1或多个输出声明。②输出限定符包括val, file, path, env, stdout, tuple等。

directives 影响process执行的可选设置,如输出相关publishDir;调度和资源相关executor,queue, cpus, memory, time;异常重试相关errorStrategy, maxErrors, maxRetries等。

script 以字符串的形式定义了需要执行的命令。①只能包含1个脚本块,脚本块中可以包含1或多行字符串。②字符串可以通过使用单或双引号定义,而多行字符串是由三个单或双引号定义。除了直接定义,还可以通过关键字script,shell,exec实现更加灵活的定义。③脚本块作为bash脚本运行。

operators

用于处理channel数据,并将处理后的数据传递到新channel。可分为以下七个大类。

filtering operators 用于选择符合特定规则的数据项。

  • filter: 仅保留满足条件(字面值、正则表达式、限定符)的数据项。
  • first: 返回满足条件的第一个数据项。
  • last: 返回满足条件的最后一个数据项。
  • randomSample: 返回指定数量、且随机选取的数据项。
  • take: 仅过滤前n个数据项。
  • unique: 去除重复项。
  • distinct: 去除连续重复项。
  • until: 返回数据项直到满足特定条件时。

Transforming operators 用于转换数据项。

  • buffer:
  • collate:
  • collect:
  • flatten:
  • flatMap:
  • groupBy:
  • groupTuple:
  • map: 对各数据项依次应用函数(mapping function, 表现为closure形式),返回函数处理后的数据项。
  • reduce:
  • toList:
  • toSortedList:
  • transpose:

Splitting operators

  • splitCsv
  • splitFasta
  • splitFastq
  • splitText

Combining operators

  • cross
  • collectFile
  • combine
  • concat
  • join
  • merge
  • mix
  • phase
  • spread
  • tap

Forking operators

  • branch
  • choice
  • multiMap
  • into
  • separate
  • tap

Maths operators

  • count
  • countBy
  • min
  • max
  • sum
  • toInteger

Other operators

  • close
  • dump
  • ifEmpty
  • print
  • println
  • set
  • view

executors

用于指定process运行在何种底层执行系统的组件。底层执行系统包括local; SGE, PBS/Torque, K8S; AWS batch, Azure batch, SLURM等。
通过该组件,Nextflow实现了流程和计算平台的分离,使得用户仅需要通过修改executors的定义,就可以让流程运行在本地、集群或者云上。

executors describe directive-general directive-clusterOptions
local 运行在本地*,常用于流程的开发和测试 - -
PBS/Torque 运行在PBS集群,通过qsub**将process提交 cpus,memory,queue,time

* 本地指启动Nextflow的计算机j节点。
**需要运行在qsub可用的节点,通常为登录节点。

2. 常见用法

channel duplication

Q: 将同一channel作为多个process的输入?
A: 使用into操作符创建源channel的拷贝。

scatter executions

Q: 全局匹配到每个文件分别运行一个process?
A: 使用Channel.fromPath方法。

gather results

Q: 一次处理所有结果?
A: 使用collect操作符收集上游任务产生的所有输出,传出为一个单独输出。

Q: 分组处理所有结果
A: map + groupTuple

organize outputs

Q: 将一或多个process的输出储存到指定的目录结构
A: publishDir

参考资料

Nextflow’s documentation
Nextflow Patterns

你可能感兴趣的:(流程开发,java)