GraphScheduleEngine是一个基于DAG图的任务流引擎,不一样语言编写、运行于不一样机器上的模块、程序,都可以经过订阅GraphScheduleEngine的消息来启动、运行、结束自身的任务。python
在数据挖掘、推荐引擎的离线计算等任务中,会涉及诸多的子任务,每一个子任务之间一般还存在着复杂的依赖关系,各个任务之间构成一个有向无环图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
GraphScheduleEngin经过消息队列的机制,提供了任务配置、任务启动、任务依赖分析、任务分配的方案;开发任务worker时只须要关注任务自己的计算、运行,经过订阅MessageQueue的消息来获取分配的任务,并在任务完成时经过MessageQueue将任务状态发送至GraphScheduleEngine;GraphScheduleEngine在收到一个任务状态后判断是否开始下一轮的任务分配。具体参见源码实现。apache
一、 运行apache-activemq做为消息中间件,并建立消息队列:"ReduceQueue"大数据
二、 启动hbase做为任务配置信息和任务运行日志的数据仓库spa
三、 启动GraphScheduleEngine.net
四、 配置任务,建立一个名为任务worker_name的消息队列设计
五、 在任务worker中订阅"ReduceQueue"消息,并将任务完成状态发布至worker_name日志
GraphScheduleEngine是我本人为了协调诸多Java,python,shell编写的不一样数据挖掘任务、进行任务调度、监测的项目。
俗话说一个好汉三个帮,况且俺仍是菜鸟,各项功能、代码的健壮性,须要有兴趣的好汉一同来完善、发展这个项目,欢迎与本人
blog: http://blog.csdn.net/zbc1090549839
进行交流讨论。
项目开源地址github