深入浅出聊 Taier—大数据分布式可视化 DAG 任务调度系统
导读:
上周,袋鼠云数栈全新技术开源规划——DTMO(DTstack Meetup Online)的第一场直播圆满完成。袋鼠云数栈大数据开发专家、Taier 项目主导人偷天为大家带来了《Taier 入门介绍》的分享,我们将直播精华部分做了整理,带大家再次回顾内容,加深技术细节的了解。
你能看到👇👇👇
▫ Taier 发展历程
▫ Taier 架构设计和功能详解
▫ Taier 具体应用和未来规划
点击链接,查看直播视频回放
欢迎加入开源框架技术交流群
(钉钉群:30537511)
开源项目技术交流
ChunJun
https://github.com/DTStack/chunjun
https://gitee.com/dtstack_dev_0/chunjun
Taier
https://github.com/DTStack/Taier
https://gitee.com/dtstack_dev_0/taier
MoleCule
https://github.com/DTStack/molecule
https://gitee.com/dtstack_dev_0/molecule
演讲 / 偷天
整理 / 向山
Taier 发展历程
Taier 是袋鼠云数栈大数据家族的开源项目之一 ,于 2022 年 2 月 22 日正式在 github 上开源,它是一个分布式可视化的 DAG 任务调度系统,旨在降低 ETL 开发成本、提高大数据平台稳定性,让大数据开发人员可以在 Taier 直接进行业务逻辑的开发,而不用关心任务错综复杂的依赖关系与底层的大数据平台的架构实现,将工作的重心更多地聚焦在业务之中。
2021 年 4 月,数栈技术团队确定了以 DAGScheduleX 为主,复合多个项目工程的核心板块的开源计划;
2021 年 9 月,技术团队完成了项目雏形;
2021 年 11 月,我们重构了 DAGScheduleX 的工程代码,并将之正式命名为 Taier;
2022 年 2 月 22 日,经过不断的打磨和不懈的努力,Taier 终于正式开源 1.0 版本。
开源并不意味着项目的结束,恰恰是项目的开始,未来 Taier 将持续自我迭代,积极吸取社区力量,不断优化,推出更优越的版本。
Taier 的前世与雏形
Taier 最早之前在数栈内的雏形是当时负责数栈“承上启下”的基础组件 DAGScheduleX。
它承上对接各个上层应用(离线开发、实时开发、算法开发、标签引擎、数据服务、数据质量、数据资产),启下兼容多集群多版本(Hadoop、CDH、TDH、HDP、MRS),实现任务实例的分布式调度运行。在作为数栈的基础组件服务过程中,DAGScheduleX 累计为数百家企业提供了大数据任务调度能力,在前期为后续的更新整合积累了大量的实战经验。
DAGScheduleX 可以做到很多,但还远远不够。数栈边运用边迭代,渐渐地看见围绕着它开发更多功能,一体化解决问题的可能性。这时,Taier 雏形已经具备清晰的构想,作为一个任务调度系统,Taier 初步设计具备以下这些模块。
v1.0 的里程碑意义
回头看,Taier 的开发之路是由 4 组具有里程碑意义的数据铺成的:
Taier 开发团队累计解决了 70+个大大小小的 issue ;
总共 311 次代码 commit ;
90w+代码修改行数
初始的 9 位 Contributor。
道阻且长,我们却已经走了这么远。
架构设计和功能详解
在架构设计与功能特点上,Taier 整体架构是使用插件式的开发模式,在任务开发下面有调度模块和各项组件,也包括数栈开源家族的 Chunjun 等等。
Taier 功能特点
Taier 的功能特点有下面几个比较重要的方面:
1.任务类型:Spark SQL、数据同步(流计算任务);
2.控制台:包括队列管理、资源管理、多集群管理等;
3.运维中心:比如任务管理、周期调度、补数据等;
4.插件化开发:具体包括 taier-plugin、、DatasourceX、Chunjun 等几个插件。
Taier 功能特征
随着不断更新完善,现在的 Taier 已经具有以下的几种特性:
稳定性
单点故障:去中心化的分布式模式
高可用方式:Zookeeper
过载处理∶分布式节点+两级存储策略+队列机制。每个节点都可以处理任务调度与提交;任务多时会优先缓存在内存队列,超出可配置的队列最大数量值后会全部落数据库;任务处理以队列方式消费,队列异步从数据库获取可执行实例
实战检验:得到数百家企业客户生产环境实战检验
易用性
支持大数据作业 Spark、Flink 的调度;
支持众多的任务类型,目前支持 Spark SQL、Chunjun
可视化工作流配置︰支持封装工作流、支持单任务运行,不必封装工作流、支持拖拽模式绘制;
DAG 监控界面:运维中心、支持集群资源查看,了解当前集群资源的剩余情况、支持对调度队列中的任务批量停止、任务状态、任务类型、重试次数、任务运行机器、可视化变量等关键信息一目了然;
调度时间配置:可视化配置;
多集群连接:支持一套调度系统连接多套 Hadoop 集群。
多版本引擎
支持 Spark 、Flink 等引擎的多个版本共存,例如可同时支持 Flink1.10、Flink1.12(后续开源)
Kerberos 支持 Spark、Flink
丰富,支持 3 种时间基准,且可以灵活设置输出格式。
扩展性
设计之处就考虑分布式模式,目前支持整体 Taier 水平扩容方式;调度能力也随集群线性增长。
Taier 重要概念
下面从原理和操作层面给大家进一步介绍 Taier,还有一些具体概念的解释。
任务与实例
方便起见,数栈在 Taier 中提出“任务”和“实例”两个概念,例如数据开发的数据同步这项工作称之为“任务”,而已经提交并且配置了周期属性的任就称之为“实例”。
实例具体操作
在 Taier 中,实例有这几种构建的方式:
1.基于 Zookeeper 选举 Master 节点参与 Job 实例构建,T+1 构建 JobGraph
2. JobGraph 构建前 check &clean DirtyData
3.依据 Task、TaskTask 的数据(JobGraph)生成 Job .JobJob 实例数据
4.Master 节点控制实例数据的负载均衡持久化入数据库
构建完毕后,实例处理的几种方式如下图所示:
其中:
1.三种任务类型:周期任务、补数据任务、重跑任务,统一调度方式
2. Job 优先入队列(1),队列容量不足入 DB (2)
3.当队列容量空余时,异步线程从 DB 加载数据入队列(3)
4. Job 出队列后进行任务提交
处理完成后,实例提交我们也做了思考,具体设计:
1.内存优先级队列,控制 Job 有序执行
2.多线程并发提交(可配置)
3. Job 执行超时判断(可配置)
4. Job 资源不足/失败重试进入延迟队列(可配置)﹔避免长时间占用提交权
Taier 的实例状态大家主要应该关注标志停止的几个,具体有下面几种:
1. WaitEngine:内存队列中的 Job、内存容量不足存储在 DB 中的 Job(默认 500 )
2. Lacking:资源不足暂时等待的 Job(默认 2min)
3. Restarting:失败重试的 Job(默认 2min )
4. Finshed、Failed、Canceled、Killed:结束状态
Taier 的整个控制台设计分为公共组件、调度组件、存储组件和计划组件。通过一个租户 ID,拿到这个集群下 common, YARN-conf 等的四个配置信息,组成包含一个任务插件所有信息的 pluginlnfo。将它解析之后,一些资源初始化上传,以便我们缓存对应的客户端。
Taier Client Plugin 这里,要快速开发一个插件要注意以下几点:
一种任务类型对应一个插件,即一个 jar 包
自定义类加载器(Classloader) 破坏双亲委派优先加载( Child-First)插件
插件实现 IClient 接口方法
SPI: 在 classpath 下的 META-INF/services/目录下,创建以接口 IClient 全限定名命名的文件,内容是上一步中实现类的全限定名
具体应用
Taier 部署环境依赖
大数据组件:Flink、Spark (ThriftServer)、Hive
三方框架:Datasourcex (4.3.0)、Chunjun(1.10.5)
基础组件: JDK 版本:JDK 1.8 + 、MySQL 版本:MySQL 5.7.33+、Zookeeper 版本:Zookeeper 3.5.7
Hadoop 2.7.3 :HDFS、Yarn
环境依赖配置完毕之后,Taier 编译 &启动按下面流程操作:
后端: /build/mvn-build.sh,检查 lib、pluginLibs 目录
DB 初始化,sql/create.sql、sql/insert.sql、Datasourcex、Chunjun 插件、配置 conf/application.properties
前端:安装 Node、yarn、mini-cup 和 pm2、yarn build、检查 dist 目录、cup.config.js
编译启动之后,Taier 应用的具体操作的步骤如下:
登录、新建租户
依次配置集群组件、公共组件、调度组件,上传 hadoop zip 配置·存储组件,同上
计算组件:Spark 相关(Spark SQL)、Hive 相关(Hive sQL)、Flink 相关(数据同步)
租户绑定:资源使用情况
任务开发 &运行操作界面如下图:
未来规划
目前袋鼠云开源家族已经汇齐 Taier 与 Chunjun 双剑,未来我们计划集成 Chunjun,丰富数据同步支持的数据源、实时采集、FlinkSQL;同时加入 Docker 部署,使用 docker 使 Taier 能进一步简化,轻量化部署依赖;集成 OceanBase v1.2 版本中,预计对 OceanBase 插件高优集成;
未来,Taier 会持续在实战中自我迭代,也会积极汲取社区的力量,我们的开发计划已经在路上,每月也会有固定一到两场的线上直播分享,线下 meetup 也在积极计划中。大家保持关注,数栈希望与大家一起进步。
版权声明: 本文为 InfoQ 作者【数栈DTinsight】的原创文章。
原文链接:【http://xie.infoq.cn/article/42ff1a41b78a44310e3118d40】。文章转载请联系作者。
评论