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