nextflow中文文档(2):基础概念
基础概念
Nextflow是一个响应式工作流框架和编程DSL,它简化了数据密集型计算管道的编写。
它的设计理念是,Linux平台是数据科学的通用语。Linux提供了许多简单但功能强大的命令行和脚本工具,当链接在一起时,可以方便地进行复杂的数据操作。
Nextflow扩展了这种方法,添加了定义复杂程序交互和基于数据流编程模型的高级并行计算环境的能力。
Processes and channels
在实践中,Nextflow管道脚本是通过连接不同的进程来创建的。每个进程都可以用任何可以在Linux平台上执行的脚本语言编写(Bash、Perl、Ruby、Python等)。
进程是独立执行的,并且彼此隔离,也就是说,它们不共享共同的(可写的)状态。它们通信的唯一方式是通过asynchronous FIFO queues,在Nextflow中称为channels。
任何流程都可以将一个或多个 channels定义为input和output。这些流程之间的交互,以及最终的管道执行流本身,是由这些输入和输出声明隐式定义的。
Nextflow脚本如下所示:
// Script parameters
params.query = "/some/data/sample.fa"
params.db = "/some/path/pdb"
db = file(params.db)
query_ch = Channel.fromPath(params.query)
process blastSearch {
input:
file query from query_ch
output:
file "top_hits.txt" into top_hits_ch
"""
blastp -db $db -query $query -outfmt 6 > blast_result
cat blast_result | head -n 10 | cut -f 2 > top_hits.txt
"""
}
process extractTopHits {
input:
file top_hits from top_hits_ch
output:
file "sequences.txt" into sequences_ch
"""
blastdbcmd -db $db -entry_batch $top_hits > sequences.txt
"""
}
上面的示例定义了两个流程。它们的执行顺序不是由脚本中blastSearch进程出现在extractTopHits之前这一事实决定的(也可以反过来写)。
由于第一个进程在其输出声明中定义了通道top_hits_ch,而进程extractTopHits在其输入声明中定义了通道,因此建立了一个通信链接。
通过通道进行链接意味着extractTopHits正在等待blastSearch的输出,然后在通道有内容时再响应运行。
请阅读Channel(通道)和Process(进程部)分以了解有关这些特性的更多信息。
Execution abstraction
当进程定义必须执行什么命令或脚本时,执行器决定该脚本在目标系统上的实际运行方式。
如果未指定,则在本地计算机上执行进程。本地执行器对于管道开发和测试非常有用,但对于公测的计算管道(pipelines),通常需要一个HPC或云平台。
换句话说,Nextflow提供了管道功能逻辑和底层执行系统之间的概念。因此,只需在配置文件中简单地定义目标执行平台,就可以编写管道并在您的计算机、网格平台或云上无缝地运行它,而不需要修改它
支持以下处理调度程序:
Open grid engine
Univa grid engine
Platform LSF
Linux SLURM
PBS Works
Torque
HTCondor
支持以下云平台:
Amazon Web Services (AWS)
Google Cloud Platform (GCP)
Kubernetes
请阅读 Executors以了解有关Nextflow执行器的更多信息。
脚本语言
使用Nextflow,基本不需要学习新的语言。在大多数情况下,用户可以利用他们目前的技能来开发Nextflow工作流程。但是,它也提供了一个强大的脚本DSL。
Nextflow脚本是Groovy programming language的扩展,而Groovy又是Java编程语言的超集。Groovy可以被看作是Java的Python,因为它简化了代码的编写,而且更容易理解。
阅读 Nextflow scripting一节以了解Nextflow脚本语言。
配置选项(Configuration options)
管道配置属性在名为nextflow的文件中定义。在管道执行目录中配置。
这个文件可以用来定义使用哪个执行器、进程的环境变量、管道参数等。
基本配置文件如下所示:
process {
executor='sge'
queue = 'cn-el6'
}
请阅读Configuration部分以了解有关Nextflow配置文件和设置的更多信息。
Ref
https://www.nextflow.io/docs/latest/basic.html#configuration-options