开源一个自己造的轮子:基于图的任务流引擎GraphScheduleEngine
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编写的不同数据挖掘任务、进行任务调度、监测的项目。
俗话说一个好汉三个帮,何况俺还是菜鸟,各项功能、代码的健壮性,需要有兴趣的好汉一同来完善、发展这个项目,欢迎与本人
blog: http://blog.csdn.net/zbc1090549839
进行交流讨论。
项目开源地址github
开源一个自己造的轮子:基于图的任务流引擎GraphScheduleEngine的更多相关文章
- 开源一个WEB版本GEF,基于SVG的网页流程图框架
8月开始断断续续的制作这个web gef,没有任何依赖,完全原生js开发,目前已经完成了雏形,基本上可以在项目里应用了. 下图展示的是demo1的效果,包括拖拽,生成连线,点击生成\取消墙体,整个de ...
- 分享一个基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具
soar-web 基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具,支持 soar 配置的添加.修改.复制,多配置切换,配置的导出.导入与导入功能. 环境需求 python3.xF ...
- 「造个轮子」——cicada 设计一个配置模块
前言 在前两次的 cicada 版本中其实还不支持读取配置文件,比如对端口.路由的配置. 因此我按照自己的想法创建了一个 issue ,也收集到了一些很不错的建议. 最终其实还是按照我之前的想法来做了 ...
- 一个基于图的数据管理系统-gStore
gStore是遵循 BSD协议的一个开源项目.一个基于图的 RDF 三元组存储的数据管理系统.该项目是北京大学.滑铁卢大学.香港科技大学的联合研究项目.中国北京大学计算机科学与技术研究所的数据库组对该 ...
- 一个酷炫的,基于HTML5,Jquery和Css的全屏焦点图特效,兼容各种浏览器
基于HTML5和CSS的焦点图特效,梅花图案的背景很有中国特色,而且还会动哦,效果超炫,推荐下载! 演示图 html代码 <!DOCTYPE html PUBLIC "-//W3C// ...
- RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现。
RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现. 1. 介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advan ...
- Android一个炫酷的树状图组织架构图开源控件实现过程
Android一个炫酷的树状图组织架构图开源控件 文章目录 [1 简介] [2 效果展示] [3 使用步骤] [4 实现基本布局流程] [5 实现自由放缩及拖动] [6 实现添加删除及节点动画] [7 ...
- 造个轮子之基于 Netty 实现自己的 RPC 框架
原文地址: haifeiWu和他朋友们的博客 博客地址:www.hchstudio.cn 欢迎转载,转载请注明作者及出处,谢谢! 服务端开发都会或多或少的涉及到 RPC 的使用,当然如果止步于会用,对 ...
- 「造个轮子」——cicada 源码分析
前言 两天前写了文章<「造个轮子」--cicada(轻量级 WEB 框架)> 向大家介绍了 cicada 之后收到很多反馈,也有许多不错的建议. 同时在 GitHub 也收获了 80 几颗 ...
随机推荐
- Oracle:常用的一些基本操作
表操作 查看系统中当前用户所有表: select * from user_tables;select * from user_indexs;select * from user_triggers; s ...
- Java - Spring MVC 实现跨域资源 CORS 请求
拦截器设置响应头 这种方式原理就是利用拦截器在方法执行前,我们增加请求的响应头,用来支持跨域请求.这种方案是可行的,大部分都是采用这种方案.我当时也是打算采用这种方案,直到我发现原来 Spring 框 ...
- 拿来主义:layPage分页插件的使用
布衣之谈 所谓插件,大概就是项目中可插可拔的比较小功能化的组件:这些功能组件若能力可及,自己也可以完成——也即自己造轮子,但翻看各种技术社区,相关领域的神人们往往会有更好的实现方案贡献出来,这个时候你 ...
- FTP方式发布webservice
以前我发布webservice的步骤是:在 C:\inetpub\wwwroot\路径下发布webservice,然后再在IIS中添加网站并制定路径,这样每次发布了webservice后,需要把发布 ...
- 从三个开源项目认识OpenFlow交换机 - OVS
在SDN/NFV的网络革新技术浪潮的引领下,催生了诸多数据面开源方案的诞生.业界知名度较高的有OVS(Open vSwitch).FD.io (Fast Data I/O).ODP(Open Data ...
- 【Swift】swift定义全局变量
swift定义全局变量非常简单哈,只要在类class上面直接定义,就是全局变量了 当需要在类里面定义一个类函数访问的变量的时候,直接在var或者let 前面加一个 static
- bzoj 4567: [Scoi2016]背单词
Description Lweb 面对如山的英语单词,陷入了深深的沉思,"我怎么样才能快点学完,然后去玩三国杀呢?".这时候睿智 的凤老师从远处飘来,他送给了 Lweb 一本计划册 ...
- 【NOIP 2017】宝藏
Description 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋 ...
- NOIP2014-5-10模拟赛
Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧. 早苗的新模型可以按照输入的 ...
- hdu 5002 (动态树lct)
Tree Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...