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. libevent源码阅读笔记(一):libevent对epoll的封装

    title: libevent源码阅读笔记(一):libevent对epoll的封装 最近开始阅读网络库libevent的源码,阅读源码之前,大致看了张亮写的几篇博文(libevent源码深度剖析 h ...

  2. win10安装Ubuntu14.04双系统

    1 制作镜像 UltralISO刻录镜像到U盘,下载地址:http://pan.baidu.com/s/1o7JpthS 2压缩空间给Ubuntu安装 使用windows自带的压缩(磁盘管理) 3安装 ...

  3. Web SCADA 电力接线图工控组态编辑器

    前言 SVG并非仅仅是一种图像格式, 由于它是一种基于XML的语言,也就意味着它继承了XML的跨平台性和可扩展性,从而在图形可重用性上迈出了一大步.如SVG可以内嵌于其他的XML文档中,而SVG文档中 ...

  4. [LeetCode] Average of Levels in Binary Tree 二叉树的层平均值

    Given a non-empty binary tree, return the average value of the nodes on each level in the form of an ...

  5. 使用springcloud zuul构建接口网关

    一  微服务网关背景及简介 不同的微服务一般有不同的网络地址,而外部的客户端可能需要调用多个服务的接口才能完成一个业务需求.比如一个电影购票的收集APP,可能回调用电影分类微服务,用户微服务,支付微服 ...

  6. ASwipeLayout一个强大的侧滑菜单控件

    Android中侧滑的场景有很大,大部分是基于RecyclerView,但是有些时候你可以动态地addView到一个布局当中,也希望它实现侧滑,所以就产生了ASwipeLayout,该控件不仅支持在R ...

  7. .NET CORE 2.0之 httpcontext

    HttpContext  在之前的.NET framework 是一个非常常用且强大的类,在.NET CORE2.0中要像以前用是不太方便的了, 要是用sesson 首先需要在startup 的Con ...

  8. 初学Servlet之实现Servlet接口

    package app01a;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Servlet;im ...

  9. [HNOI 2008]玩具装箱

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压 缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1.. ...

  10. epoll源码分析(转)

    在create后会创建eventpoll对象保存在一个匿名fd的file struct的private指针中,然后进程睡在等待队列上面. 对于等待的fd,通过poll机制在准备好之后会调用相应的cal ...