本教程介绍了如何在 Batch 上运行 Nextflow 流水线。具体来说,本教程将运行 Nextflow 中的示例 rnaseq-nf
生命科学流水线,该流水线使用 RNA-Seq 从短读数据中量化基因组特征。
本教程面向想要将 Nextflow 与 Batch 搭配使用的 Batch 用户。
Nextflow 是一款用于编排生物信息学工作流的开源软件。
目标
完成本教程后,您将了解如何执行以下操作:
- 在 Cloud Shell 中安装 Nextflow。
- 创建 Cloud Storage 存储桶。
- 配置 Nextflow 流水线。
- 在 Batch 上使用 Nextflow 运行示例流水线。
- 查看流水线的输出。
- 如需清理数据以免产生额外费用,请执行以下操作之一:
- 删除项目。
- 删除各个资源。
费用
在本文档中,您将使用 Google Cloud的以下收费组件:
- Batch
- Cloud Storage
您可使用价格计算器根据您的预计使用情况来估算费用。
如果您及时完成本教程中的所有步骤(包括清理),那么在此期间所创建资源的费用通常不会超过 1 美元。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Verify that billing is enabled for your Google Cloud project.
-
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 -
Install the Google Cloud CLI.
-
如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Verify that billing is enabled for your Google Cloud project.
-
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 -
确保您的项目具有 Virtual Private Cloud (VPC) 网络,并且该网络具有适合本教程的有效网络配置。
本教程假设您使用的是
default
网络。默认情况下, Google Cloud 资源使用default
网络,该网络可提供本教程所需的网络访问权限。 -
确保您的项目至少有一个服务账号,且该账号具有在本教程中运行批处理作业所需的权限。
默认情况下,作业使用 Compute Engine 默认服务账号,该账号会自动获得 Editor (
roles/editor
) IAM 角色,并且已拥有本教程所需的所有权限。如需确保作业的服务账号具有必要的权限,以允许 Batch 服务代理为 Batch 作业创建和访问资源,请让您的管理员为作业的服务账号授予以下 IAM 角色:
-
项目的 Batch Agent Reporter (
roles/batch.agentReporter
) -
针对项目的 Storage Admin (
roles/storage.admin
) -
(推荐)让作业在 Cloud Logging 中生成日志:
项目的 Logs Writer (
roles/logging.logWriter
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
项目的 Batch Agent Reporter (
-
确保您拥有本教程所需的权限。
如需获得完成本教程所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
作业的服务账号的 Service Account User (
roles/iam.serviceAccountUser
) 角色 -
项目的 Storage Object Admin (
roles/storage.objectAdmin
)
-
项目的 Batch Job Editor (
-
安装 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
克隆示例流水线代码库:
git clone https://github.com/nextflow-io/rnaseq-nf.git
转到
rnaseq-nf
文件夹:cd rnaseq-nf
打开
nextflow.config
文件:nano nextflow.config
该文件应包含以下
gcb
部分: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 = 'REGION' }
在
gcb
部分中,执行以下操作:将
BUCKET_NAME
替换为您在前面步骤中创建的 Cloud Storage 存储桶的名称。将
WORK_DIRECTORY
替换为流水线可用于存储日志和输出内容的新文件夹的名称。例如,输入
workDir
。将
REGION
替换为要使用的区域。例如,输入
us-central1
。在
google.region
字段之后,添加以下字段:添加
google.project
字段:google.project = 'PROJECT_ID'
将
PROJECT_ID
替换为当前 Google Cloud 项目的项目 ID。如果您未使用 Compute Engine 默认服务账号作为作业的服务账号,请添加
google.batch.serviceAccountEmail
字段:google.batch.serviceAccountEmail = 'SERVICE_ACCOUNT_EMAIL'
将
SERVICE_ACCOUNT_EMAIL
替换为您为此教程准备的作业服务账号的电子邮件地址。
如需保存所做的修改,请执行以下操作:
按
Control+S
键。输入
Y
。按
Enter
键。
在 Google Cloud 控制台中,前往存储桶页面。
在名称列中,点击您在上一步中创建的存储桶的名称。
在存储分区详情页面上,打开
WORK_DIRECTORY
文件夹。BUCKET_NAME
:您在前面的步骤中创建的存储桶的名称。WORK_DIRECTORY
:您在nextflow.config
文件中指定的目录。在 Google Cloud 控制台中,前往存储桶页面。
在名称列中,点击您在上一步中创建的存储桶的名称。
在存储分区详情页面上,选择包含
WORK_DIRECTORY
文件夹的行,然后执行以下操作:点击删除。
如需确认,请输入
DELETE
,然后点击删除。
BUCKET_NAME
:您在前面的步骤中指定的存储桶的名称。WORK_DIRECTORY
:您在前面的步骤中指定的用于存储流水线输出文件的目录。如需详细了解如何部署 Nextflow 工作流,请参阅 Nextflow GitHub 代码库。
如需详细了解 Nextflow 进程、脚本和配置选项,请参阅 Nextflow 文档。
创建 Cloud Storage 存储桶
如需创建 Cloud Storage 存储桶来存储 Nextflow 流水线的临时工作文件和输出文件,请使用 Google Cloud 控制台或命令行。
控制台
如需使用 Google Cloud 控制台创建 Cloud Storage 存储桶,请按以下步骤操作:
gcloud
如需使用 Google Cloud CLI 创建 Cloud Storage 存储桶,请使用 gcloud storage buckets create
命令。
gcloud storage buckets create gs://BUCKET_NAME
将 BUCKET_NAME
替换为存储桶的全局唯一名称。
如果请求成功,输出应类似于以下内容:
Creating gs://BUCKET_NAME/...
```
配置 Nextflow
如需将 Nextflow 流水线配置为在 Batch 上运行,请在命令行中按以下步骤操作:
运行流水线
使用命令行运行示例 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 控制台检查流水线的输出文件,请按以下步骤操作:
工作流运行的每个单独任务都有一个文件夹。每个文件夹都包含运行过的命令、输出文件以及流水线创建的临时文件。
gcloud
如需使用 gcloud CLI 检查流水线的输出文件,请使用 gcloud storage ls
命令。
gcloud storage ls gs://BUCKET_NAME/WORK_DIRECTORY
替换以下内容:
输出会列出流水线运行的每个单独任务对应的文件夹。 每个文件夹都包含运行过的命令、输出文件以及流水线创建的临时文件。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
避免产生费用的最简单方法是删除当前项目。
如需删除当前项目,请使用 Google Cloud 控制台或 gcloud CLI。
控制台
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
gcloud
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
删除各个资源
如果您想继续使用当前项目,请删除本教程中使用的各个资源。
删除存储桶
如果您不再需要本教程中使用的存储桶,请删除该存储桶。
删除存储桶中的输出文件
流水线运行完成后,会在 Cloud Storage 存储桶的 WORK_DIRECTORY
文件夹中创建并存储输出文件。
如需减少当前Google Cloud 账号的 Cloud Storage 费用,您可以使用 Google Cloud 控制台或命令行删除包含流水线输出文件的文件夹。
控制台
如需使用Google Cloud 控制台从 Cloud Storage 存储桶中删除 WORK_DIRECTORY
文件夹和所有输出文件,请按以下步骤操作:
gcloud
如需使用 gcloud CLI 从 Cloud Storage 存储桶中删除 WORK_DIRECTORY
文件夹和所有输出文件,请将 gcloud storage rm
命令与 --recursive
标志结合使用。
gcloud storage rm gs://BUCKET_NAME/WORK_DIRECTORY \
--recursive
替换以下内容: