DolphinScheduler管理数仓任务规范

news2024/12/24 21:15:24

目录

一、DolphinScheduler调度数仓任务现状分析

2.1 一个任务流构建数仓所有的逻辑节点

2.2 每个逻辑节点构建一个任务流

二、数仓任务管理调度需求分析

三、DolphinScheduler数仓开发任务管理规范

四、结语


前言:大数据领域对多种任务都有调度需求,以离线数仓的任务应用最多,许多团队在调研开源产品后,选择DolphinScheduler作为调度场景的技术选型。得益于DS优秀的特性,在对数仓任务做运维和管理的时候,往往比较随意,或将所有任务节点写到一个工作流里,或将每个逻辑节点单独定义一个工作流, 缺少与数仓建模对应的任务管理规范;这造成了数据管理困难和异常容错繁琐等痛点,本文基于数仓建模标准的方法论,构建一套用于DS管理数仓任务的规范,避免以上痛点。

一、DolphinScheduler调度数仓任务现状分析

       在使用DS做数仓任务管理时,数据建模分层落地到调度上缺少规范,社区用户用起来比较乱,一些常见的场景如下:

2.1 一个任务流构建数仓所有的逻辑节点

       DolphinScheduler里有任务血缘的概念,这个概念和数据血缘有许多类似的地方;在构建调度任务的时候,用户容易将任务血缘和数据血缘混淆,希望在构建数仓生命周期的时候,通过任务血缘呈现出数据血缘的关系,这导致丢失了数据建模规范的分层管理。

类似例子如下:

单个工作流:

包含所有计算逻辑:

优点:这样做的好处是可以在一个工作流里直观的复现数据建模;

缺点:对于数据管理困难,只能人为的观察定位数据情况;

任务运行异常后,容错困难,要排查所有逻辑节点,并将计算逻辑回滚,这是特别繁琐的过程;

2.2 每个逻辑节点构建一个任务流

       除了将整个数仓的逻辑包装到一个工作流,还有另外一种方式:将每个逻辑节点包装成一个工作流;这种能很好的将计算逻辑解耦,任务运行异常的时候逻辑回归也清晰简单;但是依旧没有做到合理的数仓建模分层管理,且操作繁琐,面对超大量任务时,创建工作流将成为一种负担。

类似例子如下:

优点:优秀的异常容错,任务出现异常计算的时候,前后任务逻辑就能异常回滚重跑;

缺点:任务流创建繁琐,且没有做好数仓规范的数据分层管理。

二、数仓任务管理调度需求分析

       从数仓的视角,任务调度核心需求是:任务类型、依赖关系、定时调度、任务优先级,以及数仓分层管理,层级依赖(调度系统的视角,还有高可用、告警、资源管理、用户安全、易用性、可扩展等能力)。

        任务类型、依赖关系、定时调度、任务优先级是系统提供的能力,数仓分层管理和层级依赖是调度能力之上的任务管理规范。这里参考数据建模规范构建与之对应的任务管理规范。

数据建模架构如下:

数据建模分析与数仓维度建模规范-CSDN博客

数据建模到数仓开发过程中需要关注4点:

  1. 逻辑开发:数据需求的实现;
  2. 数据管理:各层级数据划分;
  3. 开发依赖:数据层级依赖实现;
  4. 异常容错:异常任务定位和数据复原重跑。

构建在调度系统之上的数仓任务编排规范,需要满足以上要求。

三、DolphinScheduler数仓开发任务管理规范

为了和数据建模规范保持一致,我们按照数据建模的分层理论,设计调度任务的编排规范。

从顶层设计上将工作流定义为3类:

  • 数仓分层工作流:ODS、DIM、DW、ADS每层一个工作流; DW层可以根据业务需求,细分出三个DWD、DWM、DWS等好实现业务需求的单独任务流管理;
  • 数仓任务Master管理工作流:将数仓分层,按照开发依赖串联到一个工作流中统一管理;
  • 异常容错工作流:数仓运行过程中,中途出错或者结果异常,需要数据环境复原,就可以将中间表清理逻辑包装在异常容错工作流,做统一数据清理,然后再从头跑数仓任务。

数仓开发工作流规范如下:

数仓每层工作流只关注每层的逻辑;以ODS层为例,该层提供多个数据应用方数据支持,所以在这个任务工作流里,构建这一层的所有逻辑节点:

运行任务管理Master工作流,节点布局规范如下:

异常容错工作流:

这一个工作流,主要是为了在任务运行异常时,删除中间表计算的新增结果;

依据数据模型的表设计,想将DS的任务血缘当简单数据血缘使用需求的,可以在这一个工作流里将节点关联,数据清理和任务血缘不冲突,还可以顺便检测数据清理情况。

四、结语

      除此之外,数仓还有一些局部概念需要在任务编排上做规范,比如需要将DS项目和数仓映射,一个DS项目管理一个数仓;需要将数据集市和工作流映射,ADS层有多种数据应用场景就拆分成多个工作流等;本文的规范是以数仓标准数据模型构建的,如果有特殊需求,可以在这个任务管理规范基础上做相应调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1424938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

modbus协议和示例

协议 主机读写 从站地址(8bit)功能码 (8bit)起始地址(16bit)数量(16bit)CRC(16bit) 从机对主机读取的回复 从站地址(8bit)功能码 …

并网逆变器学习笔记8---平衡桥(独立中线模块)控制

参考文献:《带独立中线模块的三相四线制逆变器中线电压脉动抑制方法》---赵文心 一、独立中线模块的三相四线拓扑 独立中线模块是控制中线电压恒为母线一半,同时为零序电流ineu提供通路。不平衡负载的零序电流会导致中线电压脉动,因此需要控制…

Python第十三章(递归与lamada)

一。引用类型 不可变类型:在改变原有类型的数据后,值的地址也会进行更改 包括:整数,浮点数,字符串,元组 用id():进行判断是否十进制地址是否一样 可变类型:在改变原有类型后&…

一文教你如何本地搭建Qchan图床网站实现公网远程访问

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景,在大量开发人员的努力下,已经开发出大…

endnote设置引用格式

1在这上面找到合适的style,比如搜索nature methods https://endnote.com/downloads/styles/​​​​​​2.下载到的ens用endnote打开,可以导入nature methods格式 3.引用的时候发现显示的插入是4-7,但是看了最近nature methods的是4,5,6,7 …

C/C++实现无序入参的命令解析工具

C/C实现无序入参的命令解析工具 1 实现思路2 主要功能3 效果展示3.1 直接运行代码图3.2help命令执行效果图3.3命令行执行命令解析效果图 4 代码实现5 代码下载 1 实现思路 基本介绍: 思路来源于atlas,atc(模型转换工具),该工具对命令支持众多&#xff0…

多智能体强化学习--MAPPO(pytorch代码详解)

标题 代码详解Actor和Critic网络的设置 代码详解 代码链接(点击跳转) Actor和Critic网络的设置 基本设置:3个智能体、每个智能体观测空间18维。Actor网络:实例化一个actor对象,input-size是18Critic网络&#xff1…

Shell脚本——免交互

目录 一、Here Document免交互 1、免交互概述 2、语法格式 2.1示例:免交互方式实现对行数的统计,将要统计的内容置于标记EOF之间,直接将内容传给wc-l来统计 3、变量设定 ①变量图换成实际值 ②整行内容作为变量并输出结果 ③使输出内…

杠杆交易在伦敦金市场的优势与风险

伦敦金作为黄金市场的灯塔,每天吸引着全球投资者的目光。伦敦金的特殊地位使得以它为基准的杠杆交易成为众多投资者追逐的目标。在这篇文章中,我们将深入探讨伦敦金杠杆交易的奥秘,带你揭开这一盛宴的神秘面纱。 伦敦金杠杆交易的核心在于通过…

【pytorch】anaconda使用及安装pytorch

https://zhuanlan.zhihu.com/p/348120084 https://blog.csdn.net/weixin_44110563/article/details/123324304 介绍 Conda创建环境相当于创建一个虚拟的空间将这些包都装在这个位置,不需要了可以直接打包放入垃圾箱,同时也可以针对不同程序的运行环境选…

HashSet 的基本操作【集合容器知识回顾 ④】

HashSet 是 Java 中的一个集合类,它实现了 Set 接口。Set 是一种不允许包含重复元素的集合,而 HashSet 则是 Set 接口的一个具体实现。因此,HashSet 用于存储一组唯一的元素,不允许重复。 HashSet 的一些特点: 不允许…

揭开时间序列的神秘面纱:特征工程的力量

目录 写在开头1. 什么是特征工程?1.1 特征工程的定义和基本概念1.2 特征工程在传统机器学习中的应用1.3 时间序列领域中特征工程的独特挑战和需求3. 时间序列数据的特征工程技术2.1 数据清洗和预处理2.1.1 缺失值处理2.1.2 异常值检测与处理2.2 时间特征的提取2.2.1 时间戳解析…

Vue中使用定义的函数时,无法访问到data()里面的数据

const translateItems1 () > {this.translatedItems this.items1.map(item > {return {...item,label: this.$t(item.labelKey)};}); items1是我们data()里面的数据,无法访问到 解决办法 把箭头函数替换为普通函数 const translateItems1 function() {th…

echarts 鼠标移入有单位;echarts 纵坐标有单位;echarts 纵坐标刻度有单位

1.echarts 鼠标移入有单位 tooltip series: [{name: "平均值",type: "line",data: this.avgData,tooltip: {valueFormatter: function (value) {return value 万元}}}]2.echarts 纵坐标有单位;name yAxis: [{type: "value",name: t…

为什么贪婪的 GPU需要快速的对象存储?

一个链条的力量取决于其最薄弱的环节 - 同样,您的AI/ML基础设施的速度也只有您的最慢组件那么快。如果您使用GPU训练机器学习模型,那么您的薄弱环节可能是您的存储解决方案。结果就是我所说的“饥饿GPU问题”。 饥饿GPU问题发生在您的网络或存储解决方案…

三、软硬件工作流程分析

现在的计算机主要是由两部分组成:软件系统和硬件系统。这里先捋清楚硬件和软件的关系,以及电脑 各个组成部分是如何配合工作的。 软件系统主要被分类为两大类: 系统软件:这包括操作系统,如Windows、Linux等。操作系统是…

ManticoreSearch-(安装配置,集群搭建)-学习总结

ManticoreSearch-(安装配置)-学习总结 基础概念安装搭建集群搭建(基于K8S) 原文地址 https://blog.csdn.net/liuyij3430448/article/details/135955025 基础概念 Manticore Search是一个专门为搜索设计的多存储数据库,具有强大的全文搜索功能,适用于…

力扣hot100 三数之和 双指针 细节去重

Problem: 15. 三数之和 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 参考 Code ⏰ 时间复杂度: O ( n 2 ) O(n^2) O(n2) &#x1f30e; 空间复杂度: O ( 1 ) O(1) O(1) class Solution {public List<List<Integer>> threeSum(int[] nums){List&l…

composer常用命令

查看全局配置信息 composer config -gl 设置镜全局像地址 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 去掉-g&#xff0c;即表示只有当前项目使用该镜像 批量安装composer项目依赖 composer install 执行该命令后&#xff0c;会读取当…

算法练习-二叉树的层序遍历(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;二叉树 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨…