基本概念
Nextflow是一个反应式工作流框架和编程DSL ,可以简化数据密集型pipelines的编写。
它的设计理念是Linux平台是数据科学的通用语言。Linux提供了许多简单但功能强大的命令行和脚本工具,这些工具在链接在一起时可以简化复杂的数据操作。
Nextflow扩展了这种方法,增加了定义复杂程序交互的能力和基于数据流编程模型的高级并行计算环境。
Processes and channels
实际上,通过将不同的processes连接在一起来创建NextflowPipeline 脚本。每个processes都可以用任何可以由Linux平台(Bash,Perl,Ruby,Python等)执行的脚本语言编写。
processes独立执行并彼此隔离,即它们不共享共同(可写)状态。它们可以进行通信的唯一方法是通过异步FIFO队列,在Nextflow中称为通道(channels )。
任何processes都可以将一个或多个通道定义为输入和输出。这些进程之间的交互以及最终的pipeline 执行流本身是由这些输入和输出声明隐式定义的。
Nextflow脚本如下所示:
上面的示例定义了两个processes。它们的执行顺序不是由blastSearch 出现在extractTopHits之前决定的(它也可以用其他方式编写)。
相反,因为第一个processes在输出中声明了top_hits_ch通道,并且extractTopHits在输入中定义了channel (以第一个processes的输出为输入),所以建立了通信链接。
通过通道链接意味着extractTopHits正在等待blastSearch的输出,然后当通道有内容时反应运行。
Execution abstraction
如果没有另外指定,则在本地计算机上执行进程。本地执行程序对于Pipeline 开发和测试目的非常有用,但对于大数据量的pipeline过程,通常需要指定HPC或云平台。
换句话说,Nextflow提供了Pipeline 功能逻辑和底层执行系统之间的抽象。因此,只需在配置文件中定义目标执行平台,就可以编写一次Pipeline 并在计算机,网格平台或云上无缝地运行它,而无需对其进行修改。
支持以下批处理调度程序:
支持以下云平台:
Scripting language
Nextflow旨在以最小的学习成本学会。在大多数情况下,用户可以利用他们当前的技能来开发Nextflow工作流程。此外,它还提供了强大的DSL脚本语言。
Nextflow脚本是Groovy编程语言的扩展,而Groovy编程语言又是Java编程语言的延申。Groovy可以被认为是Python for Java,因为它简化了代码编写并且更加平易近人。
Configuration options
Pipeline 配置属性nextflow.config在Pipeline 执行目录中指定的文件中定义。
此文件可用于定义要使用的执行程序,进程的环境变量,Pipeline 参数等。
基本配置文件可能如下所示:
网友评论