11 个不稳定版本

使用旧的Rust 2015

0.6.0 2021年2月7日
0.6.0-rc62021年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

Release Apache License 2.0

一个专为高效运行具有非平凡依赖树的复杂作业而设计的dag运行工具。

Factotum的禅意

  1. 一个图灵完备的作业不是一个作业,而是一个程序
  2. 作业必须由其他作业组合而成
  3. 作业独立于任何作业调度而存在

用户快速入门

假设您正在运行 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 alphaecho betaecho omegaecho alpha没有依赖关系 - 它将立即运行。 echo beta依赖于echo alpha任务的完成,因此将等待echo alpha完成。 echo omega依赖于echo beta任务,因此将在执行之前等待echo beta完成。

基于以上信息,任务的执行顺序如下:echo alphaecho 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
  • 克隆此存储库 - 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