#分布式计算 #流水线 #任务 #框架 #处理 #rain #计算

rain_task

大规模基于任务的流水线的分布式计算框架。Rust 的自定义任务库。

6 个版本

使用旧的 Rust 2015

0.4.0 2018 年 9 月 5 日
0.3.0 2018 年 6 月 23 日
0.2.2-pre2018 年 6 月 21 日

#1286开发工具

MIT 许可证

105KB
2.5K SLoC

Rain 的 Rust 执行器库

Rain 是一个开源的分布式计算框架,用于处理大规模基于任务的流水线。

Rain 旨在降低分布式计算的入门门槛。我们的目标是提供一个轻量级且健壮的分布式框架,它具有直观的 Python API、简单的安装和部署,并在其上提供深入的监控。

这是用于在 Rust 中编写自己的 Rain 任务的 Rain 库。查看项目的 GitHub 仓库

实现您的任务

以以下方式实现您的任务

#[macro_use] // For register_task! if you want to use it
use rain_task::*;

// Generic task tages arrays of inputs and outputs
fn task_hello(ctx: &mut Context, inputs: &[DataInstance], outputs: &mut [Output]) -> TaskResult<()> { ... }

// Or you can have a funtion with the individual parameters
fn task_world(ctx: &mut Context, in1: &DataInstance, in2: &DataInstance, out: &mut Output) -> TaskResult<()> { ... }

然后创建一个具有以下 main 函数的二进制目标

fn main() {
    let mut s = Executor::new("greeter"); // The executor type name
    // Generic tasks are registered with a function
    s.register_task("hello", task_hello);
    // For individual parameters, use a macro. `[I I O]` specifies the type and order of parameters (after Context)
    register_task!(s, "world", [I I O], task_world);
    s.run(); // Runs the executor event loop
}

运行

执行器由一个守护程序在一个专用的工作目录中运行。守护程序参数通过环境变量传递,因此您可以使用任何参数解析。

在运行 Executor::run() 之前,您可能想设置一个 rust logger。然而,日志不如任务(无论是成功还是失败)返回的调试/错误消息方便访问。

任务函数在为其设置的工作目录中运行,该目录是一个专用的空目录,之后会为您清理。

错误处理

执行器库具有简化的错误处理:自身库(例如将数据写入已设置为外部文件的输出)的使用错误会导致恐慌。任何可能导致不一致状态(或难以恢复)的情况都会导致恐慌。这包括库代码中所有的I/O错误(除了impl Write for Output I/O错误)。

任务函数本身通常应该在执行器处于一致状态的情况下返回Err。这主要包括大多数任务使用错误,即任务用户在图中提供了错误类型或输入数量,错误的输入值或内容类型等。但在此情况下恐慌也是可接受的。

理由是,执行器的崩溃会以适当的方式报告给用户,并且是处理执行器中任意错误的一种干净且安全的方式。虽然重启执行器可能是一个昂贵的操作,但它预计是很少发生的。使用这种逻辑,即使任务使用错误也可能恐慌,但不会造成重大的损失,但更喜欢返回错误,因为这可能保留更多元数据。

依赖项

~47MB
~798K SLoC