使用Nextflow#

Nextflow 是一个用于创建可扩展、可移植且可重复的工作流系统。它采用数据流编程模型, 让您能够专注于数据流和计算,从而简化并行和分布式流水线的编写。

本节介绍如何在AIP环境中使用Nextflow。

在用户环境中安装Nextflow#

  1. 检查和安装Java版本:

    java -version
    

    如果Java版本是17或以上,跳到第2步。

    如果系统的Java版本低于17,或者Java没有安装,运行以下命令在用户环境中安装Java 17:

    curl -s https://get.sdkman.io | bash
    source ~/.sdkman/bin/sdkman-init.sh
    sdk install java 17.0.10-tem
    java -version
    

    上面最后命令的输出:

    openjdk version "17.0.10" 2024-01-16
    OpenJDK Runtime Environment Temurin-17.0.10+7 (build 17.0.10+7)
    OpenJDK 64-Bit Server VM Temurin-17.0.10+7 (build 17.0.10+7, mixed mode, sharing)
    
  2. 安装Nextflow

    安装Nextflow,把可执行文件移到$HOME/.local/bin里,确保PATH环境变量里带有$HOME/.local/bin。 以下的代码假设您用的是bash,若使用csh或tcsh,请按做相应修改。

    curl -s https://get.nextflow.io | bash
    mkdir -p $HOME/.local/bin/
    mv nextflow $HOME/.local/bin/
    echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc
    source ~/.bashrc
    nextflow info
    

    上面最后一条命令应该有类似这样的输出:

    Version: 25.04.0 build 5944
    Created: 08-05-2025 16:41 UTC (12:41 EDT)
    System: Linux 3.10.0-1160.119.1.el7.x86_64
    Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 17.0.10+7
    Encoding: UTF-8 (UTF-8)
    

Nextflow利用AIP跑任务的例子#

从git上下载一个例子:

git clone https://github.com/nextflow-io/training.git
cd training/hello-nextflow

修改nextflow.config#

docker.enabled = false

process {
  executor = 'lsf'        // 利用Nextflow与LSF的集成和AIP与LSF的兼容性
  queue = 'medium'        // 定义AIP的队列
  // memory = '4 GB'      **注意** 这个内存参数集成目前在LSF和AIP中都不工作!!
  cpus = 2                // 每个任务的核数
  time = '1h'             // 任务运行时间限制
}

工作流文件#

这里的例子中,我们使用hello-world.nf,里面有3个子任务。

运行工作流#

执行命令:

nextflow run hello-workflow.nf \
-with-report my_report.html \
-with-timeline my_timeline.html

输出:

../_images/nextflow1.png

可以运行AIP cjobs命令查看作业(Nextflow任务)运行状态:

cjobs -a
JOBID   USER    STAT  QUEUE      FROM_HOST   EXEC_HOST   JOB_NAME   SUBMIT_TIME
1277    cadmin  DONE  medium     dev         2*dev       *Hello_(2) May  9 16:40
1279    cadmin  DONE  medium     dev         2*dev       *Hello_(1) May  9 16:40
1278    cadmin  DONE  medium     dev         2*dev       *Hello_(3) May  9 16:40

生成的my_report.html文件:

../_images/nextflow2.png

生成的my_timeline.html文件:

../_images/nextflow3.png