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

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

  1. 大数据平台网站日志分析系统

    1:大数据平台网站日志分析系统,项目技术架构图: 2:大数据平台网站日志分析系统,流程图解析,整体流程如下: ETL即hive查询的sql; 但是,由于本案例的前提是处理海量数据,因而,流程中各环节所 ...

  2. 大数据平台日志存储分析系统解决方案

    大数据平台日志存储分析系统是在大数据平台下,针对业务系统产生的日志记录进行存储和分析.日志数据来自ElasticSearch存储的日志历史数据,并将需要存储和分析的日志数据从ElasticSearch ...

  3. 计算机机房kvm系统配件,数据中心机房建设项目KVM系统.doc

    数据中心机房建设项目KVM系统 机房集中控管系统需求分析 机房现状简介 根据数据中心机房的具体情况,机房分布在不同楼层,分别属于不同部门,包括服务器(IBM.HP.Compaq.DELL.SUN等). ...

  4. 服务器端配置正方教务系统,手把手带你打造一个教务系统客户端(附源码)

    本篇博客主要和大家分享编写一个学校教务系统的客户端版本,主要是关于登录以及数据获取方面,结尾还会附上本人以前编写的客户端源代码,有兴趣的可以自行下载玩耍~ 阅读本文大概需要5分钟. 前言 好久没有更新 ...

  5. 基于树莓派+STM32+OneNET云平台打造智能家居系统(一)硬件设计篇

      本次分享的是之前一个课程设计, 会分为几篇博文进行分享.智能家居是目前研究与发展的一大热点,本设计是结合STM32微处理器/树莓派(Raspberry Pi)3b+.温湿度传感器.继电器以及ESP ...

  6. 微商城系统之商家平台任务自动分析处理系统_OctShop

    商城系统会自动分析一些可自动处理的任务,如:到时间买家没有确认收货,系统会根据订单相关信息判断是否可以自动确认收货.同样,售后完成后,买家没有确认售后完成,系统也会自动确认完成.拼团,秒杀等商品,如果 ...

  7. python开发出来的crm系统_用Python打造一个CRM系统(二)

    在上一篇中介绍了CRM和Django,在本篇中将聊聊Django的最佳实践. 总的来说就是遵循Django的设计理念:松耦合.代码精简.快速开发.DRY.明确优于隐式.一致性等.下面从开发环境.项目组 ...

  8. 基于android平台的旅游系统,基于Android平台的智能导游系统设计方案

    图3 智能导游系统应用功能模块设计 3. 1 游客信息管理模块 游客信息管理模块负责对团队游客的信息进行管理,支持数据存储.查询.修改等功能,以随时记录游客信息,方便对旅游团队进行管理. Androi ...

  9. 视频监控系统中的平台服务器,视频监控系统中的服务器

    视频监控系统中的服务器 内容精选 换一换 针对于医院的时钟同步系统装置设计范围比较广,在医院内提供一套可靠.经济和有效,能够提供一个统一的北斗时间服务器对医院的数字化管理和医院各部门的统一协调意义重大 ...

  10. python开发出来的crm系统_用Python打造一个CRM系统(三)

    在上一篇中我们基于cookiecutter-django创建了一个one_crm的项目,在本文中将在本地进行初始化,并成功运行起来. 本地初始化之前先确保环境先安装了Python3.8.Postgre ...

最新文章

  1. 大龄程序员刚迈过了 35 岁这个“坎儿”,和大家说点儿心里话
  2. LightOJ - 1265 概率
  3. Vim as Python IDE on windows(转)
  4. 安装 Python IDLE
  5. 科大星云诗社动态20210118
  6. Leet Code OJ 482. License Key Formatting [Difficulty: Medium]
  7. 发红包android
  8. 让 C#智能注释时允许换行
  9. 多线程操作时操作系统时间片_从零开始自制操作系统(15):内核多线程
  10. SpringBoot 整合Redis 单机、哨兵、集群
  11. BugkuCTF-MISC题隐写3
  12. 24 WM配置-策略-入库策略4-定义空存储箱策略L(Next Empty Bin Strategy)
  13. java count 在哪一类里_count 是java关键字吗
  14. MFC初探 —— 双击Picture Control具体位置放大图片
  15. mac 查看进程及杀进程
  16. NetApp 数据存储解决方案:广泛的全闪存、混合闪存和对象存储系统产品组合
  17. java课设迷宫游戏_Java编写迷宫小游戏
  18. 崔天翼的找工作总结 zz
  19. 关于Likelihood 和 Probability的差别
  20. 笑对人生,坐看云起云落

热门文章

  1. linux mount iso文件系统,在linux系统上永久挂载ISO像镜文件
  2. 刷百度权重那些不为人知的事情
  3. (基础)单个字符的大小写转换
  4. 怎么出家ajax假死状态,Ajax如何解决假死?
  5. 爆肝100天,B站UP主开发会写高考作文的AI,内含17亿参数、2亿数据、1万行代码
  6. bzoj #1854 游戏(二分图匹配)
  7. 服装ERP软件有哪些优点?
  8. 去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情。例如原价 ¥988,标明打 7 折,则折扣价应该是 ¥988 x 70% = ¥691.60。本题就请你写个程序替客户计算折扣价。
  9. 文件解密 [Java]
  10. Express框架、Webstorm中创建Express项目