浅析百万级分布式调度引擎——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社区找我们玩~
浅析百万级分布式调度引擎——DAGScheduleX能做什么?的更多相关文章
- FW 每秒百万级别的 HTTP 请求 sung: 重型的(heavy-duty)、分布式的、多协议测试工具
本文是构建能够每秒处理 3 百万请求的高性能 Web 集群系列文章的第一篇.它记录了我使用负载生成器工具的一些经历,希望它能帮助每一个像我一样不得不使用这些工具的人节省时间. 负载生成器是一些生成用于 ...
- 阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) ,阿里百万级QPS资源调度系统,一般的服务器qps多少? QPS/TPS/并发量/系统吞吐量
阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) 作者:用户 来源:互联网 时间:2016-03-30 13:32:40 安全流量事件https互联网资源 摘要: ...
- 攻克数据库核心技术壁垒,实现百万级QPS的高吞吐
CynosDB是腾讯云自研的新一代高性能高可用的企业级分布式云数据库.融合了传统数据库.云计算与新硬件的优势,100%兼容开源数据库,百万级QPS的高吞吐,不限存储,价格仅为商用数据库的1/10. C ...
- sqlserver 处理百万级以上的数据处理与优化
一处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应 ...
- sql百万级查询优化(转)
< 数据库技术内幕 > 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进 ...
- 数据库SQL优化大总结之 百万级数据库优化方案(转载)
网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉 ...
- 百万级PHP网站架构工具箱
在了解过世界最大的PHP站点,Facebook的后台技术后,今天我们来了解一个百万级PHP站点的网站架构:Poppen.de.Poppen.de是德国的一个社交网站,相对Facebook.Flickr ...
- mysql 百万级数据库优化方案
https://blog.csdn.net/Kaitiren/article/details/80307828 一.百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 wher ...
- sql处理百万级以上的数据提高查询速度的方法
原文:http://blog.csdn.net/zhengyiluan/article/details/51671599 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中 ...
- 百万级PHP网站Poppen.de的架构分享心得
在了解过世界最大的PHP站点,Facebook的后台技术后, 今天我们来了解一个百万级PHP站点的网站架构:Poppen.de.Poppen.de是德国的一个社交网站,相对Facebook.Flick ...
随机推荐
- GPU CPU运算时间测试
GPU CPU运算时间测试 本文主要探讨GPU,CPU在做一些复杂运算的时间测试 实验任务 1.向量加法 两个相同维度的向量a,b做加法,分别测试GPU并行时间(包含数据拷贝时间),CPU串行时间. ...
- 【Linux】3.10 进程管理(重点)
进程管理 1. 进程管理基础 在Linux中,每个执行的程序(代码)都称为一个进程.每个进程都分配一个ID号 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程.例如www服务器. 每个进 ...
- 如何定位 Druid & HikariCP 连接池的连接泄漏问题?
背景 最近碰到一个 case,一个 Java 应用无法获取新的数据库连接,日志中出现了以下错误: com.alibaba.druid.pool.GetConnectionTimeoutExceptio ...
- Win10锁屏与关机相关设置-注册表
禁用锁屏 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData ...
- python之request请求后响应的数据从中获取指定值
request请求后响应的数据为字典类型,从中获取指定值 如上图,需要获取Code的值,或者Msg的值 首先把response通过内置json解码器解码输出 response = response. ...
- [笔记]image对象如何添加class
1.image对象可以添class,但不能以属性.class的方法添加,而因该把他当成一个节点 2.JS添加和删除class名 添加:节点.classList.add("类名"): ...
- CF1370C题解
本蒟蒻的第二篇题解,找题归功于教练 题目传送门 这道题目找好了规律很简单: 具体思路: 题目大意: 有一个正整数 nnn.两名玩家轮流操作.每次操作可以执行以下一种: 将 nnn 除以一个 nnn 的 ...
- API接口调用--历史上的今天(v1.0)
历史上的今天 参考(聚合数据):https://www.juhe.cn/docs/api/id/63 事件列表(v1.0) 接口地址: http://api.juheapi.com/japi/toh ...
- 从零开始学Flink:开启实时计算的魔法之旅
在凌晨三点的数据监控大屏前,某电商平台的技术负责人突然发现一个异常波动:支付成功率骤降15%.传统的数据仓库此时还在沉睡,而基于Flink搭建的实时风控系统早已捕捉到这个信号,自动触发预警机制.当运维 ...
- 基于Kubernetes可扩展的Selenium 并行自动化测试部署及搭建(3)——基于k8s的selenium grid集群搭建
本篇主要讲解如何使用k8s搭建selenium grid集群 Selenium Grid集群部署 1. 首先我们将通过 Kubernetes 服务进行通信以到达hub和nodes.Kubernete ...