任务流程引擎设计

一、前言

        前段时间做的一块东西,涉及到任务的拆解与依赖,由于时间紧急,当时采用的硬编码办法解决,现在终于回过神来,于是设计成一个“小框架”。

二、问题描述

        进行大数据分析,用Java调用Sqoop接口将数据导入Hadoop,然后运行一个mapreduce任务和多个Hive任务进行建表、统计、分析,最后运算结果导回数据库。

三、图解问题

任务流程引擎设计_第1张图片

四、需求分析

        1、任务有分层

        2、任务之间有上下层级依赖,下层任务依赖于上层任务的运算结果

        3、前端可配置化,用户自行配置任务层级与依赖关系

        4、运行过程中前端可以实时查询到运行到哪个层级,以及已经运行的节点的运行日志

        5、运行过程中只要有一个节点失败,我们认为整个任务失败,停止本次任务

        6、同层级的任务并行,任务至上而下运行

五、模型

        1、工作节点(WorkNode):完成某一具体任务

        2、任务(WorkTask):由N个工作节点组成一个任务

        3、线程组(ThreadGroup):同时执行同一层级任务

六、状态     

        1、Task状态:成功、失败

        2、WorkNode状态:未运行、运行中、失败、成功

七、编码

    1、常量定义

           (1)、 任务状态

            任务流程引擎设计_第2张图片

             (2)、 工作节点状态

                    任务流程引擎设计_第3张图片

        2、domain定义

                (1)、 工作任务定义(任务执行状态、分层有序节点、当前执行到的层级)    

                    任务流程引擎设计_第4张图片

                (2)、工作节点定义

                      任务流程引擎设计_第5张图片

                    任务流程引擎设计_第6张图片

            3、线程组设计

                 (1)、线程执行器接口

                        任务流程引擎设计_第7张图片    

                  (2)、线程组

                        任务流程引擎设计_第8张图片

                   4、节点行为接口,定义工作节点所能执行的动作,用于扩展,已经实现的节点动作有三种                                   (Hive执行HiveWorkNodeAction、Java执行JavaWorkNodeAction、MapReduce 执                                行 MapReduceWorkNodeAction)

                          任务流程引擎设计_第9张图片

                    5、 节点线程执行器实现

                            任务流程引擎设计_第10张图片

                    6、任务执行器,用于执行任务

                        任务流程引擎设计_第11张图片

八、单元测试

            1、构建任务

                任务流程引擎设计_第12张图片

                    运行结果:

                            任务流程引擎设计_第13张图片

九、后记

       限于篇幅,代码没粘贴完全, 后续会加入根据运行日志,从失败层级恢复任务(前提是所有任务都是可重入的)

你可能感兴趣的:(任务流程引擎设计)