海豚调度数仓任务管理规范

2024-02-02 09:28

本文主要是介绍海豚调度数仓任务管理规范,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、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层有多种数据应用场景就拆分成多个工作流等;本文的规范是以数仓标准数据模型构建的,如果有特殊需求,可以在这个任务管理规范基础上做相应调整。

    如果这份博客对大家有帮助,希望各位给i7杨一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!

    制作不易,如果大家有什么疑问或给i7杨的意见,欢迎评论区留言。

这篇关于海豚调度数仓任务管理规范的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670246

相关文章

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

《SpringBoot集成Quartz使用Cron表达式实现定时任务》本文介绍了如何在SpringBoot项目中集成Quartz并使用Cron表达式进行任务调度,通过添加Quartz依赖、创... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N