通过在 Batch 上运行 Nextflow 流水线来编排作业


本教程介绍如何在 Batch 上运行 Nextflow 流水线。具体来说,本教程运行了一个示例生命科学流水线,该流水线使用 RNA-Seq 量化短读取数据中的基因组特征。

本教程适用于希望将 Nextflow 与 Batch 搭配使用的 Batch 用户。

Nextflow 是一款开源软件,用于编排生物信息学工作流。

目标

完成本教程后,您将了解如何执行以下操作:

  • 在 Cloud Shell 中安装 Nextflow。
  • 创建 Cloud Storage 存储桶。
  • 配置 Nextflow 流水线。
  • 使用 Nextflow 在 Batch 上运行示例流水线。
  • 查看流水线的输出。
  • 请执行以下任一操作,清理数据以避免产生额外费用:
    • 删除项目。
    • 删除个别资源。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

  • Batch
  • Cloud Storage

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

如果您及时完成包括清理在内的所有步骤,那么本教程中创建的资源的费用通常不到 1 美元。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 安装 Google Cloud CLI。
  3. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  4. 创建或选择 Google Cloud 项目

    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目 名称。

  5. 确保您的 Google Cloud 项目已启用结算功能

  6. Enable the Batch, Cloud Storage, Compute Engine, and Logging APIs:

    gcloud services enable batch.googleapis.com compute.googleapis.com logging.googleapis.com storage.googleapis.com
  7. 安装 Google Cloud CLI。
  8. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  9. 创建或选择 Google Cloud 项目

    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目 名称。

  10. 确保您的 Google Cloud 项目已启用结算功能

  11. Enable the Batch, Cloud Storage, Compute Engine, and Logging APIs:

    gcloud services enable batch.googleapis.com compute.googleapis.com logging.googleapis.com storage.googleapis.com
  12. 确保您的项目至少有一个服务帐号具有本教程所需的权限。

    每个作业都需要一个服务帐号,以便 Batch 服务代理创建和访问运行作业所需的资源。在本教程中,作业的服务帐号是 Compute Engine 默认服务帐号

    为确保 Compute Engine 默认服务帐号具有必要的权限,能够允许 Batch 服务代理为 Batch 作业创建和访问资源,请让您的管理员向 Compute Engine 默认服务帐号授予以下 IAM 角色:

    如需详细了解如何授予角色,请参阅管理访问权限

    您的管理员或许还可以通过自定义角色或其他预定义角色向 Compute Engine 默认服务帐号授予所需的权限。

  13. 确保您拥有本教程所需的权限。

    如需获取完成本教程所需的权限,请让管理员向您授予以下 IAM 角色:

  14. 安装 Nextflow:

    curl -s -L https://github.com/nextflow-io/nextflow/releases/download/v23.04.1/nextflow | bash
    

    输出应类似如下所示:

    N E X T F L O W
    version 23.04.1 build 5866
    created 15-04-2023 06:51 UTC
    cite doi:10.1038/nbt.3820
    http://nextflow.io
    
    Nextflow installation completed. Please note:
    - the executable file `nextflow` has been created in the folder: ...
    - you may complete the installation by moving it to a directory in your $PATH
    

创建 Cloud Storage 存储桶

如需创建 Cloud Storage 存储桶来存储 Nextflow 流水线中的临时工作和输出文件,请使用 Google Cloud 控制台或命令行。

控制台

如需使用 Google Cloud 控制台创建 Cloud Storage 存储桶,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往存储分区页面。

    转到“存储分区”

  2. 点击 创建

  3. 创建存储桶页面上,为您的存储桶输入一个全局唯一名称

  4. 点击创建

  5. 系统将禁止公开访问窗口中,点击确认

命令行

gcloud

如需使用 Google Cloud CLI 创建 Cloud Storage 存储桶,请使用 gcloud storage buckets create 命令

gcloud storage buckets create gs://BUCKET_NAME

BUCKET_NAME 替换为存储桶的全局唯一名称

如果请求成功,输出应类似于以下内容:

Creating gs://BUCKET_NAME/...

gsutil

如需使用 gsutil 工具创建 Cloud Storage 存储桶,请使用 gsutil mb 命令

gsutil mb gs://BUCKET_NAME

BUCKET_NAME 替换为存储桶的全局唯一名称

如果请求成功,输出应类似于以下内容:

Creating gs://BUCKET_NAME/...

配置 Nextflow

如需将 Nextflow 流水线配置为在 Batch 上运行,请在命令行中执行以下步骤:

  1. 克隆示例流水线代码库:

    git clone https://github.com/nextflow-io/rnaseq-nf.git
    
  2. 转到 rnaseq-nf 文件夹:

    cd rnaseq-nf
    
  3. 打开 nextflow.config 文件:

    nano nextflow.config
    

    该文件应包含以下部分:

    gcb {
      params.transcriptome = 'gs://rnaseq-nf/data/ggal/transcript.fa'
      params.reads = 'gs://rnaseq-nf/data/ggal/gut_{1,2}.fq'
      params.multiqc = 'gs://rnaseq-nf/multiqc'
      process.executor = 'google-batch'
      process.container = 'quay.io/nextflow/rnaseq-nf:v1.1'
      workDir = 'gs://BUCKET_NAME/WORK_DIRECTORY'
      google.region  = 'us-central1'
    }
    ...
    
  4. gcb 部分,执行以下操作:

    1. BUCKET_NAME 替换为您在先前步骤中创建的 Cloud Storage 存储桶的名称。

    2. WORK_DIRECTORY 替换为流水线可用于存储日志和输出的新文件夹的名称。

      例如,输入 workDir

    3. google.region 字段后面,添加 google.project = 'PROJECT_ID' 行,其中 PROJECT_ID 是当前 Google Cloud 项目的 ID。

  5. 如需保存所做的修改,请执行以下操作:

    1. Control+S 键。

    2. 输入 Y

    3. Enter 键。

运行流水线

使用命令行运行示例 Nextflow 流水线:

../nextflow run nextflow-io/rnaseq-nf -profile gcb

流水线使用您在先前步骤中提供的设置运行小型数据集。此操作最多可能需要 10 分钟才能完成。

流水线运行完毕后,输出应类似于以下内容:

N E X T F L O W  ~  version 23.04.1
Launching `https://github.com/nextflow-io/rnaseq-nf` [crazy_curry] DSL2 - revision: 88b8ef803a [master]
 R N A S E Q - N F   P I P E L I N E
 ===================================
 transcriptome: gs://rnaseq-nf/data/ggal/transcript.fa
 reads        : gs://rnaseq-nf/data/ggal/gut_{1,2}.fq
 outdir       : results

Uploading local `bin` scripts folder to gs://example-bucket/workdir/tmp/53/2847f2b832456a88a8e4cd44eec00a/bin
executor >  google-batch (4)
[67/71b856] process > RNASEQ:INDEX (transcript)     [100%] 1 of 1 ✔
[0c/2c79c6] process > RNASEQ:FASTQC (FASTQC on gut) [100%] 1 of 1 ✔
[a9/571723] process > RNASEQ:QUANT (gut)            [100%] 1 of 1 ✔
[9a/1f0dd4] process > MULTIQC                       [100%] 1 of 1 ✔

Done! Open the following report in your browser --> results/multiqc_report.html

Completed at: 20-Apr-2023 15:44:55
Duration    : 10m 13s
CPU hours   : (a few seconds)
Succeeded   : 4

查看流水线的输出

流水线运行完毕后,它会将输出文件、日志、错误或临时文件存储在 Cloud Storage 存储桶的 WORK_DIRECTORY 文件夹内的 results/qc_report.html 文件中。

如需在 Cloud Storage 存储桶的 WORK_DIRECTORY 文件夹中检查流水线的输出文件,您可以使用 Google Cloud 控制台或命令行。

控制台

如需使用 Google Cloud 控制台检查流水线的输出文件,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往存储分区页面。

    转到“存储分区”

  2. 名称列中,点击您在先前步骤中创建的存储桶的名称。

  3. 存储分区详情页面上,打开 WORK_DIRECTORY 文件夹。

工作流运行的每个单独任务都有一个文件夹。每个文件夹都包含流水线运行的命令、输出文件和临时文件。

命令行

gcloud

如需使用 gcloud CLI 检查流水线的输出文件,请使用 gcloud storage ls 命令

gcloud storage ls gs://BUCKET_NAME/WORK_DIRECTORY

替换以下内容:

  • BUCKET_NAME:您在先前步骤中创建的存储桶的名称。

  • WORK_DIRECTORY:您在 nextflow.config 文件中指定的目录。

输出结果会列出流水线运行的每个单独任务的文件夹。 每个文件夹都包含流水线运行的命令、输出文件以及临时文件。

gsutil

如需使用 gsutil 工具检查流水线的输出文件,请使用 gsutil ls 命令

gsutil ls gs://BUCKET_NAME/WORK_DIRECTORY

替换以下内容:

  • BUCKET_NAME:您在先前步骤中创建的存储桶的名称。

  • WORK_DIRECTORY:您在 nextflow.config 文件中指定的目录。

输出结果会列出流水线运行的每个单独任务的文件夹。 每个文件夹都包含流水线运行的命令、输出文件以及临时文件。

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

若要避免产生费用,最简单的方法是删除当前项目。

如需删除当前项目,请使用 Google Cloud 控制台或 gcloud CLI。

控制台

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

gcloud

    删除 Google Cloud 项目:

    gcloud projects delete PROJECT_ID

删除各个资源

如果您想继续使用当前项目,请删除本教程中使用的单个资源。

删除存储桶

如果您不再需要本教程中使用的存储桶,请删除该存储桶

删除存储桶中的输出文件

流水线运行完毕后,它会在 Cloud Storage 存储桶的 WORK_DIRECTORY 文件夹中创建并存储输出文件。

如需减少当前 Google Cloud 帐号的 Cloud Storage 费用,您可以使用 Google Cloud 控制台或命令行删除包含流水线输出文件的文件夹。

控制台

如需使用 Google Cloud 控制台从 Cloud Storage 存储桶中删除 WORK_DIRECTORY 文件夹和所有输出文件,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往存储分区页面。

    转到“存储分区”

  2. 名称列中,点击您在先前步骤中创建的存储桶的名称。

  3. 存储分区详情页面上,选择 WORK_DIRECTORY 文件夹所在的行,然后执行以下操作:

    1. 点击删除

    2. 如需确认删除,请输入 DELETE,然后点击删除

命令行

gcloud

如需使用 gcloud CLI 从 Cloud Storage 存储桶中删除 WORK_DIRECTORY 文件夹和所有输出文件,请使用带有 --recursive 标志的 gcloud storage rm 命令

gcloud storage rm gs://BUCKET_NAME/WORK_DIRECTORY \
    --recursive

替换以下内容:

  • BUCKET_NAME:您在先前的步骤中指定的存储桶的名称。

  • WORK_DIRECTORY:用于存储您在先前步骤中指定的流水线输出文件的目录。

gsutil

如需使用 gsutil 工具从 Cloud Storage 存储桶中删除 WORK_DIRECTORY 文件夹和所有输出文件,请使用带有 -m-r 选项的 gsutil rm 命令

gsutil -m rm -r gs://BUCKET_NAME/WORK_DIRECTORY

替换以下内容:

  • BUCKET_NAME:您在先前的步骤中指定的存储桶的名称。

  • WORK_DIRECTORY:用于存储您在先前步骤中指定的流水线输出文件的目录。

后续步骤