2. 安装Cromwell与MiniWDL
工欲善其事,必先利其器。写好了WDL脚本,总得有个地方跑起来看看效果吧?
这一章,我们就来把两个最常用的WDL执行引擎装上——Cromwell和MiniWDL。前者是生产环境的主力,后者是本地调试的利器。我个人建议,初学者两个都装,先用MiniWDL快速验证逻辑,再用Cromwell跑正式任务。
2.1 环境准备:先看看你的机器够不够格
别急着装,先确认三件事:Java、操作系统和网络。我踩过的最大的坑,就是Java版本不对。
| 依赖项 | 最低要求 | 推荐版本 | 备注 |
|---|---|---|---|
| Java | Java 8 | Java 11 或 Java 17 | Cromwell对Java 8支持已逐步减弱 |
| 操作系统 | Linux / macOS / Windows | Ubuntu 20.04+ 或 macOS 12+ | Windows建议用WSL2 |
| 网络 | 可访问GitHub和Docker Hub | 稳定的外网连接 | 下载JAR和拉取镜像需要 |
| 磁盘空间 | 5GB | 20GB+ | Cromwell运行时会生成中间文件 |
java -version。如果看到“openjdk version 11.0.x”或者“1.8.x”,基本就稳了。如果是Java 7或更老,请先升级。
2.2 安装Cromwell:下载一个JAR包就够了
Cromwell是一个Java应用,说白了就是一个可执行的JAR文件。不需要编译,不需要安装包,下载即用。
2.2.1 获取最新版JAR
我每次装新环境时,都直接去GitHub的Release页面。也可以命令行搞定:
# 下载最新稳定版(以86版本为例)
wget https://github.com/broadinstitute/cromwell/releases/download/86/cromwell-86.jar
# 或者用curl
curl -L -o cromwell-86.jar \
https://github.com/broadinstitute/cromwell/releases/download/86/cromwell-86.jar
2.2.2 运行Cromwell服务器模式
下载完成后,用一行命令就能启动:
java -jar cromwell-86.jar server
你会看到一堆日志刷刷刷地往上翻。别慌,等到出现类似下面的信息,就说明启动成功了:
[info] Server: 启动完成
[info] Swagger UI: http://localhost:8000
[info] API 文档: http://localhost:8000/api
这时候打开浏览器,访问 http://localhost:8000,能看到Cromwell的Swagger交互界面。嗯,这里只是告诉你它活了,具体怎么用,我们下一章再聊。
2.2.3 单次运行模式(更适合测试)
如果只是跑一个WDL试试,可以不启动服务器,用单次模式:
java -jar cromwell-86.jar run my_workflow.wdl
这种模式跑完就退出,不需要手动停服务。我个人习惯在调试阶段用单次模式,省事。
2.3 安装MiniWDL:要的就是轻量
MiniWDL是Cromwell的“弟弟”,专为本地快速调试设计。它不需要Java,只用Python就能跑。说实话,我80%的WDL调试工作都是在MiniWDL上完成的,Cromwell只用来跑最终版本。
2.3.1 Python环境准备
MiniWDL基于Python 3,确保你装了Python 3.6或更高版本:
python3 --version
如果没装,别急。用系统包管理器或去python.org下载一个。
2.3.2 pip安装MiniWDL
这是我写过的最短的安装命令:
pip install miniwdl
或者指定版本:
pip install miniwdl==1.10.1
python3 -m venv wdl_env 先创建一个独立环境。
2.3.3 验证安装
装好之后,试试看:
miniwdl --version
如果输出类似 miniwdl 1.10.1,就搞定了。
2.3.4 跑一个Hello World
我们来写个最简单的WDL,验证一下整个链条:
version 1.0
workflow hello {
call hello_task
}
task hello_task {
command {
echo "Hello, WDL World!"
}
output {
String out = read_string(stdout())
}
}
保存为 hello.wdl,然后用MiniWDL执行:
miniwdl run hello.wdl
如果一切顺利,你会看到类似这样的输出:
...
[2025-01-15 10:23:45] outputs:
{
"hello.hello_task.out": "Hello, WDL World!"
}
看到这个输出,就说明你的WDL环境已经配好了。是不是很简单?
2.4 安装后的验证清单
我曾碰到过一个同事,装完Cromwell后直接用,结果跑了一整天发现任务一直在排队——原来是服务器没启动。为了避免这种低级错误,建议每次装完后跑一遍下面的验证:
- Cromwell服务器模式: 启动后访问
http://localhost:8000,确认Swagger页面能打开。 - Cromwell单次模式: 用上面那个hello.wdl跑一次,看能否正常输出。
- MiniWDL: 同样的WDL,用
miniwdl run hello.wdl跑一遍。 - Java版本确认:
java -version确认是11或17。 - Python版本确认:
python3 --version确认3.6+。
关键提醒: 如果Cromwell启动时报错“Java heap space”,说明你的内存不够。可以在启动命令里加参数:java -Xmx4g -jar cromwell-86.jar server,把堆内存上限提高到4GB。
2.5 知识结构一览
为了让你对整个安装体系有个直观印象,我画了张图。你想想看,这个安装过程其实就三块:环境检查、Cromwell安装、MiniWDL安装。
装好这两个工具,你已经搭建起了WDL开发的基本环境。后面的章节里,我们会在这两个引擎上反复练习。记住,MiniWDL是你的调试伙伴,Cromwell是正式工作的主力。两者配合,事半功倍。