hera(赫拉)任务调度系统--为数据平台打造的任务调度系统

hera(赫拉)任务调度系统–为数据平台打造的任务调度系统


hera项目背景

 在大数据平台,随着业务发展,每天承载着成千上万的ETL任务调度,这些任务集中在hive,shell脚本调度。怎么样让大量的ETL任务准确的完成调度而不出现问题,甚至在任务调度执行中出现错误的情况下,任务能够完成自我恢复甚至执行错误告警与完整的日志查询。hera任务调度系统就是在这种背景下衍生的一款分布式调度系统。随着hera集群动态扩展,可以承载成千上万的任务调度。它是一款原生的分布式任务调度,可以快速的添加部署wokrer节点,动态扩展集群规模。支持shell,hive脚本调度,可以动态的扩展支持python等服务器端脚本调度。
 hera(赫拉)基于阿里巴巴开源Zeus重写的分布式任务调度系统。

为什么要写hera

 开源zeus在14年开源出来之后,只是晒出了代码,后期没用再做维护更新。老zeus系统界面使用GWT技术开发的页面,几乎是不可维护。部分公司对zeus进行改造,但是改造后,代码质量可读性等严重影响zeus的进一步发展与可维护性。
 但是zeus作为taobao阿里系开源出来的一款任务调度系统,它具备了所有任务调度系统设计的一些通用的设计思想与方案。不得不承认,zeus任务调度系统也是一款功能强大的分布式任务调度系统,在集群规模与配置适度,它可以承载着成千上万的规模的任务调度。zeus拥有如此强大的性能与优秀的设计思想,但是zeus系统维护成本与难度及其大,不利于扩展集合公司一些部分特殊业务场景下的需求。hera系统在这种环境下应运而生。

hera设计目标

 hera任务调度系统完成重写了zeus全部核心的任务调度功能,并扩展了许多基于公司通用业务场景的分布式任务调度,大致包括以下几点:
- 支持灵活多变的job类型调度,原生的支持shell,hive脚本调度.在此基础上,可以动态的支持java,python等多种丰富类型的job。
- 支持灵活多变的任务调度类型,自动任务调度,实时任务调度,任务脚本实时更新执行等多种调度类型。
- 快速的可视化实现任务之间复杂的依赖,整个任务链路构成一个DAG,任务直接严格的按照层级依赖顺序执行。
- 实现集群直接,机器宕机环境实现机器断线重连与心跳恢复与hera集群HA,节点单点故障环境下任务自动恢复。
- 对外提供API,开放系统任务调度触发接口,便于对接其它需要使用hera的系统。

关于丰富的job类型

 hera系统立足于大数据平台,在开发过程中,原生的支持hive,shell脚本。加上hera系统根据不同的服务器端脚本通用的执行特性,做了深度封装,理论上可以支持任务任何能与shell交互的语言。可以拿shell,hive之外的其它脚本举个简单例子,在服务器端执行一个简单python脚本,通常会这样写个pyhton脚本hello.py

print('hello world')

那么让一个hera任务执行这个脚本的方式就是首先需要往hadoop集群上传这个hello.py到hdfs执行目录,然后在hera中创建shell脚本hello.sh:

download[hdfs:///hera/hello.py hello.py];
python hello.py;

 这样一个完整的pyhton脚本就能通过方式实现shell方式调用执行,通过hera内部实现的job执行封装,脚本的文法解析,实现pyhton任务执行。实际上,通过这种方式甚至可以实现java,scala等服务器端语言的脚本任务执行。

关于灵活的任务调度类型与job依赖

 任务调度系统必须支持灵活多变的任务调度类型,比如任务自动调度执行,任务手动执行。
 对于ETL任务,hive脚本的执行可能会使用不同级别的数据仓库的表,比如计算过程依赖原始ods层表,计算结果依赖dw中间表,dw层表的产生依赖ods层表,不同的表的产出由不同任务来执行产出,这样就需要任务直接能够灵活的支持复杂的任务依赖,下游任务的计算依赖上游任务的执行结果。任务与表间管理逻辑如下:

 对于诸如上面复杂的任务依赖关系,那么任务出错恢复上,就必须支持灵活的任务失败恢复机制,因此针对任务链路的实时恢复必须加以支持。hera系统就支持针对链路级别的任务实时恢复。

关于集群断线重连与HA

 构建分布式系统,无法避免的就是需要做集群容灾。在出现服务器宕机与网络闪断的情况下要做到集群实现自动通信恢复,在此基础上,要做到实现任务在通信恢复后任务重新恢复执行等。
 hera系统尝试在Netty通信机制基础上,实现了在网络闪断,机器单点故障宕机,自动恢复通信机制与任务调度,能够最大程度的保证集群高可用与HA。

hera设计架构图

 hera系统只是负责任务的调度执行,任务的具体计算依赖hadoop集群,集群架构模式如下:

 hera系统本身严格的遵从主从架构模式,由主节点充当着任务调度触发与任务分发器,从节点作为具体的任务执行器executor.架构图如下:


 hera所采用的技术栈:

hera的未来

未来发展方向

 hera系统仅仅完成了ETL任务调度,完成一些每天必不可少的业务计算。实际数据部门的运转,还需要一个强大的高效数据分析引擎。分析引擎的职业其实完成ETL 脚本的执行,未来考虑hera系统同时充当数据分析引擎的职责。可以减少额外的分析引擎所占用的资源。
 支持更加高级的任务恢复机制,比如根据数据血缘分析恢复与表,字段相关的任务,于此同时任务支持根据id的方式批量恢复。
 支持灵活的任务执行优先级,保证核心级别的任务优先调度等机制。

关于开源

 hera未来考虑在合适的时候开源出去。开源的目的并不是开源就是为了晒代码,而是为所有的数据部门有任务调度需求而打造出的一款有影响力,可维护的,易部署的分布式任务调度系统。

猜你喜欢

转载自blog.csdn.net/Pengjx2014/article/details/81276874