背景介绍
UniM-Data架构
开源Apache DolphinScheduler的实践与改造
成果与总结
下一步计划
在医疗研发团队大数据中台的建设中,数据仓库、数据开发和业务应用等快速开发和迭代,大数据中台需要面向数据量大、并发高和任务复杂等挑战,任务编排和调度更是大数据中台的一大难关,调度系统在数据中台向上需要支撑应用侧的任务下发和管理,向下需要承接大数据底座的任务编排和调度,重要程度可见一斑。
从2020年开始,基于DolphinScheduler(版本1.3.2)构建了涵盖数据采集、同步、处理和治理为一体的大数据平台(UniM-Data)。在调度系统选型初期,团队技术栈以JVM语言为主,Airflow的结构体系无法进行充分的改造和融合,因此在开源调度系统上,我们主要对Azkaban和DolphinScheduler进行了充分的调研和预演。相同的环境压测下,Azkaban在稳定性上存在不足,会有任务积压和excutor负载过高等影响,功能性上也存在一定的缺陷。我们选择DolphinScheduler主要原因有以下几点:
分布式去中心化结构,系统的稳定性有足够的保障
可视化的DAG编辑模式,使用成本低
多项目实施、资源隔离和动态扩缩容有完整的解决方案,可快速落地
JVM体系,快速开发改造和适配
在社区的蓬勃发展下,社区DolphinScheduler已经演进到3.0版本,带来了很多优秀的特性和启发。UniM-Data当前在线运行的DolphinScheduler原生版本为1.3.2,产品迭代升级中吸收和融合了DolphinScheduler的优秀架构和特性。基于系统设计和业务需求,我们团队对DolphinScheduler做了一定的开发改造、适配和代码合并,让DolphinScheduler在UniM-Data上仍能稳定支撑线上生产系统的运行。接下来的工作,我们也准备致力于DolphinScheduler的版本升级,引入更多社区的优秀能力。在此也感谢社区的贡献,为我们带来如此优秀的项目,希望后续也能贡献我们的力量,为DolphinScheduler的壮大添砖加瓦。
在UniM-Data的构建实践中,产品设计与DolphinScheduler的风格存在一定的冲突,因此我们放弃了原有的DolphinScheduler的UI前端,重新构建基于产品风格的前端页面。在DolphinScheduler的底层实现中,为了满足平台团队、数仓团队、算法团队和医疗业务团队的实际需求,我们不仅借助DolphinScheduler的优秀架构提供的任务调度和失败策略等能力,也在DolphinScheduler上进行了接口拓展、新增任务类型、血缘埋点、数据治理工具开发等工作,进行整体架构设计和构建。UniM-Data的整体的架构视图如下所示:
技术架构视图
UniM-Data从横向上看,元数据和数据安全两个模块贯穿数据的全生命周期,DolphinScheduler在其中扮演了关键角色,主要从任务执行器嵌入血缘采集、权限校验和数据探查等功能上,加以支撑。
元数据模块在UniM-Data的设计上属于关键模块,实现数据溯源、元数据采集、信息探查等功能(如下所示)。在全链路数据的变更上,都需要向元数据模块暴露血缘关系,我们的解决方案是在DolphinScheduler上进行了各类任务的血缘埋点和采集器嵌入,如Spark SQL、Spark Shell、数据同步等,实现了表级血缘的全链路采集。
元数据管理
各类任务的血缘关系解析方式大致如下:
SQL类型:采用Druid SQL解析,解析源表和目标表信息。HiveSQL使用org.apache.hadoop.hive.ql.parse工具类解析。
数据安全模块,首先平台侧沿用DolphinScheduler的项目管理模式,嵌入数据源隔离、用户权限、文件权限等功能,建设项目间资源隔离环境。在DolphinScheduler上,我们在各类任务的生成上进行权限校验,统一访问平台权限中心,控制数据访问安全。
UniM-Data从纵向上看,我们主要借助DolphinScheduler的任务调度、失败策略和补数等功能,支撑所有任务的既定计划的执行。主要从以下几方面进行了开发和适配:
在进行UniM-Data的离线开发功能适配中,基于DolphinScheduler(1.3.2)的原生版本上,存在着SQL任务类型通过jdbc连接,对Spark SQL,Hive SQL的支持存在性能、稳定、安全认证等问题,交互上无法获取任务执行日志的痛点,加之使用团队的复杂需求,从而对于离线开发任务,做了统一的改造:
1)UniM-Data的离线任务开发,提供了在线开发和调试功能。在DolphinScheduler上,我们进行了任务编排逻辑的改造,支持任务开发调试确认后形成作业。任务在调试模式运行时,处理结果会缓存起来,支撑在线调试结果预览功能。
在线开发与调试
2)在原生的SQL任务的基础上,添加备注支持、优化SQL语句切割逻辑等功能,贴近用户编辑SQL的使用习惯。
3)优化Spark SQL任务,放弃DolphinScheduler原生使用Spark Thrift Server的方案,采用Spark API进行封装,并使用Spark Submit的方式执行,可以灵活配置资源,解决任务的性能和日志输出问题。
4) 优化Hive SQL任务,融合HiveServer2的HA功能,使用namespace进行连接,解决应用端的并发和负载问题。
5)新增Spark Shell任务,支撑在线编辑Spark代码,在SparkShell的执行引擎内部,我们封装了ApiProxy的API,方便用户快速读写各数据源。
6)新增Kerberos安全认证,在各任务生成阶段,根据成员的Kerberos绑定信息,完成票据认证。
7)新增图形化开发任务(内部代号EasyFlow),搭载DolphinScheduler的调度能力,提供低代码能力。现阶段已实现数据处理基本算子的集成,后续计划完成业务类算子的集成,支撑复杂业务逻辑形成算子能力。
UniM-Data的调度中心主要借助DolphinScheduler的任务调度能力,基本沿用其任务上下线、重跑、定时执行等能力,提供用户进行任务的监控和管理。为了使平台与DolphinScheduler能够解耦,我们进行了DolphinScheduler的接口拓展,新增和改造了任务添加、任务信息订阅等接口,暴露给平台进行通信。
在2020年进行数据同步技术选型时,基于医疗信息多源异构的特点,经过考察分析,Sqoop虽然在分布式上具备一定的优势,但是需要使用MR的计算框架,成本较高。而DataX虽然是单进程模式,可以通过DolphinScheduler的调度系统进行性能规避,单进程模式更容易进行控制和排错,并且DataX具有开放式的框架,可以在极短的时间开发一个新插件,快速支持新的数据库/文件系统,实现架构如下:
在项目落地过程中,我们在开源版本DataX上拓展了诸如百度Doris、人大金仓kingbase、华为openGauss等国产数据库的适配。
UniM-Data上,提供了数据质控、数据探查、数据识别等自研治理工具,在DolphinScheduler上进行较为综合性的拓展和应用。我们的设计思路是,实现独立的计算引擎,使用DolphinScheduler的调度系统,进行数据治理能力的提供。实现方式主要是在org.apache.dolphinscheduler.server.worker.task的package上增加对应的任务生成逻辑,通过DolphinScheduler的调度能力执行计算引擎。下面以数据质控为例进行说明。
整体的运行流程
1)应用侧:
模型中心创建质控任务(UniM-Data的数据表实体统一由模型中心标注和创建)
质控引擎提供表级和字段级质控类型,如记录数、及时性、范围、规则等质控算子
设置评分规则,根据质控结果形成等级划分
提交任务Json至DolphinScheduler的API Server,并将任务控制权托管至调度中心
2) DolphinScheduler侧:
API Server接收和保存质控任务
Master进行任务调度,向调度中心暴露控制接口
Worker完成对参数的解析和构造,通过权限控制后,生成质控引擎的执行命令,执行计算引擎
3) 输出侧:
报告中心承接质控结果的展示和报告输出
质检异常的抽样数据存放至MinIO,以文件形式提供异常数据
引擎实现
按照整体的系统设计思想,引擎与DolphinScheduler分别解耦,各司其职,可单独执行也可以与DolphinScheduler配合使用。引擎抽象层设计有source、measure、sink、sample和score(记分规则):
source:现支持hive、oracle、mysql、doris、kingbase、openguase、cache、sqlserver等数据源
measure:现建设有记录值、及时性、值域、极值、非空等10+种算子
sink:支持API、CSV
sample:支持MinIO、mysql的数据样本下发
应用实现
数据质控在应用端采用配置化方式,降低使用成本,提供了可选表级与字段级质控范围,进行不同数据的定制化任务设定。
从2020年至今,UniM-Data经过持续的运营与建设,在医疗、运营、科研、应急等业务线条上有多个项目落地。在项目实施落地阶段,UniM-Data主要承接着日均超6000+任务实例、数据流量达TB级别、系统7*24小时、准确率达99.9999%等挑战,DolphinScheduler作为UniM-Data的任务调度中心,基于其优秀的架构和丰富的功能,DolphinScheduler在实际生产中交出了令人欣喜的答卷,主要体现在:
基于DolphinScheduler的调度能力,开发并提供数据采集、血缘、治理等多类执行器,支撑业务的快速演进
新增功能和业务性接口,在DolphinScheduler的调度能力基础上,提供功能更加丰富的调度中心
基于DolphinScheduler的补数和重跑机制,有效降低数仓团队的运维成本,提高数据准确率
去中心化结构,保证整体系统7*24小时稳定运行
UniM-Data在线支撑的DolphinScheduler为1.3.2版本,在社区快速发展下,为了进一步强化调度系统和融合优秀能力,我们计划将基线版本升级至社区3.0版本。
分享人 ▏胡泽康 鄞乐炜
产互FM整理出品
编辑 ▏软件研发部
校审 ▏童荪