大数据 通用 调度系统 的设计和实现

本文介绍了设计和实现一个大数据调度系统的过程,该系统适用于ETL任务、报表生成等多种场景。系统支持脚本和MR任务,能根据DAG图严格按依赖关系执行。系统包括前端和后台,前端用于任务配置和实例查看,后台使用Python进行任务调度。调度核心包括Master进程分发任务,Worker进程执行任务和依赖检查,以及日志采集进程。系统稳定运行一年以上,每天调度数百个集群任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标:

调度的业务类型是针对ETL数据抽取任务、个性化推荐的离线任务、每天的报表、每周的统计报表、月级别的统计报表等,小时级的日志清洗任务等 能够按照用户的配置,准时进行调度。

调度的任务主要是一些脚本文件还有mr写的jar包程序。任务内部存在子任务的依赖关系,这种依赖关系形成DAG图,在调度系统中能够严格的按照依赖关系对任务进行调度执行。

整个调度系统有前端和后台两个部分,前端支持任务的创建配置,每天跑的实例的查看,新建任务的审核、邮件组的配置、以及分布式提交机的配置等几个大的方面。

在任务创建这部分,用户可以对代码git 路径进行配置 然后调度系统会拉取代码,然后按照用户的启动脚本对代码进行执行。执行完毕后删除掉该任务,自定义的日志信息会转出到用户的执行环境目录下。任务的隔离

新建任务的审核,用户新建的任务只有每个开发组的组长确认以后才能真正予以实施。

邮件组的配置 邮件组是用来发报警用的。DAG图中任意一个子任务失败都会导致整个任务失败并停止该任务的执行。同时发出报警邮件到相应邮件组的邮箱和手机中。

分布式提交机配置  可以配置两台提交机 用作主备   如果一台提交机挂掉会自动切到备份提交机上提交任务  如果用户选择了负载均衡提交  那么就会在多个提交机上提交  其实这个没有很大的必要

任务运行实例的查看   这个部分是该调度系统比较核心的部分,能够把调度系统针对每个任务的执行情况展示出来,比如几点执行 几点结束,是否需要重跑,子任务的执行情况查看。子任务的日志查看等。

实现过程:

前端是使用的tomcatspring-mvc构建的一个页面事件处理,能够对用户的操作信息计入mysql数据库。

调度后台是使用python写的,主要是在mysql中读取作业信息,然后分析作业的调度配置和依赖关系,生成具有执行依赖队列的调度实例,在正确的时间将调度的实例运行起来。目前是一个master进程 一个worker进程 一个日志采集进程

Master进程主要负责任务分发,1.在任务级别,判断哪些任务当前该要执行了,2,同时分析该要执行的任务,按照依赖情况 形成依赖队列 分发到worker进程中。

Worker的作用一是针对没有依赖的子任务,直接调度起来执行,针对有依赖的子任务,首先检查该依赖的子任务是否执行成功,如果执行成功则开始执行,如果执行失败,则直接标记为失败。Worker在执行完该子任务后  会更新自己的执行信息写入到myql中。

日志采集进程

主要是针对作业在集群上执行的过程中,控制台输出的日志信息,用户自己重定向的日志由用户自己负责查看。日志采集的过程是,针对worker进程标记出的子任务的状态信息,比如状态是在运行中,那么这种需要每分钟去提取该日志信息,当用户在网页上查看日志信息时能够看到是增量的效果,说明任务在不停的执行。针对子任务的状态是未执行的不提取,针对任务的状态是执行结束 而且日志标志位还没置为已提取过时,最后一次提取出来。


详细的代码信息我会传到git上,后期会有更新,目前该调度系统已经稳定运行一年多,每天都有几百个集群任务在正常调度。成就感还是不错。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值