WDL (一个workflow description language)+ Cromwell(an execution engine that can run WDL scripts)是目前可以更好使用GATK的一套工具。
阿里云批量计算:https://help.aliyun.com/document_detail/110173.html
主要组成
- workflow, task and call。
- workflow在顶层,用calls去执行tasks。tasks在workflow模块外被定义。
- 变量:有2种不同层次的variables,一种存在于task,一种存在于整个workflow。variable也可以从一个task传递到下一个task
workflow
workflow myWorkFlowName {
call task_A
call task_B
}
task task_A{...}
task task_B{...}
task
task task_A {
File ref
File in
String id
command {
do_stuff R=${ref} I=${in} O=${id}.ext
}
runtime{
docker: "ubuntu:latest"
memory: "2GB"
}
output {
File out="${id}.ext"
}
}
- 变量:变量需要定义其类型,主要有File, String, Array[]。在command中引用需要${var}。
- command : 定义运行的命令
- output: 定义输出的变量和文件
- runtime: 定义运行的环境
call
call是通过workflow调用task。若需要输入,通过{input:}
workflow myWorkflowName {
File my_ref
File my_input
String name
call task_A {
input: ref=my_ref, in=my_input, id=name
}
call task_B {
input: ref=my_ref, in=task_A.out
}
}
任务调度:Scatter-Gather
Parallelism即平行可以使得任务更快,而非顺序进行。我们使用了基于WDL standard library的scatter,会产生可平行的任务(成为一列Input,array),并且会输出结果(也是array)。Scatter这个过程是外显的(explicit),而gather这个过程是不外显的(implicit)。
Array[file] inputFiles
sactter (oneFile in inputFiles) {
call stepA {input: in=oneFile}
}
call stepB {input: files=stepA.out}
call stepA as firstSample {input: in=firstInput}
call stepA as secondSample {input: in=secondInput}
call stepB {input: in=firstSample.out}
call stepB {input: in=secondSample.out}