跳转到主要内容

Spotify Luigi的简单配置。

项目描述

MarioBros是一个Python模块,以类似于makefile的方式配置Spotify-Luigi

Spotify-Luigi是一个Python模块,帮助您构建复杂的批处理作业流程。它处理依赖关系解析、工作流程管理、可视化等。配置文件将称为MarioFiles。

主分支状态

Build Status on Travis CI Coverage Status on Coveralls

编写MarioFile

MarioFiles以几个部分结构化,代表各种任务。

任务定义

任务定义的示例是

[task_name]
target: source1 source2 source3
    task_command

任务名称定义为方括号内。目标和源之间用两个点分隔。下一行是任务命令。在task_command中,您可以使用${TARGET}和${SOURCES[i]}调用目标名称和源名称,其中i是索引或Python切片。在大括号中,您可以使用在上方定义的变量执行Python代码。您可以使用Python正则表达式语法匹配目标名称的部分与源名称的部分。例如

[task_name]
(.*)-(.*)-(.*).txt: \1.txt \2.txt \3.txt
    task_command --output ${TARGET} --first-input ${SOURCES[0]} --other-inputs ${SOURCES[1:]}

该任务匹配类似于 first-second-third.txt 的目标,包含三个源文件 first.txtsecond.txtthird.txt\1 代表第一个匹配,\2 代表第二个匹配,\3 代表第三个。

您还可以定义任务变量并在下面使用它们。您必须在任务名称下面定义它们,如下所示

[task_name]
variable1 = value1
variable2 = value2
target: source
    task_command -o ${TARGET} -i ${SOURCES} --par1 ${variable1} --par2 ${variable2}

默认部分

默认部分是在文件顶部定义的,没有指定名称的部分。在这个部分中,有全局变量的定义和默认任务的定义。默认任务在没有请求其他任务时执行

global_variable1 = value1
global_variable2 = value2

default_target: source1 source2
    default_task_command

在文件顶部,您可以按这种方式包含其他 MarioFiles,路径如下

include mariofile_path.ini

被包含的 MarioFile 的全局变量将被添加到 MarioFile 的顶部。被包含的 MarioFiles 的任务将被添加到 MarioFile 的末尾。如果有同名变量或任务,只有顶级的一个将被包含。

总结一下,一个典型的 MarioFile 将如下所示

include included_mariofile.ini

global_var1 = value1
global_var2 = value2

(.*)-main_target.out: \1-\1-task1
    default_task -o ${SOURCES} -i ${TARGET}

[task_1]
RESOURCES_CPU = 4
(.*)-(.*)-task1: source1 source2
    task_1 -o ${TARGET} -i ${SOURCES} -j ${RESOURCES_CPU}

执行 Mario

Mario 命令行是

$ mario --help
Usage: mario [OPTIONS] [TARGETS]...

Options:
  -f, --file, --mariofile PATH  Main configuration file
  -p, --port INTEGER            Set `luigi.build` scheduler_port parameter.
  --workers INTEGER             Set the number of workers
  --local-scheduler             Run local scheduler.
  --print-ns                    Print namespaces: Print the MarioFile with the
                                included tasks and variables
  -n, --dry-run                 Don't actually run any commands; just print
                                them.
  --help                        Show this message and exit.

使用

  1. 所有 Mario 选项和参数都是可选的。

  2. 默认任务请求是 [DEFAULT]

  3. 默认 mariofile 是 mario.ini

  4. 使用 --print-ns 标志,它将打印包含的任务和变量的整个 MarioFile。

  5. 使用 --dry-run 标志,它不会实际运行任何命令;只是打印它们。

使用外部调度器

首先,您必须运行 luigid

$ luigid

然后,您可以使用上面描述的命令行运行 mario 脚本

$ mario

这样,mario 将使用 mario.ini 作为 MarioFile 执行默认目标。您也可以使用与 mario.ini 不同的 MarioFile 请求特定的目标,如下所示

$ mario -f my_mariofile.ini target.out

您可以在 localhost:8082 地址上可视化调度器。将有一个任务列表和处理的树状图。

使用本地调度器

如果您不需要可视化调度器,您可以在没有 luigid 运行的情况下运行 mario,并使用以下本地调度器

$ mario --local-scheduler

Luigi 配置文件

Luigi 可以存储处理统计信息并管理资源。您必须配置 luigi,编写 client.cfg 文件,然后从 client.cfg 目录启动 luigid

将统计信息写入数据库

client.cfg 文件中,您可以配置统计信息的 db 路径。一个 client.cfg 的示例是

[scheduler]
record_task_history = True
state_path = /path/to/luigi-state.pickle

[task_history]
db_connection = sqlite:////path/to/db/luigi-task-hist.db

资源管理

您还可以指定单个任务的所需资源。

您必须在 client.cfg 文件中定义可用的资源,定义如下 [resources] 部分

[resources]
cpus = 64

您可以通过设置本地任务变量 RESOURCES_RESOURCE_NAME 为单个任务指定所需资源,其中 RESOURCE_NAME 是在 client.cfg 中定义的资源名称,例如

[task_name]
RESOURCES_cpus = 4
target: sources
    task_command -j ${RESOURCES_cpus}

请求的资源是 4cpus

安装

在当前 python 环境中安装

pip install mariobros

项目详情


下载文件

下载适用于您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包的信息

源分布

mariobros-0.4.4.tar.gz (25.1 kB 查看哈希值)

上传时间

构建分布

mariobros-0.4.4-py2.py3-none-any.whl (14.6 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者