视频回放:点击这里
ChunJun 开源项目地址:github 丨 gitee 喜欢我们的项目给我们点个__ STAR!STAR!!STAR!!!(重要的事情说三遍)
在分享之前,先为大家介绍一下任务和实例的关系。任务指的是我们在任务开发界面上去创建的任务,比如 Spark 任务、SparkSQL 任务、数据同步任务等,这些任务在开发过程中是静态的脚本,当被提交到计算节点去执行时,被执行的过程我们把它抽象成实例。举一个简单的例子来说明:比如我们写完一个 Java 的类然后把它打包成 Jar 包,其实这个 Jar 包就是一个静态类,当我们执行 Jar 包时,这个过程我们会把它抽象成一个实例,这就是任务与实例的关系。
首先我们来看一下 Taier 实例的类型,在 Taier 中实例主要有 3 种类型:
周期实例是指在前一天生成的当天实例(T+1),拥有一个完整独立的实例依赖体系,也就是任务和任务之间形成的完整的 DAG 图。周期实例实际上指的是离线任务,因为实时任务并无上游依赖关系。
上图就是配置任务之间依赖的地方,任务和任务之间会形成一个完整 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 任务不运行。
临时运行实例可以分成两种离线和实时。
离线任务:用户可以直接运行任务生成实例,实例没有依赖关系。
实时任务:实时任务没有周期,上下游依赖这一概念,所以所以的实时实例都是临时运行的。
接下来我们来看一下 Taier 周期实例的生成。
上图为 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 节点下。
● 主节点选举
Taier 的主从选举是基于 LeaderLatch 来实现的,在启动 Taier 后,Taier 会尝试去抢占 /taier/masterLatchLock 这边锁,抢到锁的节点就是主节点,没有抢到锁的节点就是从节点。
接下来为大家介绍下 Taier 实例调度,首先为大家介绍下调度流程。
上图就是 Taier 实例调度的整体流程,在启动 Taier 服务时,会启动配置的所有调度器,并且开始扫描实例,并提交。
● 调度器
由于实例类型的不同,我们需要的调度器也会不同,但是他们都有一个父类(Scheduler)。
例如 CycleJobScheduler 专门负责周期实例的调度,而 FillDataJobScheduler 是负责补数据实例的调度。
不同的调度器,提交的条件也不一定,例如 CycleJobScheduler 只会扫描 2 天内的周期实例,而 RestartJobScheduler 是没有时间限制的,而且每一个调度器的拦截器链也会不一样。
● 拦截器
拦截器是用于负责检查实例是否到达提交条件,多个拦截器会形成拦截器链。当实例通过拦截器链时,说明实例到达提交状态,所以实例会被放入到提交队列中,等待提交。
默认提供的拦截器:
1.JobStatusSubmitInterceptor:用于判断实例状态。
2.JobUpStreamSubmitInterceptor:用于判断实例上游是否运行完成。注意,该上游实例不仅仅是上游任务实例,还有可能是自依赖实例。
3.TaskStatusSubmitInterceptor:用于判断任务状态是否正常。
每个调度器内装载的拦截器可以不同。
最后为大家介绍下 Taier 实例的提交,因为任务类型的不同,所以实例提交置计算节点的逻辑也不同,为了能有更好的扩展性,Taier 实现类插件化的处理。
袋鼠云开源框架钉钉技术交流群(30537511),欢迎对大数据开源项目有兴趣的同学加入交流最新技术信息,开源项目库地址:课件获取:关注公众号 “数栈研习社”,后台私信 “Taier” 获得直播课件
视频回放:点击这里
ChunJun 开源项目地址:github 丨 gitee 喜欢我们的项目给我们点个__ STAR!STAR!!STAR!!!(重要的事情说三遍)__
技术交流钉钉 qun:30537511
在分享之前,先为大家介绍一下任务和实例的关系。任务指的是我们在任务开发界面上去创建的任务,比如 Spark 任务、SparkSQL 任务、数据同步任务等,这些任务在开发过程中是静态的脚本,当被提交到计算节点去执行时,被执行的过程我们把它抽象成实例。举一个简单的例子来说明:比如我们写完一个 Java 的类然后把它打包成 Jar 包,其实这个 Jar 包就是一个静态类,当我们执行 Jar 包时,这个过程我们会把它抽象成一个实例,这就是任务与实例的关系。
首先我们来看一下 Taier 实例的类型,在 Taier 中实例主要有 3 种类型:
周期实例是指在前一天生成的当天实例(T+1),拥有一个完整独立的实例依赖体系,也就是任务和任务之间形成的完整的 DAG 图。周期实例实际上指的是离线任务,因为实时任务并无上游依赖关系。
上图就是配置任务之间依赖的地方,任务和任务之间会形成一个完整 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 任务不运行。
临时运行实例可以分成两种离线和实时。
离线任务:用户可以直接运行任务生成实例,实例没有依赖关系。
实时任务:实时任务没有周期,上下游依赖这一概念,所以所以的实时实例都是临时运行的。
接下来我们来看一下 Taier 周期实例的生成。
上图为 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 节点下。
● 主节点选举
Taier 的主从选举是基于 LeaderLatch 来实现的,在启动 Taier 后,Taier 会尝试去抢占 /taier/masterLatchLock 这边锁,抢到锁的节点就是主节点,没有抢到锁的节点就是从节点。
接下来为大家介绍下 Taier 实例调度,首先为大家介绍下调度流程。
上图就是 Taier 实例调度的整体流程,在启动 Taier 服务时,会启动配置的所有调度器,并且开始扫描实例,并提交。
● 调度器
由于实例类型的不同,我们需要的调度器也会不同,但是他们都有一个父类(Scheduler)。
例如 CycleJobScheduler 专门负责周期实例的调度,而 FillDataJobScheduler 是负责补数据实例的调度。
不同的调度器,提交的条件也不一定,例如 CycleJobScheduler 只会扫描 2 天内的周期实例,而 RestartJobScheduler 是没有时间限制的,而且每一个调度器的拦截器链也会不一样。
● 拦截器
拦截器是用于负责检查实例是否到达提交条件,多个拦截器会形成拦截器链。当实例通过拦截器链时,说明实例到达提交状态,所以实例会被放入到提交队列中,等待提交。
默认提供的拦截器:
1.JobStatusSubmitInterceptor:用于判断实例状态。
2.JobUpStreamSubmitInterceptor:用于判断实例上游是否运行完成。注意,该上游实例不仅仅是上游任务实例,还有可能是自依赖实例。
3.TaskStatusSubmitInterceptor:用于判断任务状态是否正常。
每个调度器内装载的拦截器可以不同。
最后为大家介绍下 Taier 实例的提交,因为任务类型的不同,所以实例提交置计算节点的逻辑也不同,为了能有更好的扩展性,Taier 实现类插件化的处理。
袋鼠云开源框架钉钉技术交流群(30537511),欢迎对大数据开源项目有兴趣的同学加入交流最新技术信息,开源项目库地址:课件获取:关注公众号 “数栈研习社”,后台私信 “Taier” 获得直播课件
视频回放:点击这里
ChunJun 开源项目地址:github 丨 gitee 喜欢我们的项目给我们点个__ STAR!STAR!!STAR!!!(重要的事情说三遍)__
技术交流钉钉 qun:30537511
在分享之前,先为大家介绍一下任务和实例的关系。任务指的是我们在任务开发界面上去创建的任务,比如 Spark 任务、SparkSQL 任务、数据同步任务等,这些任务在开发过程中是静态的脚本,当被提交到计算节点去执行时,被执行的过程我们把它抽象成实例。举一个简单的例子来说明:比如我们写完一个 Java 的类然后把它打包成 Jar 包,其实这个 Jar 包就是一个静态类,当我们执行 Jar 包时,这个过程我们会把它抽象成一个实例,这就是任务与实例的关系。
首先我们来看一下 Taier 实例的类型,在 Taier 中实例主要有 3 种类型:
周期实例是指在前一天生成的当天实例(T+1),拥有一个完整独立的实例依赖体系,也就是任务和任务之间形成的完整的 DAG 图。周期实例实际上指的是离线任务,因为实时任务并无上游依赖关系。
上图就是配置任务之间依赖的地方,任务和任务之间会形成一个完整 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 任务不运行。
临时运行实例可以分成两种离线和实时。
离线任务:用户可以直接运行任务生成实例,实例没有依赖关系。
实时任务:实时任务没有周期,上下游依赖这一概念,所以所以的实时实例都是临时运行的。
接下来我们来看一下 Taier 周期实例的生成。
上图为 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 节点下。
● 主节点选举
Taier 的主从选举是基于 LeaderLatch 来实现的,在启动 Taier 后,Taier 会尝试去抢占 /taier/masterLatchLock 这边锁,抢到锁的节点就是主节点,没有抢到锁的节点就是从节点。
接下来为大家介绍下 Taier 实例调度,首先为大家介绍下调度流程。
上图就是 Taier 实例调度的整体流程,在启动 Taier 服务时,会启动配置的所有调度器,并且开始扫描实例,并提交。
● 调度器
由于实例类型的不同,我们需要的调度器也会不同,但是他们都有一个父类(Scheduler)。
例如 CycleJobScheduler 专门负责周期实例的调度,而 FillDataJobScheduler 是负责补数据实例的调度。
不同的调度器,提交的条件也不一定,例如 CycleJobScheduler 只会扫描 2 天内的周期实例,而 RestartJobScheduler 是没有时间限制的,而且每一个调度器的拦截器链也会不一样。
● 拦截器
拦截器是用于负责检查实例是否到达提交条件,多个拦截器会形成拦截器链。当实例通过拦截器链时,说明实例到达提交状态,所以实例会被放入到提交队列中,等待提交。
默认提供的拦截器:
1.JobStatusSubmitInterceptor:用于判断实例状态。
2.JobUpStreamSubmitInterceptor:用于判断实例上游是否运行完成。注意,该上游实例不仅仅是上游任务实例,还有可能是自依赖实例。
3.TaskStatusSubmitInterceptor:用于判断任务状态是否正常。
每个调度器内装载的拦截器可以不同。
最后为大家介绍下 Taier 实例的提交,因为任务类型的不同,所以实例提交置计算节点的逻辑也不同,为了能有更好的扩展性,Taier 实现类插件化的处理。
开源项目库地址:https://github.com/DTStack/Taier
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。