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版本测试会比较快