GraphScheduleEngine是什么:

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

开发GraphScheduleEngine的初衷:

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

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

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

GraphScheduleEngine怎么实现的:

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

GraphScheduleEngine使用:

1、  运行apache-activemq作为消息中间件,并创建消息队列:"ReduceQueue"

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

3、  启动GraphScheduleEngine

4、  配置任务,创建一个名为任务worker_name的消息队列

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

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

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

邮箱:bchengzhou@163.com

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

进行交流讨论。

项目开源地址github

开源一个自己造的轮子:基于图的任务流引擎GraphScheduleEngine的更多相关文章

  1. 开源一个WEB版本GEF,基于SVG的网页流程图框架

    8月开始断断续续的制作这个web gef,没有任何依赖,完全原生js开发,目前已经完成了雏形,基本上可以在项目里应用了. 下图展示的是demo1的效果,包括拖拽,生成连线,点击生成\取消墙体,整个de ...

  2. 分享一个基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具

    soar-web 基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具,支持 soar 配置的添加.修改.复制,多配置切换,配置的导出.导入与导入功能. 环境需求 python3.xF ...

  3. 「造个轮子」——cicada 设计一个配置模块

    前言 在前两次的 cicada 版本中其实还不支持读取配置文件,比如对端口.路由的配置. 因此我按照自己的想法创建了一个 issue ,也收集到了一些很不错的建议. 最终其实还是按照我之前的想法来做了 ...

  4. 一个基于图的数据管理系统-gStore

    gStore是遵循 BSD协议的一个开源项目.一个基于图的 RDF 三元组存储的数据管理系统.该项目是北京大学.滑铁卢大学.香港科技大学的联合研究项目.中国北京大学计算机科学与技术研究所的数据库组对该 ...

  5. 一个酷炫的,基于HTML5,Jquery和Css的全屏焦点图特效,兼容各种浏览器

    基于HTML5和CSS的焦点图特效,梅花图案的背景很有中国特色,而且还会动哦,效果超炫,推荐下载! 演示图 html代码 <!DOCTYPE html PUBLIC "-//W3C// ...

  6. RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现。

    RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现. 1. 介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advan ...

  7. Android一个炫酷的树状图组织架构图开源控件实现过程

    Android一个炫酷的树状图组织架构图开源控件 文章目录 [1 简介] [2 效果展示] [3 使用步骤] [4 实现基本布局流程] [5 实现自由放缩及拖动] [6 实现添加删除及节点动画] [7 ...

  8. 造个轮子之基于 Netty 实现自己的 RPC 框架

    原文地址: haifeiWu和他朋友们的博客 博客地址:www.hchstudio.cn 欢迎转载,转载请注明作者及出处,谢谢! 服务端开发都会或多或少的涉及到 RPC 的使用,当然如果止步于会用,对 ...

  9. 「造个轮子」——cicada 源码分析

    前言 两天前写了文章<「造个轮子」--cicada(轻量级 WEB 框架)> 向大家介绍了 cicada 之后收到很多反馈,也有许多不错的建议. 同时在 GitHub 也收获了 80 几颗 ...

随机推荐

  1. 高下相倾,前后相随——iterator 与 for ... of 循环

    iterator 是es6新提供的一种遍历器.本质上是一个接口,为各种不同的数据结构,提供统一的访问机制. 数据只要部署了iterator接口,便是可遍历的数据,标志是具有Symbol.iterato ...

  2. SQL Server 2014 HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING 等待

    最近有发现SAP 的MES系统上了AlwaysOn后辅助节点发现无法查询的情况,例如在辅助节点上执行: SELECT TOP 0 * FROM TABLE1; 语句执行正常SELECT TOP 1* ...

  3. Spring(2)——Spring IoC 详解

    Spring IoC 概述 IoC:Inverse of Control(控制反转) 读作"反转控制",更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控 ...

  4. Set<E> 接口简明

    java. util. Set 接口 Set 接口中的方法和 Collection 中方法一致的.Set 接口取出方式只有一种, 迭代器 . HashSet : 底层数据结构是哈希表,线程 是不同步的 ...

  5. [LeetCode] Maximum Distance in Arrays 数组中的最大距离

    Given m arrays, and each array is sorted in ascending order. Now you can pick up two integers from t ...

  6. 医疗器械c#上位机开发指引教程

    此教程面向的读者:对医疗器械上位机编程有兴趣,或者急需了解医疗器械(尿常规.血液分析.生化.心电.B超等医疗下位仪器)的编程流程.编程细节的程序员. 1.得到仪器协议 当我们需要与医疗器械等下位机数据 ...

  7. “百度杯”CTF比赛 九月场_YeserCMS

    题目在i春秋ctf大本营 题目的提示并没有什么卵用,打开链接发现其实是easycms,百度可以查到许多通用漏洞 这里我利用的是无限报错注入 访问url/celive/live/header.php,直 ...

  8. LOJ #6031 字符串

    Description Solution 当 \(k\) 值较小时,发现询问串比较多,串长比较小 然后对 \(Q\) 个询问区间离线跑莫队,一次考虑每一个区间的贡献 假设一个区间 \([i,j]\) ...

  9. [BZOJ]4200: [Noi2015]小园丁与老司机

    Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special Judge Description 小园丁 Mr. S 负责看管一片田野,田野可以看作一个二维 ...

  10. 数论:px+py 不能表示的最大数为pq-p-q的证明

    对于互质的两个数p,q,px+py 不能表示的最大数为pq-p-q. 证明: 先证:pq-p-q不能被px+py表示. 假设pq-p-q可以被px+py表示 那么 px+py=pq-p-q       ...