1、前言前端
前段时间作的一块东西,涉及到任务的拆解与依赖,因为时间紧急,当时采用的硬编码办法解决,如今终于回过神来,因而设计成一个“小框架”。数据库
2、问题描述框架
进行大数据分析,用Java调用Sqoop接口将数据导入Hadoop,而后运行一个mapreduce任务和多个Hive任务进行建表、统计、分析,最后运算结果导回数据库。dom
3、图解问题oop
4、需求分析单元测试
一、任务有分层测试
二、任务之间有上下层级依赖,下层任务依赖于上层任务的运算结果大数据
三、前端可配置化,用户自行配置任务层级与依赖关系编码
四、运行过程当中前端能够实时查询到运行到哪一个层级,以及已经运行的节点的运行日志线程
五、运行过程当中只要有一个节点失败,咱们认为整个任务失败,中止本次任务
六、同层级的任务并行,任务至上而下运行
5、模型
一、工做节点(WorkNode):完成某一具体任务
二、任务(WorkTask):由N个工做节点组成一个任务
三、线程组(ThreadGroup):同时执行同一层级任务
6、状态
一、Task状态:成功、失败
二、WorkNode状态:未运行、运行中、失败、成功
7、编码
一、常量定义
(1)、 任务状态
(2)、 工做节点状态
二、domain定义
(1)、 工做任务定义(任务执行状态、分层有序节点、当前执行到的层级)
(2)、工做节点定义
三、线程组设计
(1)、线程执行器接口
(2)、线程组
四、节点行为接口,定义工做节点所能执行的动做,用于扩展,已经实现的节点动做有三种 (Hive执行HiveWorkNodeAction、Java执行JavaWorkNodeAction、MapReduce 执 行 MapReduceWorkNodeAction)
五、 节点线程执行器实现
六、任务执行器,用于执行任务
8、单元测试
一、构建任务
运行结果:
9、后记
限于篇幅,代码没粘贴彻底, 后续会加入根据运行日志,从失败层级恢复任务(前提是全部任务都是可重入的)