[开源项目] luiti 时间任务依赖管理框架,目前主要是本地和 YARN 任务。

2015-03-11 13:44:18 +08:00
 mvj3

Luigi 是一套基于 Python 语言构建的复杂流式批处理任务管理系统。它也仅仅是一个任务 调度系统,具体逻辑全都由 Task 自己去实现,比如分布式计算交由 Hadoop 里的 YARN 实现处理。

Luiti 是构建于 Luigi 之上的主要作用于时间管理相关的插件, 即 Luiti = Luigi + time。

luiti 优势(功能列表)

  1. 按时间和业务类型等属性去多目录划分基础表, 中间表, 统计表 等。
  2. 支持无缝 多项目 多版本 管理, 兼容常规 Python 库引用机制。
  3. 任务的运行时间和业务时间的满足条件检查。
  4. 众多 MapReduce / IO 实用操作函数。
  5. 基于输入输出数据的 MapReduce 测试方案。
  6. 内置支持 Task 基类扩展。
  7. 分析 Task 之间的依赖关系,包括依赖的和被依赖的。

项目地址在 http://github.com/17zuoye/luiti , README的信息很详细,欢迎有离线任务管理需求和使用Python的人使用,也非常欢迎各种贡献 :)

3237 次点击
所在节点    分享创造
2 条回复
vozon
2015-03-11 17:01:28 +08:00
先支持一下

两个问题:
1.部署轻便吗?
2.已有或计划提供API接口吗?

PS: azkaban和oozie都用了, 都或多或少有些不足
mvj3
2015-03-11 17:25:03 +08:00
@vozon

1.部署轻便吗?

非常方便。
第一步:启动 luigi 后台进程(即 luiti 依赖于之上的框架),命令例如 luigid --background --logdir luigi --state-path luigi/state --address 0.0.0.0 --port 32145
第二步:用 luiti 命令行 创建一个项目和若干任务模版,然后实现具体业务逻辑。
第三步:用 luiti 去提交某个时间的任务就可以了。例如 luiti run --task-name 你的任务类 --date-value 2014-09-01



2.已有或计划提供API接口吗?

luiti 本身就是把一堆任务代码当作数据去管理,所以直接操作代码就可以了。目前我和团队成员有意向把 luiti 作为一个插件整合到 hue 里,可以展现任务之间的依赖关系。

这方面你运行一下 luiti 命令行就可以了,风格非常像 Rails 。比如


$ luiti
usage: luiti [-h] {ls,new,generate,info,clean,run} ...

Luiti tasks manager.

optional arguments:
-h, --help show this help message and exit

subcommands:
valid subcommands

{ls,new,generate,info,clean,run}
ls list all current luiti tasks.
new create a new luiti project.
generate generate a new luiti task python file.
info show a detailed task.
clean manage files that outputed by luiti tasks.
run run a luiti task.

$ luiti ls

+-------+-----------------------------------------------+
| | All Tasks |
+=======+===============================================+
| 1 | EnglishStudentDoappEkStatDay |
+-------+-----------------------------------------------+
| 2 | EnglishStudentDoexamNewCorrectByEknowledgeDay |
+-------+-----------------------------------------------+
| 3 | EnglishStudentDoexamNewCorrectDay |
+-------+-----------------------------------------------+
...............................................
+-------+-----------------------------------------------+
| 36 | WhateverCheckDay |
+-------+-----------------------------------------------+
| 37 | DumpVoxQuizFromDatabaseWeek |
+-------+-----------------------------------------------+
| 38 | DumpVoxQuizFromDatabaseDay |
+-------+-----------------------------------------------+
| 39 | EnglishStudentDoexamEtStatDay |
+-------+-----------------------------------------------+
| total | 39 |
+-------+-----------------------------------------------+

$ luiti info --task-name DumpVoxUnitKnowledgePointRefFromDatabaseDay

+-------------------+--------------------------------------------------------------------------------------+
| Task name | DumpVoxUnitKnowledgePointRefFromDatabaseDay |
+===================+======================================================================================+
| Tasks self dep on | ['DumpVoxKnowledgePointDay'] |
+-------------------+--------------------------------------------------------------------------------------+
| Tasks dep on self | ['DumpEnglishEidToEkDay', 'TeacherEnglishAssignHomeworkQuizDay', 'WhateverCheckDay'] |
+-------------------+--------------------------------------------------------------------------------------+


所以你也看到了,UI 在此基础上封装一下就可以了,底层编程都已经提供了,就像 oozie 是 hue 里默认提供的一个插件。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/176059

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX