基于dolphinscheduler的使用浅谈数仓分层及模型设计

学而知之@ 学而知之@     2022-12-21     629

关键词:

前言:本文旨在简单介绍DS的概述和架构上的设计,对其安装等不做展开介绍。之前了解了一下,很多小伙伴也在使用该产品。我呢,也是到现在公司后才开始接触并使用,对其 “开发” 的还不够深,这里根据官方文档和项目中的实践和大家简单分享。欢迎大家批评指正,敬礼!

一、简介

DS是分布式易扩展的可视化工作流任务调度平台。

Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用

二、架构图

三、架构设计

1、名词解释

1.1、DAG:

​ 相信大家对这个次并不陌生,在spark和flink中都有这个定义。在DS中,工作流中的Task任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图:

1.2、任务类型

​ 目前支持有SHELL、SQL、SUB_PROCESS(子流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖),同时计划支持动态插件扩展,注意:其中子 SUB_PROCESS 也是一个单独的流程定义,是可以单独启动执行的。举例如下图:
注:左侧边栏看大的都是可调度执行的组件,畅用无限~

1.3、调度方式:

​ 系统支持基于 cron 表达式的定时调度和手动调度。

​ 命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。其中 恢复被容错的工作流恢复等待线程 两种命令类型是由调度内部控制使用,外部无法调用。举例如下图:

1.4、依赖

​ 系统不单单支持 DAG 简单的前驱和后继节点之间的依赖,同时还提供任务依赖节点,支持流程间的自定义任务依赖。说到依赖想重点和兄弟们讨论下这个问题,但是文字表达起来比较费劲,希望各位兄弟可以留言,咱们针对具体问题一起聊聊。

1.5、补数

​ 补历史数据,支持区间并行和串行两种补数方式

1.6、邮件告警

​ 支持 SQL任务 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知

下图:是单独执行任务时进行的相关配置,我个人感觉补数功能是比较牛X的,用好系统时间的变量,造作起来吧(我也是这两天遇到了这样的需求,才 “开发出了这个功能”)。欢迎兄弟们一起讨论。

2、系统架构

2.1、系统架构图

2.2、架构组成、简介
  • MasterServer

    MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态。 MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。 MasterServer基于netty提供监听服务。

  • WorkerServer

    WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。 WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。 WorkerServer基于netty提供监听服务。

  • ZooKeeper

    ZooKeeper服务,系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错。另外系统还基于ZooKeeper进行事件监听和分布式锁。

  • Task Queue

    提供任务队列的操作,目前队列也是基于Zookeeper来实现。由于队列中存的信息较少,不必担心队列里数据过多的情况。

  • Alert

    提供告警相关接口,接口主要包括告警两种类型的告警数据的存储、查询和通知功能。其中通知功能又有邮件通知

  • API

    API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。 接口包括工作流的创建、定义、查询、修改、发布、下线、手工启动、停止、暂停、恢复、从该节点开始执行等等

  • UI

    系统的前端页面,提供系统的各种可视化操作界面

2.3、架构设计思想

一、去中心化vs中心化

中心化思想:

​ 中心化的设计理念比较简单,分布式集群中的节点按照角色分工,大体上分为两种角色:

  • Master的角色主要负责任务分发并监督Slave的健康状态,可以动态的将任务均衡到Slave上,以致Slave节点不至于“忙死”或”闲死”的状态。
  • Worker的角色主要负责任务的执行工作并维护和Master的心跳,以便Master可以分配任务给Slave。

​ 中心化思想设计存在的问题:

  • 一旦Master出现了问题,则群龙无首,整个集群就会崩溃。为了解决这个问题,大多数Master/Slave架构模式都采用了主备Master的设计方案,可以是热备或者冷备,也可以是自动切换或手动切换,而且越来越多的新系统都开始具备自动选举切换Master的能力,以提升系统的可用性。
  • 另外一个问题是如果Scheduler在Master上,虽然可以支持一个DAG中不同的任务运行在不同的机器上,但是会产生Master的过负载。如果Scheduler在Slave上,则一个DAG中所有的任务都只能在某一台机器上进行作业提交,则并行任务比较多的时候,Slave的压力可能会比较大。

去中心化思想:

  • 在去中心化设计里,通常没有Master/Slave的概念,所有的角色都是一样的,地位是平等的,全球互联网就是一个典型的去中心化的分布式系统,联网的任意节点设备down机,都只会影响很小范围的功能。
  • 去中心化设计的核心设计在于整个分布式系统中不存在一个区别于其他节点的”管理者”,因此不存在单点故障问题。但由于不存在” 管理者”节点所以每个节点都需要跟其他节点通信才得到必须要的机器信息,而分布式系统通信的不可靠性,则大大增加了上述功能的实现难度。
  • 实际上,真正去中心化的分布式系统并不多见。反而动态中心化分布式系统正在不断涌出。在这种架构下,集群中的管理者是被动态选择出来的,而不是预置的,并且集群在发生故障的时候,集群的节点会自发的举行"会议"来选举新的"管理者"去主持工作。最典型的案例就是ZooKeeper及Go语言实现的Etcd。
  • DolphinScheduler的去中心化是Master/Worker注册到Zookeeper中,实现Master集群和Worker集群无中心,并使用Zookeeper分布式锁来选举其中的一台Master或Worker为“管理者”来执行任务。

四、实践

注:这部分的话,我截图给大家展示一下吧,然后配一些文字说明,有感兴趣的小伙伴可以讨论哈。

先来介绍下我们这边大致的设计思路:

​ 按照数仓分层的思想,我们构建出了四个主要的项目。当然还会有一些其他的项目,包括临时需求、多场景取数等等吧。下面来重点看下这四个项目中内容:

1、dw_ods层

​ 看到这个名字,不用说,相信大家也知道是在做什么事了。对喽,就是你们想的那样。我来说下我们这边ODS层的设计吧(可能很乱,见笑了各位大佬)

对了,就是有这么多的ODS库,是不是很酸爽?基于工具的不能全局查找的特性,在不了解表的情况下,再加上运气背的话,可能要翻遍整个ODS的库才能知道你想看的表在哪个库下(哭瞎)~~

这么设计也是历史遗留问题了,很难再改变了。这就是所谓的按照业务系统的划分,在ODS落地时,也做了分库,并且基本是和ODS保持高度一致的。
其实从另外一面看待,这么设计也没什么问题。
也有了解过其他小伙伴们在ODS层的设计,其中有一种是将所有的ODS层表落到一个库下,但是在命名的时候,会按照业务系统进行划分。我个人觉得这两种设计各有利弊吧,不能绝对的说谁好谁坏~
另外还有一点,就是ODS层表的设计,目前我们是采用分区表进行存储的,并定期对历史分区进行删除,以保证存储空间和执行效率。当然也有把ODS层直接进行truncate再进行全量写的~看自己公司的设计理念和习惯了。

来给大家展示下,在DS中的设计:

这两张图非常清晰的展示了我们在ODS层的设计,懂得一眼就明白了,不明白的咱可以留言交流。

2、dw_dwd层

说下DWD的设计,在数仓中将业务流转换为数据流。根据业务过程划分出主题,采用维度建模的方式,将数据进行汇总,采用一些七七八八的手段,尽可能的提高dwd层表的复用性。

​ 在DS中,根据主题表创建不同的工作流:

​ 弊端:等主题慢慢膨胀起来,管理起来比较费劲

​ 好处:各自为战,清晰明了

来看上面图二:

​ 这是我们众多DWD表中的一张,在DS中,设置任务调度时,强依赖了DS中的依赖组件,并将DWD表中涉及到的ODS表增加至依赖中。这样做的好处,是比较精准的把控了每一张DWD表的动向。

3、dw_dws层

DWS层的设计也是比较明确的,基于DWD的层表,在同粒度的情况下,对数据进行汇总,然后形成主题宽表。
我们在设计这层的时候,严格按照数仓设计的规范:DWS层的表只能使用DWD的表进行关联汇总,坚决不允许出现跨层使用的情况。
如果在生产过程中,发现现有模型不能很好的支持业务的输出,会定期对模型进行小范围的重构(增减字段等),以保证模型的复用能力和“活力”。
在DS中,我们也是按照主题宽表进行分工作流设计的,如下图:

如上图二:在DWS中,我们也是按照依赖对工作流进行了设计。DIM层、DWD层都是在执行完毕的情况下,才能继续往下走。
PS:做任务依赖这点DS还是很香的,当然很多同学想用弱依赖来更加完美的配置工作流,但是目前DS貌似不支持,期待新功能早日上线吧。

4、DM层

设计完DWS层算是完成一大半工作了,DM层(或者叫ADS层)基本就是根据实际的报表需求,对数据进行汇总,最终由DM层将数据推到OLAP(目前我们使用的Doris,感兴趣的小伙伴可以一起交流下,哇咔咔~)供业务或者分析师使用。

5、DIM层

对了,差点忘了说,还有比较重要的一层:DIM层,即维度层。
在数仓建设的过程中,严格遵守一致性维度的原则。维度层的表是可以进行跨层使用的,下面展示下我们数仓分层的架构简图:

五、结束语

本文介绍了DS的架构原理和我实际工作中的使用情况,在我们整个数仓项目中,DS起到了至关重要的作用,使得开发效率明显提升,调度任务管理起来也更加清晰。
说一说我在使用过程中的心得吧,我个人个感觉,对调度的设计也是需要画个架构图提前规划的,不然随着需求的增加,项目越来越多,工作流越来越多,管理就变得困难了。提前做好规范,各位开发的小伙伴严格按照规范做事,即使会出圈也不会跑太偏。
本文篇幅有限,有些问题介绍也不是很深入,相信所有使用DS的小伙伴会充分挖掘它的功能,使开发变得更加容易。实际使用的功能还有很多,就不一一介绍了,有兴趣的小伙伴可以一起交流。
好了,此致吧,敬礼了~~睡觉了,晚安!!!

基于dolphinscheduler的使用浅谈数仓分层及模型设计

...介DS是分布式易扩展的可视化工作流任务调度平台。ApacheDolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱... 查看详情

海睿思分享|浅谈数仓指标体系管理

什么是指标?指标,是用于衡量事物发展程度的单位或方法,也常被称作度量,通常情况下也是报表统计的字段,例如:人口数、营业收入、用户数、利润率、成功率、失败率、覆盖率等。//1数仓指标的构... 查看详情

数仓实践:浅谈kimball维度建模

我们不管是基于Hadoop的数据仓库(如Hive),还是基于传统MPP架构的数据仓库(如Teradata),抑或是基于传统Oracle、MySQL、SQLServer关系型数据库的数据仓库,其实都面临如下问题:怎么组织数据仓库中... 查看详情

浅谈数和二叉树

树:非线性结构。一对多的关系。根节点:没有前驱节点的节点。叶子节点:没有后继节点的节点。节点的度:一个节点的子节点个数。树的度:树中度最大的节点的度。树的节点个数计算:满树:一棵度为n,高度为h的满树,... 查看详情

浅谈数通畅联ecp与eac的区别

最近收到很多客户的提问,AEAIECP企业云联平台是什么产品?为什么AEAIECP中包括集成套件?EAC也是数通畅联的产品吗?同样涉及集成两者有什么区别呢?诸如此类的问题还有很多。其实AEAIECP与EAC是两种不同的模式,一个为实际产... 查看详情

数仓实践:浅谈kimball维度建模

我们不管是基于Hadoop的数据仓库(如Hive),还是基于传统MPP架构的数据仓库(如Teradata),抑或是基于传统Oracle、MySQL、SQLServer关系型数据库的数据仓库,其实都面临如下问题:怎么组织数据仓库中... 查看详情

基于rainbond部署dolphinscheduler高可用集群(代码片段)

...描述通过[Rainbond]云原生应用管理平台一键部署高可用的DolphinScheduler集群,这种方式适合给不太了解Kubernetes、容器化等复杂技术的用户使用,降低了在Kubernetes中部署DolphinScheduler的门槛。ApacheDolphinScheduler是一个分布式易扩展的可... 查看详情

浅谈数商云s2b2c商城系统业务一体化管理功能在医疗器械行业的应用

近些年,随着医疗器械行业的快速发展,医疗器械市场规模也随之日益提升,根据公开数据统计,2021年我国医疗器械市场规模为9630亿元,同比增长31.18%,预计2022年将突破万亿大关。但与此同时,医疗... 查看详情

数仓建设保姆级教程,离线和实时一网打尽(理论+实战)

...姆级教程PDF文档一、数仓基本概念1.数据仓库架构我们在谈数仓之前,为了让大家有直观的认识,先来谈数仓架构,“架构”是什么?这个问题从来就没有一个准确的答案。这里我们引用一段话:在 查看详情

数仓建设保姆级教程,离线和实时一网打尽(理论+实战)(代码片段)

...姆级教程PDF文档一、数仓基本概念1.数据仓库架构我们在谈数仓之前,为了让大家有直观的认识,先来谈数仓架构,“架构”是什么?这个问题从来就没有一个准确的答案。这里我们引用一段话:在 查看详情

数仓建设教程(代码片段)

...术博客_51CTO博客一、数仓基本概念1.数据仓库架构我们在谈数仓之前,为了让大家有直观的认识,先来谈数仓架构,“架构”是什么?这个问题从来就没有一个准确的答案。这里我们引用一段话:在软件行业&#x... 查看详情

数仓建设保姆级教程,离线和实时理论+实战)(代码片段)

文档大纲:一、数仓基本概念1.数据仓库架构我们在谈数仓之前,为了让大家有直观的认识,先来谈数仓架构,“架构”是什么?这个问题从来就没有一个准确的答案。这里我们引用一段话:在软件行业... 查看详情

dolphinscheduler无故删除hdfs上的hive库表目录(代码片段)

...朋友们,我可爱的同事又搞了个大BUG待我慢慢道来…DolphinScheduler大家应该都用过,中国人开源的一个调度工具,类似Azkaban,本次的事情就是在DolphinScheduler上发生的。据领导描述,某团队负责的某业务数仓上... 查看详情

基于seatunnel连通hive数仓和clickhouse的实战(代码片段)

目前公司的分析数据基本存储在Hive数仓中,使用Presto完成OLAP分析,但是随着业务实时性增强,对查询性能的要求不断升高,同时许多数据应用产生,比如对接BI进行分析等,Presto不能满足需求,在这个阶段我们引入了ClickHouse,... 查看详情

数仓建设保姆级教程,离线和实时一网打尽(理论+实战)(代码片段)

...姆级教程PDF文档一、数仓基本概念1.数据仓库架构我们在谈数仓之前,为了让大家有直观的认识,先来谈数仓架构,“架构”是什么?这个问题从来就没有一个准确的答案。这里我们引用一段话:在软件行业&#x... 查看详情

关于数仓建设及数据治理的超全概括

...节是数据治理,内容较长,还请耐心阅读!在谈数仓之前,先来看下面几个问题:数仓为什么要分层?用空间换时间,通过大量的预处理来提升应用系统的用户体验(效率& 查看详情

关于数仓建设及数据治理的超全概括

...耐心阅读!本文首发于公众号【五分钟学大数据】在谈数仓之前,先来看下面几个问题:数仓为什么要分层?用空间换时间,通过大量的预处理来提升应用系统的用户体验(效率),因 查看详情

基于dms的数仓智能运维服务,知多少?

摘要:GaussDB(DWS)使用DMS来承载数据库的智能运维体系,提供了数据库运维过程中的监控,分析,处理三大核心处理过程。本文分享自华为云社区《GaussDB(DWS)数据库智能监控运维服务-性能监控指标》,作者:power_gouge。GaussDB(DWS)使... 查看详情