在大数据平台,随着业务发展,每天承载着成千上万的ETL任务调度,这些任务集中在hive,shell脚本调度。怎么样让大量的ETL任务准确的完成调度而不出现问题,甚至在任务调度执行中出现错误的情况下,任务能够完成自我恢复甚至执行错误告警与完整的日志查询。hera任务调度系统就是在这种背景下衍生的一款分布式调度系统。随着hera集群动态扩展,可以承载成千上万的任务调度。它是一款原生的分布式任务调度,可以快速的添加部署wokrer节点,动态扩展集群规模。支持shell,hive,spark脚本调度,可以动态的扩展支持python等服务器端脚本调度。
架构
hera系统只是负责调度以及辅助的系统,具体的计算还是要落在hadoop、hive、yarn、spark等集群中去。所以此时又一个硬性要求,如果要执行hadoop,hive,spark等任务,我们的hera系统的worker一定要部署在这些集群某些机器之上。如果仅仅是shell,那么也至少需要linux系统。对于windows系统,可以把自己作为master进行调试。
hera系统本身严格的遵从主从架构模式,由主节点充当着任务调度触发与任务分发器,从节点作为具体的任务执行器.架构图如下:
设计目标
hera分布式任务调度系统的设计目标首先是要完成zeus大部分核心功能,并能够根据自己公司的需求进行扩展。大致目标有以下几点
- 支持任务的定时调度、依赖调度、手动调度、手动恢复
- 支持丰富的任务类型:shell,hive,python,spark-sql,java
- 可视化的任务DAG图展示,任务的执行严格按照任务的依赖关系执行
- 某个任务的上、下游执行状况查看,通过任务依赖图可以清楚的判断当前任务为何还未执行,删除该任务会影响那些任务。
- 支持上传文件到hdfs,支持使用hdfs文件资源
- 支持日志的实时滚动
- 支持任务失败自动恢复
- 实现集群HA,机器宕机环境实现机器断线重连与心跳恢复与hera集群HA,节点单点故障环境下任务自动恢复,master断开,worker抢占master
- 支持对master/work 负载,内存,进程,cpu信息的可视化查看
- 支持正在等待执行的任务,每个worker上正在执行的任务信息的可视化查看
- 支持实时运行的任务,失败任务,成功任务,任务耗时top10的可视化查看
- 支持历史执行任务信息的折线图查看 具体到某天的总运行次数,总失败次数,总成功次数,总任务数,总失败任务数,总成功任务数
- 支持关注自己的任务,自动调度执行失败时会向负责人发送邮件
- 对外提供API,开放系统任务调度触发接口,便于对接其它需要使用hera的系统
- 组下任务总览、组下任务失败、组下任务正在运行
- 支持map-reduce任务和yarn任务的实时取消。
- (还有更多,等待大家探索)
支持任务的定时调度、依赖调度、手动调度、手动恢复
- 定时调度
主要是根据cron表达式来解析该任务的执行时间,在达到触发时间时将该任务加入任务队列
为了进行测试我新建了一个shell任务 在15:40执行 ,在配置项里输入我们自己的配置,在脚本中使用${}进行替换,其中的继承配置项,即任务继承的所在组的配置信息,如果有重复以最近的为准
当任务达到时间开始执行,输出我们想要的结果:赫然分布式任务调度系统
- 依赖调度
我们的任务大部分都有依赖关系,只有在上一个任务计算出结果后才能进行下一步的执行。我们的依赖任务会在所有的依赖任务都执行完成之后才会被触发加入任务队列
贴一个已有的任务执行信息
- 手动调度
手动调度即为手动执行的任务,手动执行后自动加入任务队列,请注意,手动任务执行成功后不会通知下游任务(即:依赖于该任务的任务)该任务已经执行完成
- 手动恢复
手动恢复类似于手动调度,于手动调度的区别为此时如果该任务执行成功,会通知下游任务该任务已经执行完成
支持丰富的任务类型:shell,hive,python,spark-sql,java
hera分布式任务调度系统依赖于jdk原生的ProcessBuilder 通过该工具向work/master以shell命令的方式执行任务。
比如python任务 我们可以首先写一个python脚本hello.py(这里随便贴个图片),然后把该脚本上传到hdfs
在执行的时候我们可以通过
download[hdfs:///hera/hello.py hello.py];python hello.py;
来执行该脚本
这样一个完整的pyhton脚本就能通过方式实现shell方式调用执行,通过hera内部实现的job执行封装,脚本的文法解析,实现pyhton任务执行。实际上,通过这种方式甚至可以实现java,scala,hive-udf等服务器端语言的脚本任务执行。
- hive spark-sql 脚本的执行
对于hive脚本和spark-sql脚本 都是通过-f 命令来执行一个文件
可视化的任务DAG图展示,任务的执行严格按照任务的依赖关系执行& 某个任务的上、下游执行状况查看,通过任务依赖图可以清楚的判断当前任务为何还未执行,删除该任务会影响那些任务。
当任务数量过多,依赖错综复杂时就需要一个DAG图来查看任务之间的关系。
项目托管地址
https://gitee.com/scx_white/hera