[每周一更]-(第112期):WDL(Workflow Description Language)说明及使用示例

在这里插入图片描述

什么是WDL?

WDL(Workflow Description Language)是一种用于定义数据处理工作流的语言,旨在帮助研究人员和开发人员描述和执行复杂的数据处理任务。

WDL主要用于生物信息学领域,但也适用于其他需要定义多步骤数据处理的领域。

WDL的设计目的是简单、易读、可扩展,并与各种执行引擎兼容,如Cromwell和MiniWDL。

WDL的基本结构

WDL脚本的基本结构包括以下部分:

  1. 任务(Task):定义单个步骤的具体操作,包括输入、输出和命令。
  2. 工作流(Workflow):定义任务的执行顺序和数据流。
  3. 导入(Import):允许在一个WDL文件中导入另一个WDL文件,便于模块化管理。

示例 WDL 文件

以下是一个简单的WDL示例文件,演示了如何定义和使用任务和工作流。

示例任务:字符串反转

定义一个任务,用于反转输入字符串:

task ReverseString {
    input {
        String input_str
    }
    
    command {
        echo ${input_str} | rev
    }
    
    output {
        String reversed_str = read_string(stdout())
    }
    
    runtime {
        docker: "ubuntu:latest"
    }
}
示例工作流:字符串处理

定义一个工作流,调用 ReverseString 任务,并展示其使用:

workflow StringProcessing {
    input {
        String input_str
    }
    
    call ReverseString {
        input: input_str = input_str
    }
    
    output {
        String reversed_str = ReverseString.reversed_str
    }
}

WDL 文件详解

任务(Task)
  • input:定义任务的输入参数。
  • command:定义任务执行的具体命令,可以使用输入参数。
  • output:定义任务的输出参数,通常从标准输出读取结果。
  • runtime:定义任务的运行环境,例如使用的Docker镜像。
工作流(Workflow)
  • input:定义工作流的输入参数。
  • call:调用任务并传递输入参数。
  • output:定义工作流的输出参数,从任务的输出中提取结果。

运行示例

要运行上述WDL工作流,可以使用Cromwell作为执行引擎。以下是运行示例的步骤:

  1. 安装Cromwell:

    wget https://github.com/broadinstitute/cromwell/releases/download/58/cromwell-58.jar
    
  2. 准备输入文件(input.json):

    {
      "StringProcessing.input_str": "hello world"
    }
    
  3. 运行工作流:

    java -jar cromwell-58.jar run StringProcessing.wdl --inputs input.json
    

上述命令将执行WDL工作流,并输出反转后的字符串。

Java版本号:

openjdk version "1.8.0_372"
OpenJDK Runtime Environment (build 1.8.0_372-b07)
OpenJDK 64-Bit Server VM (build 25.372-b07, mixed mode)

总结

WDL是一种强大且灵活的工作流描述语言,适用于各种复杂的数据处理任务。通过定义任务和工作流,研究人员和开发人员可以轻松描述和执行多步骤的数据处理管道。上述示例演示了WDL的基本用法和运行方法,为实际应用提供了参考。

报错

1、Exception in thread “main” java.lang.UnsupportedClassVersionError: org/hsqldb/jdbcDriver has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

  • 我下载的cromwell-87.jar版本较新,java版本不兼容;

2、使用cromwell-58.jar 报错:

[2024-08-06 11:16:58,92] [info] WorkflowManagerActor Workflow 1f3c8ac1-4203-49ae-820f-210093b721ca failed (during MaterializingWorkflowDescriptorState): cromwell.engine.workflow.lifecycle.materialization.MaterializeWorkflowDescriptorActor$$anon$1: Workflow input processing failed:
ERROR: Unexpected symbol (line 2, col 5) when parsing '_gen4'.

Expected rbrace, got input.

    input {
    ^

$task = :task :identifier :lbrace $_gen3 $_gen4 :rbrace -> Task( name=$1, declarations=$3, sections=$4 )
  • wdl内容编写错误,验证WDL文件:

    使用WDL验证工具验证你的WDL文件是否正确:

    java -jar womtool.jar validate StringProcessing.wdl
    

    如果WDL文件没有问题,应该会返回:

    Success!   
    

3、正确的wdl

task echo {
  String out

  command {
    echo Hello World! > ${out}
  }

  runtime {
    cluster: "OnDemand ecs.sn1.medium img-ubuntu-vpc"
    docker: "registry.cn-shanghai.aliyuncs.com/mynamespace/myubuntu:0.1"
  }

  output {
    File outFile = "${out}"
  }
}

workflow wf_echo {
  call echo
  output {
    echo.outFile
  }
}

验证:

java -jar womtool-52.jar validate hello.wdl 

参考

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ifanatic

觉得对您有用,可以友情打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值