当前位置: 首页 > news >正文

开源交流丨任务or实例 详解大数据DAG调度系统Taier任务调度

课件获取:关注公众号 “数栈研习社”,后台私信 “Taier” 获得直播课件

视频回放:点击这里

ChunJun 开源项目地址:github 丨 gitee 喜欢我们的项目给我们点个__ STAR!STAR!!STAR!!!(重要的事情说三遍)__

技术交流钉钉 qun:30537511

前言

在分享之前,先为大家介绍一下任务和实例的关系。任务指的是我们在任务开发界面上去创建的任务,比如Spark任务、SparkSQL任务、数据同步任务等,这些任务在开发过程中是静态的脚本,当被提交到计算节点去执行时,被执行的过程我们把它抽象成实例。举一个简单的例子来说明:比如我们写完一个Java的类然后把它打包成Jar包,其实这个Jar包就是一个静态类,当我们执行Jar包时,这个过程我们会把它抽象成一个实例,这就是任务与实例的关系。

Taier实例生成

1、Taier实例类型

首先我们来看一下Taier实例的类型,在Taier中实例主要有3种类型:

  • 周期实例:T+1生成,完整依赖

  • 补数据实例:立即生成,局部依赖

  • 临时运行实例:立即生成,无依赖

● 周期实例

周期实例是指在前一天生成的当天实例(T+1),拥有一个完整独立的实例依赖体系,也就是任务和任务之间形成的完整的DAG图。周期实例实际上指的是离线任务,因为实时任务并无上游依赖关系。

file

上图就是配置任务之间依赖的地方,任务和任务之间会形成一个完整DAG(Direct Acyclic Graph)图,中文名叫有向无环图,从图中任意一个节点出发,根据方向无法回到原节点的图就叫做有向无环图。

注意: 提交任务的时候回判断是否成环。

而实例依赖可分为两种:父子依赖关系和自依赖关系。

● 父子依赖关系

父子关系可以理解为不同的任务依赖:例如任务A运行需要任务B的运行结果,这个时候任务A就需要依赖任务B,那么B任务就是A任务父任务。

● 自依赖关系

自依赖关系可以理解为相同任务的不同周期依赖:例如 任务A是一个小时任务,0点开始执行,10点结束,每小时运行一次,那么任务A在0点合10点这个时间段上需要执行10次,如果说任务A每次执行都需要上一个周期执行结束,那么任务A就是一个自依赖任务。

除了上述两种依赖任务,还有跨周期依赖,不同周期任务的父子依赖关系:子任务会找到父任务最近的执行的一个周期实例依赖。

● 补数据实例

补数据实例是用户通过页面或者调用接口触发生成实例,仅有局部的依赖关系且和周期实例的依赖关系相互独立互不影响,实例依赖关系和周期实例一致。

注意:补数据是生成局部的DAG图,例如 1、2、3任务关系是 1->2->3,在页面上选择1和3任务进行补数据,那么1,2,3任务都会生成,但是最终结果只会运行1和3任务,2任务不运行。

file

● 临时运行实例

临时运行实例可以分成两种离线和实时。

离线任务:用户可以直接运行任务生成实例,实例没有依赖关系。

实时任务:实时任务没有周期,上下游依赖这一概念,所以所以的实时实例都是临时运行的。

Taier周期实例生成

接下来我们来看一下Taier周期实例的生成。

file

上图为Taier实例的整体生成图,Taier主节点在启动的时候会开启一个定时器,定时器会不停的去判断当日的实例是否已经生成,如果没有生成就会触发事件给CycleJobBuilder生成实例,再通过JobDependency封装实例之间的依赖关系。

其中CycleJobBuilder是指用于生成周期实例,扫描数据

库任务表并且获取zk上所有的taier节点,把封装后的实

例分配到每一台Taier节点上;JobDependency是用于生成job之间的依赖关系。

接下来为大家介绍下Taier的主从选举。

在application.properties文件中配置zk:

nodeZkAddress=${ZK_HOST}:${ZK_PORT}/taier

● Taier服务注册

每一台Taier服务都会去把自己的地址注册到zk上/taier/brokers下,在生成实例的时候,主节点就是从/taier/brokers获取所有注册在zk的Taier节点信息。

每一台Taier服务和zk会维持一个心跳,并保存在/taier/brokers/ip:port/heart节点下。

file

● 主节点选举

Taier的主从选举是基于LeaderLatch来实现的,在启动Taier后,Taier会尝试去抢占/taier/masterLatchLock这边锁,抢到锁的节点就是主节点,没有抢到锁的节点就是从节点。

file

Taier实例调度

接下来为大家介绍下Taier实例调度,首先为大家介绍下调度流程。

file

上图就是Taier实例调度的整体流程,在启动Taier服务时,会启动配置的所有调度器,并且开始扫描实例,并提交。

● 调度器

由于实例类型的不同,我们需要的调度器也会不同,但是他们都有一个父类(Scheduler)。

例如CycleJobScheduler专门负责周期实例的调度,而FillDataJobScheduler是负责补数据实例的调度。

不同的调度器,提交的条件也不一定,例如CycleJobScheduler只会扫描2天内的周期实例,而RestartJobScheduler是没有时间限制的,而且每一个调度器的拦截器链也会不一样。

file

● 拦截器

拦截器是用于负责检查实例是否到达提交条件,多个拦截器会形成拦截器链。当实例通过拦截器链时,说明实例到达提交状态,所以实例会被放入到提交队列中,等待提交。

默认提供的拦截器:

1.JobStatusSubmitInterceptor:用于判断实例状态。

2.JobUpStreamSubmitInterceptor:用于判断实例上游是否运行完成。注意,该上游实例不仅仅是上游任务实例,还有可能是自依赖实例。

3.TaskStatusSubmitInterceptor:用于判断任务状态是否正常。

每个调度器内装载的拦截器可以不同。

file

Taier实例提交

最后为大家介绍下Taier实例的提交,因为任务类型的不同,所以实例提交置计算节点的逻辑也不同,为了能有更好的扩展性,Taier实现类插件化的处理。

file

file

相关文章:

  • 配置Tomcat时系统环境变量已经配置好,但是启动Tomcat时还是闪退的解决办法
  • app,小程序打包
  • CVPR2022|比VinVL快一万倍!人大提出交互协同的双流视觉语言预训练模型COTS,又快又好!
  • 2023年考武汉安全员证有什么作用?安全员岗位职责是什么?甘建二
  • 开户许可证识别 易语言代码
  • ESP8266-Arduino编程实例-MLX90615红外测温仪驱动
  • 【算法leetcode】1837. K 进制表示下的各位数字总和(rust和go是真的好用)
  • Java中的实体类为什么要 implements Serializable?
  • 第十七天计算机视觉之光学字符识别OCR
  • Transformer架构
  • 基于SSM框架的人力资源管理系统毕业设计源码060936
  • js的基础
  • 分布式协同AI基准测试项目Ianvs:工业场景提升5倍研发效率
  • 通过Amazon EventBridge监控AWS资源发送告警至钉钉
  • Vue三种3D动态词云实现
  • 【技术性】Search知识
  • css的样式优先级
  • egg(89)--egg之redis的发布和订阅
  • happypack两次报错的问题
  • isset在php5.6-和php7.0+的一些差异
  • java 多线程基础, 我觉得还是有必要看看的
  • java概述
  • Java面向对象及其三大特征
  • JS实现简单的MVC模式开发小游戏
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 使用API自动生成工具优化前端工作流
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 优化 Vue 项目编译文件大小
  • 责任链模式的两种实现
  • 阿里云API、SDK和CLI应用实践方案
  • 昨天1024程序员节,我故意写了个死循环~
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • $.ajax,axios,fetch三种ajax请求的区别
  • (¥1011)-(一千零一拾一元整)输出
  • (2)STL算法之元素计数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (力扣)循环队列的实现与详解(C语言)
  • (算法)前K大的和
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • ... 是什么 ?... 有什么用处?
  • .gitattributes 文件
  • .Net - 类的介绍
  • .Net Redis的秒杀Dome和异步执行
  • .NET 中的轻量级线程安全
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...