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

[每周一更]-(第112期):WDL(Workflow Description Language)说明及使用示例WDL WorkflowDesc 是一种用于定义数据处理工作流的语言 旨在帮助研究人员和开发人员描述和执行复杂的数据处理任务

大家好,欢迎来到IT知识分享网。

在这里插入图片描述

什么是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-b721ca 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 

参考

  • 标准流程描述语言 WDL 阿里云最佳实践

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/153122.html

(0)
上一篇 2025-03-05 21:00
下一篇 2025-03-05 21:05

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信