目录
A pipeline is a set of data processing elements connected in series, where the output of one element is the input of the next one. The elements of a pipeline are often executed in parallel or in time-sliced fashion; in that case, some amount of buffer storage is often inserted between elements.
1. 工作流管理系统
Scripts
使用脚本语言把处理数据的脚本或软件串成。
Make
nextflow
例1. 官网示例
#!/usr/bin/env nextflow
params.in = "$baseDir/data/sample.fa"
sequences = file(params.in)
// split a fasta file in multiple files
process splitSeq{
input:
file 'input.fa' from sequences
output:
file 'seq_*' into records
"""
awk '/^>/{f="seq_"++d}{print > f}' < input.fa
"""
}
// simple reverse the sequences
process reverse{
input:
file x from records
output:
stdout result
"""
cat $x | rev
"""
}
//print the channel content
result.subscribe{printIn it}
2. 工作流引擎
Cromwell
Argo
云原生的工作流。
3. 工作流语言
无论 Snakemake,还是 Nextflow 都需要用户按照工具本身定义的语法来创建流程。这给流程在不同平台间的迁移带来了不便。
工作流语言旨在提供一套语法标准,以解决可移植性差的问题。生信领域最常见的工作流语言有 CWL 和 WDL。下文对他们的用法做一个简单介绍。
Common Workflow Language (CWL)
1. 定义
CWL 是一种描述命令行工具并将它们连接在一起以创建工作流的规范。
2. 使用方法
CWL文件使用YAML或JSON格式编写。调用形式一般为 cwl-runner [tool-or-workflow-description] [input-job-settings]
,上述命令将工作流描述和输入文件作为参数提供给CWL运行器。
例1. cwl-runner echo.cwl echo_input.yaml
# echo.cwl
#!/usr/bin/env cwl-runner
cwlVersion: v1.0 # CWL版本
class: CommandLineTool # 命令行工具
baseCommand: echo # 运行的程序名
inputs: # 工具的输入
message: # 参数ID
type: string # 参数类型
inputBinding: # 参数如何出现在命令行
position: 1 # 参数出现在命令行的位置
output: []
# input: echo_input.yaml
message: Hello world!
inputs
是一个输入参数的列表。每个参数又有多个字段组成,如参数名称 id
,参数值类型 type
(string, int, long, float, double, null, array, record, File, Directory, Any)等。
WDL
相较CWL,WDL 抽离了很多在需要通过文件解析的部分,因而可用性较好。
基本单元由 workflow
,task
,command
,output
,call
构成。
call task
扩展阅读
YAML格式
- 键值对 key: value
- 注释 #
- 数据结构: Maps & Arrays
- JSON 风格
Does anyone use CWL? Does it actually help you get work done?
https://vatlab.github.io/sos-docs/index.html#content
https://bcbio-nextgen.readthedocs.io/en/latest/