11 个不稳定版本
使用旧的Rust 2015
0.6.0 | 2021年2月7日 |
---|---|
0.6.0-rc6 | 2021年2月23日 |
0.5.0 | 2018年6月26日 |
0.4.1 | 2017年3月16日 |
0.1.0 | 2016年6月13日 |
#769 在 数据库接口 中
221 星 & 23 关注者
220KB
4.5K SLoC
Factotum
一个专为高效运行具有非平凡依赖树的复杂作业而设计的dag运行工具。
Factotum的禅意
- 一个图灵完备的作业不是一个作业,而是一个程序
- 作业必须由其他作业组合而成
- 作业独立于任何作业调度而存在
用户快速入门
假设您正在运行 64位Linux
wget https://github.com/snowplow/factotum/releases/download/0.6.0/factotum_0.6.0_linux_x86_64.zip
unzip factotum_0.6.0_linux_x86_64.zip
./factotum --version
Factotum需要一个参数,即一个 factotum factfile,它描述要运行的作业。例如,要运行示例 sleep.factfile
wget https://raw.githubusercontent.com/snowplow/factotum/master/samples/sleep.factfile
./factotum run sleep.factfile
在作业文件中指定变量可以使用 --env JSON
(或 -e JSON
)进行。这里的 JSON
是自由形式的,需要与您在作业中设置的占位符相对应。
例如,以下将打印 "hello world!"
wget https://raw.githubusercontent.com/snowplow/factotum/master/samples/variables.factfile
./factotum run variables.factfile --env '{ "message": "hello world!" }'
可以从任意任务开始,使用 --start TASK
或 -s TASK
参数,其中 TASK 是您希望开始的任务名称。
例如,要从此作业的 "echo beta" 任务开始,您可以运行以下命令
wget https://raw.githubusercontent.com/snowplow/factotum/master/samples/echo.factfile
./factotum run echo.factfile --start "echo beta"
要快速了解提供的选项,可以使用--help
或-h
参数。
./factotum --help
有关此文件格式和如何编写自己的作业的更多信息,请参阅下面的Factfile格式部分。
Factfile格式
Factfile是自我描述的JSON,它声明了一系列任务及其依赖关系。例如
{
"schema": "iglu:com.snowplowanalytics.factotum/factfile/jsonschema/1-0-0",
"data": {
"name": "Factotum demo",
"tasks": [
{
"name": "echo alpha",
"executor": "shell",
"command": "echo",
"arguments": [ "alpha" ],
"dependsOn": [],
"onResult": {
"terminateJobWithSuccess": [],
"continueJob": [ 0 ]
}
},
{
"name": "echo beta",
"executor": "shell",
"command": "echo",
"arguments": [ "beta" ],
"dependsOn": [ "echo alpha" ],
"onResult": {
"terminateJobWithSuccess": [],
"continueJob": [ 0 ]
}
},
{
"name": "echo omega",
"executor": "shell",
"command": "echo",
"arguments": [ "and omega!" ],
"dependsOn": [ "echo beta" ],
"onResult": {
"terminateJobWithSuccess": [],
"continueJob": [ 0 ]
}
}
]
}
}
此示例定义了三个运行shell命令的任务 - echo alpha
、echo beta
和echo omega
。 echo alpha
没有依赖关系 - 它将立即运行。 echo beta
依赖于echo alpha
任务的完成,因此将等待echo alpha
完成。 echo omega
依赖于echo beta
任务,因此将在执行之前等待echo beta
完成。
基于以上信息,任务的执行顺序如下:echo alpha
、echo beta
,最后是echo omega
。Factotum中的任务可以有多个依赖关系,并且可以并行化的任务将同时运行。请查看示例以获取更多示例factfile或查看维基以获取factfile格式的更完整描述。
开发者快速入门
Factotum是用Rust编写的。
使用Vagrant
- 克隆此存储库 -
git clone git@github.com:snowplow/factotum.git
cdfactotum
- 设置Vagrant box并ssh进入它 -
vagrant up && vagrant ssh
- 这将花费几分钟
cd/vagrant
- 编译并运行一个示例 -
cargo run -- run samples/echo.factfile
不使用Vagrant使用稳定的Rust
- 安装Rust
- 在Linux/Mac上 -
curl -sSf https://static.rust-lang.org/rustup.sh | sh
- 在Linux/Mac上 -
- 克隆此存储库 -
git clone git@github.com:snowplow/factotum.git
cdfactotum
- 编译并运行一个示例 -
cargo run -- run samples/echo.factfile
版权和许可
Factotum版权所有2016-2021 Snowplow Analytics Ltd。
根据Apache License,版本2.0(以下简称“许可”);除非遵守许可,否则不得使用此软件。
除非适用法律要求或书面同意,否则在许可下分发的软件按“原样”分发,不提供任何明示或暗示的保证或条件。有关许可的具体语言管理权限和限制,请参阅许可。
依赖关系
~16–25MB
~407K SLoC