分布式可视化 DAG 任务调度系统 Taier 的整体流程分析
Taier 作为袋鼠云的开源项目之一,是一个分布式可视化的 DAG 任务调度系统。旨在降低 ETL 开发成本,提高大数据平台稳定性,让大数据开发人员可以在 Taier 直接进行业务逻辑的开发,而不用关心任务错综复杂的依赖关系与底层的大数据平台的架构实现,将工作的重心更多地聚焦在业务之中。
本文将从 Taier 的流程简述、结构分析以及可扩展点三个方面对 Taier 的整体流程进行分析探讨。
Taier 流程简述
Taier 主从划分
Taier 是一个单独的应用,进程无主从划分,多实例运行时通过 ZK 实现主从划分。基于 LeaderLatch 进行实现,启动时抢到锁的节点即为主(Master),没有抢到锁的即为从( Worker),会出现一主多从的情况。
如果其他的 Worker 在 ZK 中监听到 Master 已经挂掉,那么 Worker 会再次进行锁的争夺,抢到锁的成为主。
在 Taier 中,作为主的主要职责包括周期实例生成、实例预分发、Worker 节点任务容灾、实例提交等,作为从则主要负责实例提交即可。
Taier 周期实例(T+1)
周期实例是 Taier 的专属名词,指的是任务按照配置的调度时间运行一次即为一个实例,现在周期实例的机制为 T+1 的方式。
今日会预生成明天所有任务对应的周期实例,即今日的周期实例由昨天生成。Taier 默认22:00生成第二天周期实例,如果在22:00之后再将任务提交到调度系统,这个任务则不会进行周期实例生成的动作。
配置项为 job.graph.build.cron=22:00:00,时间可以自己调整。
Taier 任务提交
Taier 任务提交的具体流程图如下:
任务流程提交前置判断主要分为两个部分,一为任务上下游的依赖校验,会判断周期实例的上游是否已经运行完成,如果上游运行失败,那么这个任务就是不准备提交的;二为资源校验,因为任务都是运行在集群上,非常占资源,所以会进行提交前的校验,判断当前集群的资源是否充足,如果资源不足,会进行延迟提交的动作。
Taier 任务提交的具体代码如下:
Taier 结构分析
Taier 的结构主要分为 UI、应用层和插件三个部分,在插件中,Taier worker-plugin 和 Taier datasource-plugin 又是其中最为重要的两个插件。
Taier worker-plugin
Taier worker-plugin 的主要用途包括:
· 任务资源判断
· 任务提交
· 任务状态获取
· 任务日志获取
· Kill 任务
具体代码如下:
相关的类包括:
· com.dtstack.taier.common.client.ClientFactory
· com.dtstack.taier.common.client.ClientProxy
· com.dtstack.taier.common.client.ClientCache
Taier datasource-plugin
Taier datasource-plugin 的主要用途包括:
· 连通性检查
· 执行 SQL
· 获取 Schema 信息
· 获取 Table 列表
· 获取表元数据
· 下载数据
· 下载日志
具体代码如下:
Taier 任务提交插件
参考代码:
com.dtstack.taier.scheduler.jobdealer.JobSubmitDealer#submitJob
Taier 可扩展点
Taier 目前就核心功能进行了开源,其他功能开发者可以自行进行扩展,包括:
· 任务立即生成实例
· ChunJun 向导模式扩展
· DataX 支持向导模式配置
· 数据源插件版本扩展
· 计算引擎新增
· Hadoop 多集群版本支持
· 实例分发策略增加
视频课程&PPT获取
视频课程:
https://www.bilibili.com/video/BV1wP411z7rf/?spm_id_from=333.999.0.0
课件获取:
https://www.dtstack.com/resources/1047
《数栈产品白皮书》:https://www.dtstack.com/resources/1004?src=szsm
《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001?src=szsm 想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szkyzg
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
数仓备份经验分享丨详解roach备份原理及问题处理套路
本文分享自华为云社区《GaussDB(DWS) 备份问题定位思路》,作者: yd_216390446。 前言 在数据库系统中,故障分为事务内部故障、系统故障、介质(磁盘)故障。对于事务内部故障和系统故障,使用日志自动恢复,不需要人工参与。但对于介质故障,需事先备份数据。 那么对于DWS来说是如何进行备份的呢?以及备份的过程中容易出现哪些问题,又怎样去排查、解决呢? 本文主要讲述了DWS备份工具roach的备份的原理,以及常见的问题处理套路和相关案例。 一、备份原理 全量备份 本文主要说的备份均为物理备份,即通过物理文件拷贝的方式对数据库进行备份,通过备份的数据文件和日志等文件,数据库可以进行完全恢复。 全量备份大致分几个阶段:备份行存、创建barrier点、备份xlog、备份列存。 备份行存:每个节点的主DN的数据,压缩存到rch文件中 创建barrier点:保证CNDN上的所有的事务处于一致的状态,恢复到这个点比较可靠,创建时会在XLog中写入一条记录。 备份xlog:备份startLSN和stopLSN之间的xlog 备份列存:由于列存不写xlog,因此放在最后,其中列存的cude...
- 下一篇
Java应用堆外内存泄露问题排查 | 京东云技术团队
问题是怎么发现的 最近有个java应用在做压力测试 压测环境配置: CentOS系统 4核CPU 8g内存 jdk1.6.0_25,jvm配置-server -Xms2048m -Xmx2048m 出现问题如下 执行300并发,压测持续1个小时后内存使用率从20%上升到100%,tps从1100多降低到600多。 排查问题的详细过程 首先使用top命令查看内存占用如下 然后查看java堆内存分布情况,查看堆内存占用正常,jvm垃圾回收也没有异常。 然后想到了是堆外内存泄漏,由于系统中用的jsf接口比较多,底层都是依赖的netty。 首先考虑的是java中nio包下的DirectByteBuffer,可以直接分配堆外内存,不过该类分配的内存也有大小限制的,可以直接通过-XX:MaxDirectMemorySize=1g 进行指定,并且内存不够用的时候代码中会显式的调用System.gc()方法来触发FullGC,如果内存还是不够用就会抛出内存溢出的异常。 为了验证这一想法,于是在启动参数中通过-XX:MaxDirectMemorySize=1g指定了堆外内存大小为1g,然后再次进行压测,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果