作者 | 胡泽康 鄞乐炜

Profile

作者简介

胡泽康

联通(广东)产业互联网公司  大数据工程师,专注于开源大数据领域,从事大数据平台研发工作

鄞乐炜

联通(广东)产业互联网公司 大数据工程师,主要从事大数据平台的应用与引擎端开发

01

背景介绍

我们是联通医疗团队,一直践行“服务医改,惠及民生”的使命,全面驱动医疗健康产业数字化、智能化转型。

在调度系统选型初期,我们团队技术栈以 JVM 语言为主,由于 Airflow 的结构体系无法进行充分的改造和融合,因此在开源调度系统的选择上,我们主要对 Azkaban 和 Apache Dolphin Scheduler 进行了充分的调研和预演。结果显示,在相同的环境压测下,Azkaban 在稳定性上存在不足,会有任务积压和 executor 负载过高等影响,功能性上也存在一定的缺陷。

我们选择 Apache DolphinScheduler 主要原因有以下几点:

  • 分布式去中心化结构,系统的稳定性有足够的保障;

  • 可视化的DAG编辑模式,使用成本低;

  • 多项目实施、资源隔离和动态扩缩容有完整的解决方案,可快速落地;

  • JVM体系,快速开发改造和适配。

从2020年开始,我们团队基于 Apache DolphinScheduler(版本1.3.2)构建了涵盖数据采集、同步、处理和治理为一体的大数据平台(UniM-Data)。在实际生产中,当前该平台每天处理超过6000+任务实例,调度系统承载业务量大,作业定义与调度策略复杂度高。在如此庞杂的任务调度中,Apache DolphinScheduler 发挥了重要的作用,向上支撑应用侧的任务下发和管理,向下承接大数据底座的任务编排和调度。

02

UniM-Data架构

在社区的蓬勃发展下,Apache DolphinScheduler 已经演进到3.0版本,带来了很多优秀的特性和启发。UniM-Data当前在线运行的 Apache DolphinScheduler 原生版本为1.3.2,产品迭代升级中吸收和融合了 Apache DolphinScheduler 的优秀架构和特性。基于系统设计和业务需求,我们团队对 Apache DolphinScheduler 做了一定的开发改造、适配和代码合并,让其在 UniM-Data 上仍能稳定支撑线上生产系统的运行。

接下来,我们也准备致力于 Apache DolphinScheduler 的版本升级,引入更多社区的优秀能力。在此也感谢社区的贡献,为我们带来如此优秀的项目,希望后续也能贡献我们的力量,为 Apache DolphinScheduler 的壮大添砖加瓦。

在 UniM-Data 的构建实践中,产品设计与 Apache DolphinScheduler 的风格存在一定的冲突,因此我们放弃了原有的 Apache DolphinScheduler 的 UI 前端,重新构建基于产品风格的前端页面。在 Apache DolphinScheduler 的底层实现中。为了满足平台团队、数仓团队、算法团队和医疗业务团队的实际需求,我们不仅借助 Apache DolphinScheduler 的优秀架构提供的任务调度和失败策略等能力,也在其之上展开了接口拓展、新增任务类型、血缘埋点、数据治理工具开发等工作,进行整体架构设计和构建。

UniM-Data 的整体的架构视图如下所示:

技术架构视图

03

Apache DolphinScheduler的实践与改造

从横向上看,UniM-Data 上元数据和数据安全两个模块贯穿数据的全生命周期,Apache DolphinScheduler 在其中扮演了关键角色,主要从任务执行器嵌入血缘采集、权限校验和数据探查等功能上,对生产加以支撑。

元数据模块在 UniM-Data 的设计上属于关键模块,可实现数据溯源、元数据采集、信息探查等功能(如下所示)。在全链路数据的变更上,都需要向元数据模块暴露血缘关系,我们的解决方案是在 Apache DolphinScheduler 上进行了各类任务的血缘埋点和采集器嵌入,如 Spark SQL、Spark Shell、数据同步等,实现了表级血缘的全链路采集。

元数据管理

各类任务的血缘关系解析方式大致如下:

  • SQL类型:采用 Druid SQL 解析,解析源表和目标表信息。HiveSQL 使用org.apache.hadoop.hive.ql.parse 工具类解析

  • Spark shell:解析 Spark 的DAG信息,获取源表和目标表信息

  • 数据同步:采用 DataX 进行数据同步,利用 DataX 的 Json 信息,解析源表和目标表

  • 应用侧:建设模型设计模块,在数据变更时,同步进行血缘关系推送;应用侧,全部自研模块,可简单嵌入血缘采集器进行血缘信息推送

  • 任务间:利用 Apache DolphinScheduler 的任务关系,串联表级血缘信息

数据安全模块,首先平台侧沿用 Apache DolphinScheduler 的项目管理模式,嵌入数据源隔离、用户权限、文件权限等功能,建设项目间资源隔离环境。在 Apache DolphinScheduler 上,我们在各类任务的生成上进行权限校验,统一访问平台权限中心,控制数据访问安全。

从纵向上看,在 UniM-Data 上,我们主要借助 Apache Dolphin Scheduler 的任务调度、失败策略和补数等功能,支撑所有任务的既定计划的执行。主要从以下几方面进行了开发和适配:

离线开发

DS

在进行 UniM-Data 的离线开发功能适配中,Apache DolphinScheduler (1.3.2)的原生版本在SQL任务类型通过 jdbc 连接时,对 Spark SQL,Hive SQL的支持上存在性能、稳定、安全认证等问题,以及交互上无法获取任务执行日志的痛点,加之使用团队的复杂需求,所以我们对离线开发任务做了统一的改造:

1)UniM-Data 的离线任务开发,提供了在线开发和调试功能。在 Apache DolphinScheduler 上,我们进行了任务编排逻辑的改造,支持任务开发调试确认后形成作业。任务在调试模式运行时,处理结果会缓存起来,支撑在线调试结果预览功能。

在线开发与调试

2)在原生的 SQL 任务的基础上,添加备注支持、优化 SQL 语句切割逻辑等功能,贴近用户编辑 SQL 的使用习惯

3)优化 Spark SQL 任务,放弃 Apache DolphinScheduler 原生使用Spark Thrift Server 的方案,采用 Spark API 进行封装,并使用 Spark Submit的方式执行,可以灵活配置资源,解决任务的性能和日志输出问题

4) 优化 Hive SQL 任务,融合 HiveServer2 的 HA 功能,使用 namespace 进行连接,解决应用端的并发和负载问题

5) 新增 Spark Shell 任务,支撑在线编辑 Spark 代码,在 SparkShell 的执行引擎内部,我们封装了 ApiProxy 的 API ,方便用户快速读写各数据源

6) 新增 Kerbero 安全认证,在各任务生成阶段,根据成员的 Kerberos 绑定信息,完成票据认证

7) 新增图形化开发任务(内部代号EasyFlow),搭载 Apache DolphinScheduler 的调度能力,提供低代码能力。现阶段已实现数据处理基本算子的集成,后续计划完成业务类算子的集成,支撑复杂业务逻辑形成算子能力。

调度中心

DS

UniM-Data 的调度中心主要借助 Apache DolphinScheduler 的任务调度能力,基本沿用其任务上下线、重跑、定时执行等能力,为用户提供任务监控和管理能力。为了使平台与 Apache DolphinScheduler 能够解耦,我们对其进行了接口拓展,新增和改造了任务添加、任务信息订阅等接口,暴露给平台进行通信。

数据同步

DS

在 2020 年进行数据同步技术选型时,基于医疗信息多源异构的特点,我们经过考察分析,认为 Sqoop 虽然在分布式上具备一定的优势,但是需要使用 MR 的计算框架,成本较高。而 DataX 虽然是单进程模式,但可以通过 Apache DolphinScheduler 的调度系统进行性能规避,且单进程模式更容易进行控制和排错,DataX 具有开放式的框架,可以在极短的时间开发一个新插件,快速支持新的数据库/文件系统,实现架构如下:

在项目落地过程中,我们在开源版本 DataX 上拓展了诸如百度 Doris、人大金仓 kingbase、华为 openGauss 等国产数据库的适配。

数据治理工具

DS

UniM-Data 上,提供了数据质控、数据探查、数据识别等自研治理工具,在 Apache Dolphin Scheduler 上进行较为综合性的拓展和应用。我们的设计思路是,实现独立的计算引擎,使用 Apache DolphinScheduler 的调度系统,提供数据治理能力。实现方式主要是在 org.apache.Dolphin

Scheduler.server.worker.task 的 package 上增加对应的任务生成逻辑,通过 Apache DolphinScheduler 的调度能力执行计算引擎。下面以数据质控为例进行说明。

整体的运行流程

1)应用侧:

  • 模型中心创建质控任务( UniM-Data 的数据表实体统一由模型中心标注和创建)

  • 质控引擎提供表级和字段级质控类型,如记录数、及时性、范围、规则等质控算子

  • 设置评分规则,根据质控结果形成等级划分

  • 提交任务 Json 至 Apache DolphinScheduler 的 API Server ,并将任务控制权托管至调度中心

2) Apache DolphinScheduler 侧:

  • API Server 接收和保存质控任务

  • Master 进行任务调度,向调度中心暴露控制接口

  • Worker 完成对参数的解析和构造,通过权限控制后,生成质控引擎的执行命令,执行计算引擎

3) 输出侧:

  • 报告中心承接质控结果的展示和报告输出

  • 质检异常的抽样数据存放至 MinIO,以文件形式提供异常数据

引擎实现

DS

数据质控的架构图

按照整体的系统设计思想,引擎与 Apache DolphinScheduler 分别解耦,各司其职,可单独执行也可以与 Apache DolphinScheduler 配合使用。引擎抽象层设计有 source、measure、sink、sample和score(记分规则):

  • source:现支持hive、oracle、mysql、doris、kingbase、openguase、cache、sqlserver等数据源

  • measure:现建设有记录值、及时性、值域、极值、非空等10+种算子

  • sink:支持API、CSV

  • sample:支持MinIO、mysql的数据样本下发

应用实现

DS

数据质控在应用端采用配置化方式,降低使用成本,提供了可选表级与字段级质控范围,进行不同数据的定制化任务设定。

04

成果与总结

从2020年至今,UniM-Data 经过持续的运营与建设,在医疗、运营、科研、应急等业务线条上有多个项目落地。在项目实施落地阶段,UniM-Data 承接着日均超6000+任务实例,面临着数据流量达 TB 级别、系统7*24小时支持、准确率达99.9999%等挑战。Apache DolphinScheduler 作为 UniM-Data 的任务调度中心,基于其优秀的架构和丰富的功能,在实际生产中交出了令人欣喜的答卷,主要体现在:

  • 基于 Apache DolphinScheduler 的调度能力,开发并提供数据采集、血缘、治理等多类执行器,支撑业务的快速演进

  • 新增功能和业务性接口,在 Apache DolphinScheduler 的调度能力基础上,提供功能更加丰富的调度中心

  • 基于 Apache DolphinScheduler 的补数和重跑机制,有效降低数仓团队的运维成本,提高数据准确率

  • 去中心化结构,保证整体系统7*24小时稳定运行

  • 提供多项目、多资源的隔离环境,可在较低成本下,提供统一门户、差异化功能和权限校验

05

下一步计划

UniM-Data 目前采用的是 Apache DolphinScheduler 的1.3.2版本,在社区快速发展下,为了进一步强化调度系统和融合优秀能力,我们计划将基线版本升级至社区3.0版本,期待 Apache DolphinScheduler 为大家带来更多能力。

参与贡献

随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。

参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括:

贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/issues/5689

非新手问题列表:https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22

如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/docs/development/contribute.html

来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。

参与开源可以近距离与各路高手切磋,迅速提升自己的技能,如果您想参与贡献,我们有个贡献者种子孵化群,可以添加社区小助手微信(Leonard-ds) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。

添加小助手微信时请说明想参与贡献。

来吧,开源社区非常期待您的参与。

活动推荐

SeaTunnel 到底有着怎样的开发设计理念?独特的架构设计又为用户进行数据处理带来了哪些质的变化?期 625 | 洞见·开发理念 线上 Meetup,社区邀请到 Apache SeaTunnel (Incubating)的多位资深用户,将围绕数据模块改造、数据集成介绍、数据同步实践等方面,剖析 SeaTunnel 开发设计的独到之处。

本次活动受疫情影响仍以线上直播的形式开展,活动现已开放免费报名,欢迎扫描下图二维码,或点击“阅读原文”免费报名!

时间:2022-6-18 14:00-16:10

点击原文链接或扫描报名二维码(免费):

https://www.slidestalk.com/m/902/dsgongzhonghao

扫码预约直播

扫码进入群聊

更多精彩推荐

☞讲师征集令 | Apache DolphinScheduler Meetup分享嘉宾,期待你的议题和声音!

☞达人专栏 | 还不会用 Apache Dolphinscheduler?大佬用时一个月写出的最全入门教程【四】

☞大数据平台迁移实践 | Apache DolphinScheduler 在当贝大数据环境中的应用

☞金融任务实例实时、离线跑批,Apache DolphinScheduler 在新网银行的三大应用场景与五大优化

☞中国联通改造 Apache DolphinScheduler 资源中心,实现计费环境跨集群调用与数据脚本一站式访问

☞又是一年开源之夏,八大课题项目奖金等你来拿!

点击阅读原文,免费预约直播!

我知道你在看

日均 6000+ 实例,TB 级数据流量,Apache DolphinScheduler 如何做联通医疗大数据平台的“顶梁柱”?...相关推荐

  1. 卷皮OLAP平台进化史:Apache Kylin在卷皮网大数据平台的运用

    \ AI 前线导读:"卷皮网"是一家专注高性价比商品的移动电商 ,日活跃高达 1000 多万,随着卷皮网的快速发展,数据规模快速增长,集群数据存储量成指数倍增大,服务器规模达到 1 ...

  2. 诸葛io的技术架构图_大数据平台的技术演化之路 诸葛io平台设计实例

    作者简介:本文来自诸葛io创始人孔淼的技术分享.诸葛io是业内领先的智能数据决策平台,也是国内早期的数据分析践行者.本文将从诸葛io平台设计实例,分享大数据平台的技术演化之路. 如今,数据分析能力正逐 ...

  3. Apache Spark在海致大数据平台中的优化实践

    本文来自由海致网络技术公司翟士丹分享.专注于大数据技术领域,Apache Spark Contributor,有丰富的Spark SQL引擎调优经验.海致全称海致网络技术公司,成立于2013年7月.作 ...

  4. Apache开源顶级项目Ambari搭建HDP大数据平台

    搭建Hortonworks Data Platform大数据平台 Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项 ...

  5. 重庆移动大数据平台 实现流量计费可视化

    日前,重庆移动在大数据平台上自主设计开发的流量计费可视化系统正式上线,将为流量计费质量监控.分析处理提供有效支撑. 据了解,该系统可实时监控流量计费并将结果展示到大数据天眼系统,一旦某个时间段计费出现 ...

  6. Apache Kylin在4399大数据平台的应用

    来自:AI前线(微信号:ai-front),作者:林兴财,编辑:Natalie 作者介绍: 林兴财,毕业于厦门大学计算机科学与技术专业.有多年的嵌入式开发.系统运维经验,现就职于四三九九网络股份有限公 ...

  7. 大数据平台的技术演化之路 诸葛io平台设计实例

    如今,数据分析能力正逐渐成为企业发展的标配,企业通过数据分析的过程将数据中的信息提取出来,进行处理.识别.加工.呈现,最后成为指导企业业务发展的知识和智慧.而处理.识别.加工.呈现的过程从本质上来讲, ...

  8. drill apache_使用Apache Drill深入研究当今的大数据

    drill apache 自2014年9月首次提供Beta版以来, Apache Drill一直在获得广泛的用户采用和社区动力.2015年5月发布了Drill的通用版本-Drill 1.0,此后大量客 ...

  9. 使用Apache Drill深入研究当今的大数据

    自2014年9月首次提供Beta版以来, Apache Drill一直在获得广泛的用户采用和社区动力.2015年5月发布了Drill的通用版本-Drill 1.0,此后,许多客户已在生产中部署和使用了 ...

最新文章

  1. jittor和pytorch 生成网络对比之clustergan
  2. 英伟达公开课 | 如何突破Decoder性能瓶颈?揭秘FasterTransformer2.0的原理与应用,已开源...
  3. 【⚡小丑竟然是我自己⚡】安防三年,今天才知道什么是ONVIF
  4. 浅谈专有云MQ存储空间的清理机制
  5. 远程修改linux文件内容,用VS Code连接远程Linux服务器实时修改代码
  6. Spring mvc 转发
  7. Eclipse 中Access restriction: The type ‘XXX’ is not API
  8. Python计算流体动力学(CFD)模拟人体呼吸系统
  9. 【Unity3D开发小游戏】《青蛙过河》Unity开发教程
  10. apache ii评分怎么评_如何正确进行APACHE II评分
  11. Python、Pycharm、Django及各插件安装经验汇总
  12. Composing builds 依赖统一管理实践
  13. 前端小案例--android机器人
  14. 如何将修改Tomcat的默认端口(8080)到80端口
  15. 海思CEA-861时序配置
  16. Matlab求解定积分/不定积分/微分
  17. 人工神经网络的算法原理,对人工神经网络的理解
  18. 高精度除法(精确到小数点后N位)
  19. 机器学习算法系列(18):方差偏差权衡(Bias-Variance Tradeoff)
  20. cas latex模板参考文献APA等引用格式(Elsevier期刊)

热门文章

  1. 如何选择适合你的兴趣爱好(四十三),国际象棋
  2. 微信小程序--var、let、const的用法及区别
  3. 语音信号的分帧、加窗处理
  4. 王永庆:技术创新改变教育未来
  5. FFmpeg与MediaCodec 简单总结
  6. BIM时代的来临,建筑设计院的未来将何去何从?
  7. ios设备管理软件 2.16.9官网Mac/Windows下载电脑版功能介绍
  8. 2019全国大学生数学建模竞赛题目A题 高压油管的压力控制
  9. Android 利用ReplacementSpan打造纯文本填空题(附源码)
  10. 爬山算法c语言,《爬山算法》