zoukankan      html  css  js  c++  java
  • 开源一个自己造的轮子:基于图的任务流引擎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编写的不同数据挖掘任务、进行任务调度、监测的项目。

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

    邮箱:bchengzhou@163.com

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

    进行交流讨论。

    项目开源地址github

     

  • 相关阅读:
    让php更快提供文件下载
    设计模式 03 设计模式分类
    针对配置文件操作 PHP最常用的四个ini函数
    查找算法
    排序算法
    设计模式 01 统一建模语言基础知识
    关于div和css的一些好习惯
    数据结构的基本概念
    HTML特殊转义字符对照列表
    .htaccess 详解
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205008.html
Copyright © 2011-2022 走看看