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

数栈DTinsight 数栈DTinsight     2022-12-03     716

关键词:

课件获取:关注公众号 “数栈研习社”,后台私信 “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图。周期实例实际上指的是离线任务,因为实时任务并无上游依赖关系。

开源交流丨任务or实例

上图就是配置任务之间依赖的地方,任务和任务之间会形成一个完整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任务不运行。

开源交流丨任务or实例

● 临时运行实例

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

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

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

Taier周期实例生成

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

开源交流丨任务or实例

上图为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节点下。

开源交流丨任务or实例

● 主节点选举

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

开源交流丨任务or实例

Taier实例调度

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

开源交流丨任务or实例

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

● 调度器

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

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

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

开源交流丨任务or实例

● 拦截器

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

默认提供的拦截器:

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

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

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

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

开源交流丨任务or实例

Taier实例提交

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

开源交流丨任务or实例

开源交流丨任务or实例

袋鼠云开源框架钉钉技术交流群(30537511),欢迎对大数据开源项目有兴趣的同学加入交流最新技术信息,开源项目库地址:​​https://github.com/DTStack​

贝壳大数据任务调度dag体系设计实践(代码片段)

...模的公司都会组建自己的数据团队来专门的为数据服务。任务调度系统解决的就是数据的连接管理问题!(以下简称:调度。)它就像是一条高速公路与加油站、而数据则是路上的车辆,时不时的需要加油才能驶离这条公路。这套... 查看详情

大数据调度平台airflow:airflow使用(代码片段)

...发时间三、DAGcatchup参数设置四、DAG调度周期设置五、DAG任务依赖设置1、​​​​​​​DAG任务依赖设置一2、​​ 查看详情

大数据开发:azkaban和oozie调度系统对比

参考技术A大数据处理的各个环节当中,涉及到诸多的任务执行,为了保证系统的性能和运行效率,就需要对这些任务进行合理的安排,这就需要到调度系统。在调度系统当中,DAG工作流类调度系统以Azkaban和Oozie为代表。今天的... 查看详情

开源交流丨批流一体数据集成工具chunjun同步hive事务表原理详解及实战分享

...信“ChengYing”__获得直播课件视频回放:点击这里ChengYing开源项目地址:github丨gitee喜欢我们的项目给我们点个__STAR! 查看详情

开源项目丨一文详解一站式大数据平台运维管家chengying如何部署hadoop集群

...ngYing”获得直播课件视频回放:​​点击这里​​ChengYing开源项目地址:​​github​​ 丨 ​​gitee​​ 喜欢我们的项目给我们点个__STAR!STAR!!STAR!!!(重要的事情说三遍)__技术交流钉钉qun:30537511本期我们带... 查看详情

一文读懂:开源大数据调度系统taier1.2版本新增的「工作流」到底是什么?

一、什么是工作流?在阐述什么是工作流之前,先说一下工作流和普通任务的区别,在于依赖视图。普通任务本身他只会有自己的dag图,依赖视图是无边界的,不可控的,而工作流则是把整个工作流都展示出来,是有边界的,可... 查看详情

easyscheduler调度系统的架构原理及实现思路(代码片段)

...词解释DAG:全称DirectedAcyclicGraph,简称DAG。工作流中的Task任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图:流程定义:通过拖拽任务节点并建立任务节点的关联所形成的可... 查看详情

深入大数据平台心脏:饿了么调度系统全解

...现状:每天完成大数据任务计算54000+;节点集群85台。  开源解决方案  Ooize  Ooize基于工作流调度引擎,是雅虎的开源项目,属于JavaWeb应用程序。由OozieClient和OozieServer两个组件构成。  &nbs 查看详情

大数据任务调度工具apachedolphinscheduler

...eduler简介ApacheDolphinScheduler于17年在易观数科立项,19年3月开源,8月进入Apache孵化器DolphinScheduler支持K8S调度系统选型竞争产品AirflowOozieKettlexxl-jobAzkabanSpringBatc 查看详情

一天一门编程语言用go语言实现一个dag任务调度系统的api接口代码(代码片段)

文章目录用Go语言实现一个DAG任务调度系统的API接口代码什么是DAG任务调度系统Go语言实现DAG任务调度系统API接口使用Gin框架编写API接口API功能设计实现API功能API设计2.1API方法2.2参数定义2.3返回值定义DAG任务调度系统实现3.1添加... 查看详情

详解bi系统中的任务调度

任务调度是一个通用的计算机概念,可以简单地理解为计算机基于一定时间频率,自动执行一项进程任务。任务调度是操作系统的重要组成部分,Windows系统中的定时任务和Linux的Crontab都是常用的系统级调度器,被... 查看详情

分布式工作流任务调度系统easyscheduler正式开源(代码片段)

分布式工作流任务调度系统EasyScheduler正式开源1、背景在多位技术小伙伴的努力下,经过近2年的研发迭代、内部业务剥离及重构,也经历一批种子用户试用一段时间后,EasyScheduler终于迎来了第一个正式开源发布版本--1.0.0。相信... 查看详情

开源交流丨一站式大数据平台运维管家chengying安装原理剖析

本期我们带大家回顾一下漫路同学的直播分享《ChengYing安装原理剖析》。本期内容多为实战演示,欢迎有兴趣的同学去B站配合视频观看,便于理解。一、ChengYing安装原理ChengYing安装主要分为下面八个模块的内容,下面为大家介... 查看详情

大数据工作流任务调度--有向无环图(dag)之拓扑排序(代码片段)

拓扑排序(TopologicalSorting)回顾基础知识:1、图的遍历:图的遍历是指从图中的某一个顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问一次。注意树是一种特殊的图,所以树的遍历实... 查看详情

(2021-03-26)大数据学习之flink安装部署以及任务提交/调度详解(代码片段)

...安装部署以及API方法1.Flink快速安装2.Flink运行时组件3.Flink任务提交流程以及任务调度3.1任务提交流程(YARN)3.2任务调度原理3.3TaskManager与Slots3.3.1作用与关系3.3.2任务执行资源合理占用4.程序与数据流4.1数据传输形式4.2任务... 查看详情

大数据hadoop之——任务调度器oozie(oozie环境部署)(代码片段)

@[TOC]一、概述Oozie的特点:Oozie是管理hadoop作业的调度系统;Oozie的工作流作业是一系列动作的有向无环图(DAG);Oozie协调作业是通过时间(频率)和有效数据触发当前的Oozie工作流程;工作流通过hPDL定义(一种XML流程定义语言)... 查看详情

从0到1搭建大数据平台之调度系统(代码片段)

...台核心之一在于数据计算,分为离线计算和实时计算任务。然而任务是离不开调度的。比如:我们要进行定时抽取业务数据库的数据,定时跑hive/spark任务,定时推送日报、月报指标数据等。因而调度系统是大数据... 查看详情

开源分布式任务调度系统就选:dolphinscheduler

...都会接触的话题。因为应用场景的广泛,所以有很多开源项目专注于解决这类问题,比如我们熟知的xxl-job。那么今天要给大家推荐的则是另一个更为强大的开源项目:DolphinScheduler介绍DolphinScheduler是一款开源的分布式... 查看详情