开源一个本身造的轮子:基于图的任务流引擎GraphScheduleEngine

GraphScheduleEngine是什么:

GraphScheduleEngine是一个基于DAG图的任务流引擎,不一样语言编写、运行于不一样机器上的模块、程序,都可以经过订阅GraphScheduleEngine的消息来启动、运行、结束自身的任务。python

开发GraphScheduleEngine的初衷:

在数据挖掘、推荐引擎的离线计算等任务中,会涉及诸多的子任务,每一个子任务之间一般还存在着复杂的依赖关系,各个任务之间构成一个有向无环图DAG,如图一所示:git


同时基于大数据平台和并行化处理,咱们但愿尽量的有效利用计算资源将任务时间缩短,不一样的任务能够运行在不一样的机器、集群之上。然而,任务之间一般会存在着必定的依赖关系,如数据挖掘、推荐引擎等任务依赖于ETL,ETL的子任务之间也会存在复杂的依赖关系,所以串行化的任务处理方法至关低效;同时,能够人为的设计并行过程,如task2和task4都依赖于task0,在设计计算流程时,能够人工去判断哪些task能够并行,并能够在代码中使这两个任务同时运行,但因为数据挖掘任务的灵活性,任务自己及任务之间的依赖关系随着挖掘的须要常常性的变化,维护和开发都不容易。github

目前存在一些开源的基于图的任务流引擎来解决这一问题,如The Makeflow Workflow System(http://ccl.cse.nd.edu/software/makeflow/),其经过编写Makefile文件来定义本身的任务DAG图,但Makefile文件的编写仍是较为复杂的且可以运行的任务不是那么为所欲为。因此,干脆搞一套本身的基于DAG图的任务流引擎:GraphScheduleEngine。shell

GraphScheduleEngine怎么实现的:


GraphScheduleEngin经过消息队列的机制,提供了任务配置、任务启动、任务依赖分析、任务分配的方案;开发任务worker时只须要关注任务自己的计算、运行,经过订阅MessageQueue的消息来获取分配的任务,并在任务完成时经过MessageQueue将任务状态发送至GraphScheduleEngine;GraphScheduleEngine在收到一个任务状态后判断是否开始下一轮的任务分配。具体参见源码实现。apache

GraphScheduleEngine使用:

一、  运行apache-activemq做为消息中间件,并建立消息队列:"ReduceQueue"大数据

二、  启动hbase做为任务配置信息和任务运行日志的数据仓库spa

三、  启动GraphScheduleEngine.net

四、  配置任务,建立一个名为任务worker_name的消息队列设计

五、  在任务worker中订阅"ReduceQueue"消息,并将任务完成状态发布至worker_name日志

 

GraphScheduleEngine是我本人为了协调诸多Java,python,shell编写的不一样数据挖掘任务、进行任务调度、监测的项目。

俗话说一个好汉三个帮,况且俺仍是菜鸟,各项功能、代码的健壮性,须要有兴趣的好汉一同来完善、发展这个项目,欢迎与本人

邮箱:bchengzhou@163.com

blog: http://blog.csdn.net/zbc1090549839

进行交流讨论。

项目开源地址github

相关文章
相关标签/搜索