数栈百万级分布式调度引擎——DAGScheduleX能做啥?

公交车伴随着我们的日常生活已是随处可见,不同路线的公交车根据各自的时间表有序发出,到达站点,接上站台的乘客再缓缓驶向下一站……早高峰会有短区间的加班车,发车间隔也更短,夜半时分的班次则间隔更长。这一切都服从于公交总站的调度。

在大数据平台中,也会有各式各样的任务需要按照一定的时间间隔和先后顺序有序进行,而管理这一切的就是调度引擎。它不仅要让任务按时按点的执行,更要面对种种复杂的场景,例如:

  • 10分钟执行一次的周期任务执行了11分钟,下一周期是否要直接开始计算
  • 需要A任务执行完成后才执行的B任务,等待了一天还未等到A执行完毕,是否该继续等待
  • 十万个任务同时被提交,该以怎样的顺序进行执行

问题种类繁多,如果没有一个健壮智能的调度引擎,是无法像有序的公交车系统一样支撑起一个大数据平台的任务执行的。

在市场上存在许多的调度框架,比如:Quartz、Elastic-Job、XXL-JOB等,但是他们仅支持定时提交任务,就好比固定班次的公交车,虽然能按时到达站点,却难以面对早晚的乘车高峰。这样单一的调度方式是远远满足不了“曲折离奇、复杂多变”的业务场景。这个时候我们数栈自研的百万级分布式调度引擎--DAGScheduleX就上场啦,它不仅满足定时功能,内置丰富的策略来应对不同情况下的场景,如:资源限制、快速失败、优先级动态调整、快速过期、上下游调度状态依赖。

数栈支持基础定时调度与复杂跨周期依赖策略。

在整个数栈架构中,DAGScheduleX作为数栈平台应用和底层大数据集群的纽带,起着承上启下的作用,在集群资源范围内,协调着任务资源分配,安排着任务提交运行与周期性调度。

一、DAGScheduleX的主要流程

二、多集群配置和多租户隔离

在实际的数据开发中,我们可能会有开发、测试等多环境。若要将任务提交在对应的集群下,我们只需要在数栈的控制台上配置好不同的集群环境,并绑定不同的租户,此时任务提交会根据不同租户实现集群隔离。

1. 控制台可以绑定不同类型的集群: 如生产环境A Hadoop、 生产环境B LibrA
2. 多个租户可绑定一个集群
3. 提交任务时,通过tenantId 区分目标集群了

三、实例生成和提交

DAGScheduleX目前支持多种计算组件,如Flink、Spark、TensorFlow、Python、Shell 、Hadoop MR、Kylin、Odps、RDBMS(多种关系型数据库)等等,所有上层应用提交任务都只要找好对应的插件类型就可以执行了。

DAGScheduleX支持自定义任务类型,扩展新的插件也是非常的方便,只要定义好对应的插件typeName并实现IClient中的定义的接口方法就可以。接口方法有以下:

  • init(初始化)方法
  • judgeSlots(资源判断)方法
  • submitJob(提交任务)方法
  • getJobStatus(获取任务状态)方法
  • getJobLog(获取任务执行日志)方法
  • cancelJob(取消任务)方法

一个Task(任务)提交到DAGScheduleX,就会提前一天生成好第二天的Job(实例)任务,到了执行的当天他们都会按照规定好的调度时间去运行,然后再获取执行结果。当然补数据和立即运行是不受限的,DAGScheduleX还支持跨租户间任务上下游依赖、任务自依赖、任务优先级调整、控制台任务队列管理、运维中心任务监控等功能。

四、任务告警

在上下游依赖链路较长的时候,一个上游Job(实例)失败就可能导致下游的数据出现问题。对于这种情况,DAGScheduleX支持多种场景的监控告警:

  • 执行超过规定时长
  • 执行失败
  • 任务未运行
  • 任务停止

控制台告警通道不仅支持钉钉、短信、邮件等通用告警方式还支持用户自定义的告警通道:

  • 引入DAGScheduleX的告警sdk
  • 实现ICustomizeChannel中的自定义告警逻辑
  • 控制台告警通道上传打包好的jar
  • 应用中配置对应的告警场景

五、总结

DAGScheduleX是一个能对任务进行实例生成,实例调度、实例提交、实例运维、实例告警的分布式任务调度引擎。而数栈的离线计算、流计算、算法开发等所有的套件都依赖于调度引擎来执行任务,是很重要的枢纽


本文首发于:数栈研习社

数栈是云原生—站式数据中台PaaS,我们在github上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,比如MySQL,HDFS等,也可以采集实时变化的数据,比如MySQL binlog,Kafka等,是全域、异构、批流一体的数据同步引擎,大家如果有兴趣,欢迎来github社区找我们玩~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java分布式调度框架是一种用于分布式系统中任务调度和资源管理的框架。以下是一些常见的Java分布式调度框架: 1. Apache Mesos:Apache Mesos是一个高效的分布式系统内核,它允许在大规模集群中高效运行各种应用程序。它提供了任务调度、资源分配、容错和服务发现等功能。 2. Apache Spark:Apache Spark是一个快速的通用集群计算系统,提供了内存计算和分布式任务调度等功能。它支持多种编程语言,包括Java,并且可以与Hadoop、Hive和HBase等相关生态系统集成。 3. Spring Cloud Data Flow:Spring Cloud Data Flow是一个用于构建和管理大规模数据处理和集成应用程序的分布式系统。它提供了任务调度、数据流管理、实时分析和批处理等功能,并且可以与Spring Boot和Spring Cloud等相关框架集成。 4. Apache Hadoop YARN:Apache Hadoop YARN是Hadoop框架的资源管理和任务调度系统。它通过将任务调度和资源管理分离,实现了更高的系统效率和灵活性。 5. Netflix Fenzo:Netflix Fenzo是一个用于任务调度和资源管理的开源库。它提供了灵活的调度算法和资源分配策略,可以与Mesos和Kubernetes等容器编排系统集成。 6. Quartz:Quartz是一个开源的任务调度框架,用于在Java应用程序中执行定时和延迟任务。它支持复杂的调度需求,并且可以与多个任务执行器集成,包括集群和分布式环境。 这些框架提供了不同的功能和适用场景,可以根据具体的需求选择最适合的框架。无论是大规模数据处理、实时分析还是定时任务调度,都可以找到适合的Java分布式调度框架来支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值