WDL是什么?
- WDL是由
Broad Institute
開發的一種流程開發語言,全稱workflow description language
,官方鏈接如下:https://software.broadinstitute.org/wdl/
WDL的編寫
- WDL有自己的語法規范,它是一種描述性語言,可讀性很高。
- 每種語言都有自己的
hello world
,WDL也不例外,示例如下圖
workflow helloworld{
call hello{}
}
task hello{
String name="brother"
command{
echo "hello world" ${name}
}
}
WDL可以分為兩個部分task
和workflow
,而task部分主要由command
和定義的部分組成,command用來寫你要運行的命令,定義的部分是一些你會用到的變量,變量包括不同的類型和數據結構,后面會詳細的介紹;workflow部分是用來調用寫好的task模塊,這里可以通過定義不同的輸入,設置不同的輸出來建立自己需要的工作流程,寫好的wdl流程文件一般以.wdl后綴結束。
程序的運行需要用到兩個不同的jar包運行命令如下:
java -jar womtool-31.jar inputs xxx.wdl > xxx.wdl.json
java -jar cromwell-31.jar run xxx.wdl -i xxx.wdl.json
WDL的變量
String
: 字符串類型,例如String ABC=“test”Float
: 浮點型數字,for example 3.1459 (can be negative too).Int
: 整型的數字, for example 16 (can be negative too).Boolean
: 布爾類型 for example true or false.File
: 文件類型的對象一個文件名命名的對象Array
: 數組 for example [A,B,C,D] is an array of strings or Array[String] where we can pick the B element by taking the second element (index position 1 since WDL arrays are 0-indexed).Map
: 字典 for example {"color": "blue", "size": "large"} is a map of strings to strings or Map[String, String] where we can ask what is the color of our object.Object
: 對象,這個用的比較少
WDL的元件
- basename
basename
與shell的語法一樣,用來得到一個路徑的文件名 - call
call
主要用於workflow中調用寫好的task模塊 - command
command
在這個模塊里面寫好需要運行的命令,是task的一部分 - meta
meta
可以寫一些描述信息 - output
output
定義task的輸出部分,可以是任何類型,也可以不寫這個部分 - parmeter_meta
parameter_meta
用於存放參數的一些描述信息 - runtime
runtime
用來定義在不同的平台運行時的一些變量,在集群運行時需要編寫一個配置文件用來定義一些投遞任務的屬性 - task
task
任務模塊,是需要調度的每一個模塊 - variables
variables
用來定義一些變量 - workflow
workflow
用來調用寫好的task模塊,生成相應的工作流
WDL的工作流類型
WDL會有不同的工作流格式,這里列舉一下官網的不同工作流
WDL的注意事項
- WDL如果在集群測試時,如果是自己來控制工作流程,需要將標准輸出和標准錯誤輸出輸出至文件,這樣輸出到屏幕的返回值才能被正常的獲取到
- WDL的local版本測試會比較快