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去執(zhí)行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: 定義運行的環(huán)境
call
call是通過workflow調(diào)用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
}
}
任務調(diào)度:Scatter-Gather
Parallelism即平行可以使得任務更快,而非順序進行畔乙。我們使用了基于WDL standard library的scatter君仆,會產(chǎn)生可平行的任務(成為一列Input,array)牲距,并且會輸出結(jié)果(也是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}