当前位置: 首页 > news >正文

数仓作业延时告警-基于关键路径预推

简介

作业延时告警,通常来说有两种方式:
其一,当作业到目标时间点还没完成触发告警;这类情况,对于目标作业而言,延时已经触发了,风险相对较大;有的是监控接口延时(raw层),这里可能会出现接口延时,但是对于下游目标作业并没有延时影响;
其二,当前置作业完成已经晚于最晚时效,目标作业预触发告警;因为是前置预警,所以有一定的时间提前做好风险处理;

这里主要介绍第二种预警的思路,构思源自项目管理中的关键路径;
关键路径相关请访问:百度百科:关键路径);

前提假定条件:数仓为周期调度作业分配了足够的资源,作业计算pending等待时间极短;

这里澄清下量化的期望:量化的目的是为了减少不确定性,而不是消除不确定;只要减少不确定带来的收益大于投入就是好的;对于不确定的地方也欢迎大家提出意见&优化方案;

量化相关或可阅读:《数据化决策》;作者:道格拉斯·W. 哈伯德(美国)

应用环境:离线数仓,yarn调度+hive亦或sparksql引擎计算

作业示例图

在这里插入图片描述
在数仓中,可能会存在这几类情况:

  1. 同一个作业出现在多个依赖路径中,比如上截图的A作业;
  2. 作业与作业之间有设置不依赖,这类依赖关系在计算中应做剔除;
  3. 不同周期作业依赖,这类情况在特定时间节点做特殊处理;比如日频率作业依赖月频率作业,一般的调度依赖机制,t月周期日频作业依赖t-1月周期任务,即7月日频作业等月频6月周期跑完开始执行;

考虑到数仓作业跑批时长具有一定的波动性,可能存在作业异常,作业跑批时长取近n周期中位数(中位数对异常兼容较好);邻近相对更能代表当前集群情况,邻近取的周期数不应过多;这里按日频:近7日;月频:近3月;周频:近3周;小时:近24小时;

月频不太好把控,取周期数少可能命中特殊情况不具有代表性,取的周期过多,过早时间集群和作业配置可能会有变更,中位数不能代表最近情况;

数据准备

这里主要依赖如下几块数据:
1.集群作业跑批时长数据,用来估算每个作业跑批时长(这里取中位数,防异常),大概样式如下:

在这里插入图片描述
一般完成时间指的是基于当前集群概况,作业一般能在这个时间完成;

2.调度作业的依赖关系,大概样式如下:
在这里插入图片描述

计算流程

对于集群每一个非根节点(目标)作业结合作业依赖与跑批时长数据写一个递归程序计算上游作业节点最晚完成时效要求;

在这里插入图片描述

比如计算G作业前置作业依赖,G作业一般(这里取中位)在16点跑批完,作业跑批时长在2个小时,
那么G作业最晚需在14:00开始跑批
G作业依赖于E、B、A三个作业,根据E、B、A三个作业的运行时长可得出,E最晚需在13点跑批,B最晚需在13:00跑批,A最晚需在13:00跑批;
B作业依赖于A,所以为保障G作业在16:00完成,A作业最晚需在12:00点开始;
这里作业A处在两条依赖路线,兼容取最长路线(关键路径),在计算体现为在递归计算上游依赖最晚开始时间时,如一个作业重复出现,新计算的开始时间若早于之前的开始时间,则取最早的开始时间;

最后得出,作业G如需16:00完成,前置依赖最晚开始时间要求为:
A:12:00
B:13:00
E:13:00

延时预估取最大延时差,如果A在14:00完成(延时1个小时),E在16:00点完成(延时2个小时),那么目标G作业最终为18:00点完成,延时2个小时;前置依赖延时最大时间;(这里需要拉取已经跑批记录,取最大延时时长)

同理,计算作业D的前置依赖最晚开始时间,作业D跑批2小时,需在12:00完成,那么作业D需在10:00开始,前置依赖A需在9:00开始跑批;

同时满足作业D和作业G的目标时效,作业A在两个作业中都有依赖,则取最早时效,最晚开始时间为9:00;

脚本逻辑对每一个目标时效作业上游依赖时效计算写一个递归逻辑即可,逐层查找计算上游依赖时效要求,直到没有上游结束(查到根节点);如果链路重复遇到一个作业,最晚开始时间取最早的时间,该重复出现作业不再重复计算上游作业时效要求;

数据输出

数据输出每一个作业以及其前置依赖最晚开始时效要求,如上依赖截图输出为:
在这里插入图片描述

目标时效设置

以上计算先给出的是作业一般完成时效,是基于当前集群概况作业大多数能完成的时间,即当前可行的时效;考虑到跑批时效不稳定,实际设定目标可以稍往后延长些许时间,比如1个小时;

这里可以结合目标作业完成时间波动来看,比如覆盖85%以上作业完成时间,再结合业务情况在这个基础上酌情往后延长时间;比如85%的作业实例在下午16:00点完成,这里可以设置到16:30这样;具体可由业务和技术共同商定;

有的业务时效要求不敏感的,比如一般目标作业下午14:00完成,业务方期望17:00完成就行,那么期望时效也可以适当往后延延,比如到16:00,同时预留时间去排查问题;(优先排查处理那些紧迫的需要)

如果对时效敏感,目标作业时效要求高,则可以优化关键路径上的作业,缩短作业跑批时长,作业优化相关可参考早前写的:sparksql优化以及hive和sparksql优化方向

这里需要注意的是,作业依赖链路中的关键路径并不是一成不变的,可能会随着作业优化时效变短而发生变更;

在设定期望时效后,相应的前置依赖时效根据计算得出时间差相应调整即可;比如期望G作业17:00完成,则前置作业A最晚在13:00开始执行即可;(完成时间跟A作业最晚开始时间相差4个小时)

告警方式

这块可提单平台开发一个接口(一般公司规模起来都会有),邮箱或者短信推送,监控脚本可根据实际需要一小时扫描一次作业运行情况或者其他时间间隔;一旦触发告警,脚本通过该接口将信息推送出来;

相关文章:

数仓作业延时告警-基于关键路径预推

简介 作业延时告警,通常来说有两种方式: 其一,当作业到目标时间点还没完成触发告警;这类情况,对于目标作业而言,延时已经触发了,风险相对较大;有的是监控接口延时(raw层…...

秋招复习笔记——八股文部分:网络TCP

TCP 三次握手和四次挥手 TCP 基本认识 序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。 确认应答号&#xf…...

麒麟桌面操作系统上配置Samba

原文链接:麒麟桌面操作系统上配置Samba Hello,大家好啊!今天给大家带来一篇关于在麒麟桌面操作系统上配置Samba的文章。Samba是一种免费的软件,实现了SMB/CIFS网络协议,使得Linux和Windows系统之间可以共享文件和打印机…...

【Go】探索 Go 语言的内建函数 copy

山水间歌声回荡 回荡思念的滚烫 去年的家书两行 读来又热了眼眶 云水边静沐暖阳 烟波里久违的故乡 别来无恙 你在心上 🎵 张靓颖/张杰《燕归巢》 在 Go 语言中,copy 是一个用于在切片之间复制元素的内建函数。它提供了一种简单而高…...

【React】JSX:从基础语法到高级用法的深入解析

文章目录 一、什么是 JSX?1. 基础语法2. 嵌入表达式3. 使用属性4. JSX 是表达式 二、JSX 的注意事项1. 必须包含在单个父元素内2. JSX 中的注释3. 避免注入攻击 三、JSX 的高级用法1. 条件渲染2. 列表渲染3. 内联样式4. 函数作为子组件 四、最佳实践 在 React 开发中…...

JMeter 使用

1.JMeter 是什么? JMeter 是一款广泛使用的开源性能测试工具,由 Apache 软件基金会维护。它主要用于测试 Web 应用程序的负载能力和性能,但也支持其他类型的测试,如数据库、FTP、JMS、LDAP、SOAP web services 等。 2.特点&#x…...

20240724----安装git和配置git的环境变量/如何用命令git项目到本地idea

备注参考博客: 1)可以参考博客,用git把项目git到本地 2)可以参考博客vcs没有git 3)git版本更新,覆盖安装 (一)安装git (1)官网下载的链接 https://git-scm.com/downlo…...

JavaScript实战 - 用Canvas画一个心形

作者:逍遥Sean 简介:一个主修Java的Web网站\游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有疑问或建议,请私信或评论留言! 前言: 如…...

vim gcc

vim 使用 vs filename 分屏 ctrl ww 切窗口 shift zz 快速提出vim vim配置 vim启动时自动读取当前用户的家目录的.vimrc文件 vim配置只影响本用户 其他用户观看同一文件不受影响 gcc指令 & c文件编译过程 动态库 静态库 & 链接方式 有相应库才能进行…...

Symfony 表单构建器:创建和管理表单的最佳实践

Symfony 表单构建器:创建和管理表单的最佳实践 Symfony 是一个流行的 PHP 框架,以其强大的功能和灵活性闻名。表单构建器是 Symfony 中一个非常重要的组件,它提供了简单且高效的方式来创建和管理表单。本文将详细介绍 Symfony 表单构建器的最…...

Intel电脑CPU的选择

酷睿 i5/i7/i9 系列至强 Xeon 系列应用场景家用消费级电脑企业服务器工作站PCIe通道数 16X 最多识别到2张显卡,且每张降速为8X 64X 最多支持8张显卡同时使用 内存信道2通道8通道内存容量最大128GB最大6TB工作时长不建议长期不间断连续使用专为365*24不断电使用而设…...

MySQL字段设置的varchar长度小于数据长度自动截取丢弃超出的长度而不是报错?

MySQL字段设置的varchar长度小于数据长度自动截取丢弃超出的长度而不是报错? 事情是这样的,我们一个订单表存放了商品的快照信息其中快照信息存储的是json格式商品信息,当查看订单是报错了,发现我们后端服务查询到订单的快照信息…...

Linux|多线程(三)

线程池 线程池是一种多线程处理形式&#xff0c;处理过程中它将被提交的任务分配给预先创建好的多个线程中的一个去执行。 线程池的实现 #pragma once #include <pthread.h> #include <vector> #include <string> #include <unistd.h> #include <…...

智能合约中如何返回mapping

在 Solidity 中&#xff0c;直接返回一个 mapping 的所有数据是不可能的&#xff0c;因为 mapping 本身不支持直接遍历。但是&#xff0c;可以使用一些技巧来实现这一目标&#xff0c;例如通过维护一个额外的数组来跟踪 mapping 中的键&#xff0c;并通过这个数组来返回所有的键…...

nginx的学习(二):负载均衡和动静分离

简介 nginx的负载均衡和动静分离的简单使用 负载均衡配置 外部访问linux的ip地址:80/edu/a.html地址&#xff0c;会轮询访问Tomcat8080和Tomcat8081服务。 Tomcat的准备 准备两个Tomcat&#xff0c;具体准备步骤在nginx的学习一的反向代理例子2中&#xff0c;在Tomcat8080…...

普中51单片机:DS1302时钟芯片讲解与应用(十)

文章目录 引言基本特性什么是RAM&#xff1f;什么是涓流充电&#xff1f; 电路图和引脚说明通信协议以及工作流程寄存器控制寄存器日历/时钟寄存器 DS1302读写时序代码演示——数码管显示时分秒 引言 DS1302 是一款广泛使用的实时时钟 (RTC) 芯片&#xff0c;具有低功耗、内置…...

Preact:轻量级替代React的选择

Preact是一个轻量级的JavaScript库&#xff0c;它提供了与React相似的API&#xff0c;但体积更小&#xff0c;性能更优。Preact的核心理念是尽可能地保持与React的兼容性&#xff0c;同时去除不必要的部分&#xff0c;使其成为一个理想的替代品&#xff0c;尤其是在对性能和包大…...

全栈嵌入式C++、STM32、Modbus、FreeRTOS和MQTT协议:工业物联网(IIoT)可视化系统设计思路(附部分代码解析)

项目概述 随着工业4.0时代的到来&#xff0c;工业物联网&#xff08;IIoT&#xff09;在提高生产效率、降低运营成本和实现智能制造方面得到了广泛应用。本项目旨在开发一个全面的工业物联网监控系统&#xff0c;能够实时监测设备的温度、压力、振动和电流等参数&#xff0c;并…...

Greenplum数据库中的数据倾斜问题及处理方法

一、数据倾斜问题的原因 数据分布不均匀&#xff1a;当数据在表的分区或分片中不均匀分布时&#xff0c;会导致某些分区或分片的数据量较大&#xff0c;从而引发数据倾斜问题。连接键存在热点数据&#xff1a;如果连接操作中使用的键值存在热点数据&#xff0c;即某些键值出现…...

缓存设计理论

缓存设计理论是一个涉及多个方面的复杂主题&#xff0c;主要目标是优化数据访问速度&#xff0c;减少数据访问延迟&#xff0c;提高系统性能&#xff0c;并同时保持数据的一致性和系统的稳定性。以下是从几个关键方面对缓存设计理论的概述&#xff1a; 一、缓存的作用与目的 …...

IDEA-安装插件 驼峰下划线转换

第一步&#xff1a;安装 file-settings-plugins-在marketplace搜索“CamelCase”-点击安装 第二步&#xff1a;设置 file-settings-editor-camel_case 第三步&#xff1a;使用 选中想转换的遍历 使用快捷键 Alt Shift U...

乾坤: 微前端项目切换时样式闪动(从无样式变为正常样式需要等 css chunk 文件加载完成, 加载延时受网速影响)

背景: 点击基座项目页面左侧目录, 进入微前端子项目页面, 会有短暂的样式未加载效果一闪而过, 造成页面闪烁或更严重的其他样式错位问题 定位: 同事查了 qiankun git 项目的 issue: https://github.com/umijs/qiankun/issues/219 , 找到解决方案 解决: 项目 webpack 打包配…...

《电子元器件之固态电容》

固态电容全称是固态铝质电解电容&#xff0c;它与普通液态铝质电解电容的最大差别在于采用了不同的介电材料。液态铝电容介电材料为电解液&#xff0c;而固态电容的介电材料是固态的导电性高分子材料。 固态电容和液态电容&#xff0c;从外观上区分&#xff0c;就是固态电容顶…...

PLC 远程下载网关

一、 产品概述 SSF-BOX-100 是三石峰科技有限公司推出的工业级 PLC 远程下载网关&#xff0c;主 要用于 PLC 远程调试、程序上下载&#xff0c;为用户提供一种简单可靠的远程维护方案。 1.1 SGBOX 软件 SGBOX 软件是 SSF-BOX-100 网关的配套软件&#xff0c;可以查看设备状态…...

【Django】 读取excel文件并在前端以网页形式显示-安装使用Pandas

文章目录 安装pandas写views写urls安装openpyxl重新调试 安装pandas Pandas是一个基于NumPy的Python数据分析库&#xff0c;可以从各种文件格式如CSV、JSON、SQL、Excel等导入数据&#xff0c;并支持多种数据运算操作&#xff0c;如归并、再成形、选择等。 更换pip源 pip co…...

自动控制:带死区的PID控制算法

带死区的PID控制算法 在计算机控制系统中&#xff0c;为了避免控制动作过于频繁&#xff0c;消除因频繁动作所引起的振荡&#xff0c;可采用带死区的PID控制。带死区的PID控制通过引入一个死区&#xff0c;使得在误差较小的范围内不进行控制动作&#xff0c;从而减少控制系统的…...

橙单后端项目下载编译遇到的问题与解决

今天下载orange-admin项目&#xff0c;不过下载下来运行出现一些问题。 1、涉及到XMLStreamException的几个类都出现下面的错误 The package javax.xml.stream is accessible from more than one module: <unnamed>, java.xml ctrl-shift-t 可以找到这个引入是哪些包里…...

EasyExcel 初使用—— Java 实现多种写入 Excel 功能

前言 大家好&#xff0c;我是雪荷。之前有一篇博客&#xff08;EasyExcel 初使用—— Java 实现读取 Excel 功能_java easyexcel.read-CSDN博客&#xff09;介绍了 Java 如何读取 Excel 表格&#xff0c;那么此篇博客就和大家介绍下 Java 如何利用 EasyExcel 写入 Excel。 Ea…...

MySQL 和 SQL Server 中的连表更新 UPDATE JOIN 写法比较

MySQL 和 SQL Server 中的连表更新 UPDATE JOIN 写法比较 一、前言1. MySQL 写法1.1 解释 2. SQL Server 写法2.1 解释 二、总结 一、前言 在关系型数据库管理系统&#xff08;RDBMS&#xff09;中&#xff0c;使用 UPDATE 语句进行表格更新是非常常见的操作。特别是当需要根据…...

手把手教你FL Studio 24.1.1.4234中文破解安装激活图文激活教程

在数字化音乐制作的浪潮中&#xff0c;FL Studio 24.1.1.4234中文破解版的发布无疑又掀起了一股新的热潮。这款由Image-Line公司开发的数字音频工作站&#xff08;DAW&#xff09;软件&#xff0c;以其强大的功能和易用的界面&#xff0c;赢得了全球无数音乐制作人的青睐。本文…...

使用Spring Boot与Spire.Doc实现Word文档的多样化操作

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 使用Spring Boot与Spire.Doc实现Word文档的多样化操作具有以下优势&#xff1a; 强大的功能组合&#xff1a;Spring Boot提供了快速构建独立和生产级的Spring应用程序的能力&#xff0c;而Spire.Doc则…...

从食堂采购系统源码到成品:打造供应链采购管理平台实战详解

本篇文章&#xff0c;笔者将详细介绍如何从食堂采购系统的源码开始&#xff0c;逐步打造一个完备的供应链采购管理平台&#xff0c;帮助企业实现采购流程的智能化和高效化。 一、需求分析与规划 一般来说&#xff0c;食堂采购系统需要具备以下基本功能&#xff1a; 1.供应商…...

在window将Redis注册为服务

将redis注册为系统服务&#xff0c;开启自启动 安装服务 默认注册完之后会自动启动&#xff0c;在window中的服务看一下&#xff0c;如果启动类型为自动&#xff0c;状态是自动运行则启动完成。如果是手动&#xff0c;需要右键属性调整为自动&#xff0c;在点击启动&#xff0c…...

PHP商城案例

http://www.e9933.com/...

Linux:bash在被调用时会读取哪些启动文件?

(本文基于5.1-6ubuntu1.1版本的bash) bash在被调用时会读取哪些启动文件&#xff1f;要回答这个问题&#xff0c;首先要弄清楚两个概念&#xff1a;login shell和interactive shell。 login shell login shell是指这样的shell&#xff1a; 第一个命令行参数&#xff08;进程…...

帆软FineReport之替换函数

在日常帆软FineReport中经常会使用字符串替换函数&#xff0c;记录下来&#xff0c;方便备查。 一、字符串替换 第一种、指定文本替换 使用SUBSTITUTE函数&#xff0c;语法如下所示 SUBSTITUTE(text&#xff0c;old_text&#xff0c;new_text&#xff0c;instance_num) 字段…...

Redis的应用场景及类型

目录 一、Redis的应用场景 1、限流 2、分布式锁 3、点赞 4、消息队列 二、Redis类型的命令及用法 1、String类型 2、Hash类型 3、List类型 4、Set类型 5、Zset类型 6、Redis工具类 Redis使用缓存的目的就是提升读写性能 实际业务场景下&#xff0c;我们就可以把 Mys…...

【图像处理】不智能的目标识别

目录 目标识别的划分 识别入门 概念学习 滤波 模版 阈值化 形态学操作 开运算 闭运算 编程语言 示例 大家有没有想过在没有人工智能或者说没有机器学习的的时候&#xff0c;计算机是怎么做目标识别的&#xff1f; 计算机视觉时至今日也是急需人才的领域&…...

《500 Lines or Less》(5)异步爬虫

https://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html ——A. Jesse Jiryu Davis and Guido van Rossum 介绍 网络程序消耗的不是计算资源&#xff0c;而是打开许多缓慢的连接&#xff0c;解决此问题的现代方法是异步IO。 本章介绍一个简单的网络爬虫&a…...

Transformer!自注意力机制的高层级理解Attention Is All You Need!

背景 最近在不断深入学习LLM的相关内容&#xff0c;那么transformer就是一个绕不开的话题。然而对于一个NLP门外汉来说&#xff0c;论文看得是真头疼&#xff0c;总览全网&#xff0c;我们似乎缺少一个至高而下的高层级理解。所以本文就来弥补此方面的缺失~ 本文并不讲解有关…...

关于使用Postman在请求https网址没有响应,但是用浏览器有响应的问题解决

一、问题描述 使用postman调用正式环境的公共接口&#xff0c;无需鉴权&#xff0c;但是产生了返回状态码200&#xff0c;但是data中却无数据&#xff0c;如下 {"code": "200","message": "操作成功","data": {"qr_c…...

【React 】开发环境搭建详细指南

文章目录 一、准备工作1. 安装 Node.js 和 npm2. 选择代码编辑器 二、创建 React 项目1. 使用 Create React App2. 手动配置 React 项目 三、集成开发工具1. ESLint 和 Prettier2. 使用 Git 进行版本控制 在现代前端开发中&#xff0c;React 是一个非常流行的框架&#xff0c;用…...

结构体笔记

结构体 C语言中的数据类型&#xff1a; 基本数据类型&#xff1a;char/int/short/double/float/long 构造数据类型&#xff1a;数组&#xff0c;指针&#xff0c;结构体&#xff0c;共用体&#xff0c;枚举 概念&#xff1a; 结构体是用户自定义的一种数据类型&#xff0c…...

Elasticsearch:Golang ECS 日志记录 - zerolog

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松地将日志格式化为与 ECS 兼容的 JSON。在本教程中&#xff0c;我将详述如何 编码器以 JSON 格式记录日志&#xff0c;并以 ECS 错误格式处理错误字段的记录。 默认情况下&#xff0c;会添加以下字段&…...

Ip2region - 基于xdb离线库的Java IP查询工具提供给脚本调用

文章目录 Pre效果实现git clone编译测试程序将ip2region.xdb放到指定目录使用改进最终效果 Pre OpenSource - Ip2region 离线IP地址定位库和IP定位数据管理框架 Ip2region - xdb java 查询客户端实现 效果 最终效果 实现 git clone git clone https://github.com/lionsou…...

研发管理革命:探索顶尖的工时系统选择

国内外主流的10款研发工时管理系统对比&#xff1a;PingCode、Worktile、无鱼项目工时系统、Toggl Track、泽众ALM、Asana、Jira、GitHub、Trello、TrackingTime。 在研发团队中&#xff0c;工时管理常常成为效率瓶颈&#xff0c;尤其是在资源分配和项目进度跟踪方面。选择合适…...

微服务-MybatisPlus下

微服务-MybatisPlus下 文章目录 微服务-MybatisPlus下1 MybatisPlus扩展功能1.1 代码生成1.2 静态工具1.3 逻辑删除1.4 枚举处理器1.5 JSON处理器**1.5.1.定义实体****1.5.2.使用类型处理器** **1.6 配置加密&#xff08;选学&#xff09;**1.6.1.生成秘钥**1.6.2.修改配置****…...

【python_将一个列表中的几个字典改成二维列表,并删除不需要的列】

def 将一个列表中的几个字典改成二维列表(original_list,headersToRemove_list):# 初始化一个列表用于存储遇到的键&#xff0c;保持顺序ordered_keys []# 遍历data中的每个字典&#xff0c;添加其键到ordered_keys&#xff0c;如果该键还未被添加for d in original_list:for …...

IDEA的pom.xml显示ignored 的解决办法

问题&#xff1a; idea中创建Maven module时&#xff0c;pom.xml出现ignored。 原因&#xff1a; 相同名称的module在之前被创建删除过&#xff0c;IDEA会误以为新的同名文件是之前删除掉的&#xff0c;将这个新的module的pom.xml文件忽略掉显示ignored. 解决&#xff1a; 在…...

2. 卷积神经网络无法绕开的神——LeNet

卷积神经网络无法绕开的大神——LeNet 1. 基本架构2. LeNet 53. LeNet 5 代码 1. 基本架构 特征抽取模块可学习的分类器模块 2. LeNet 5 LeNet 5: 5 表示的是5个核心层&#xff0c;2个卷积层&#xff0c;3个全连接层.核心权重层&#xff1a;卷积层、全连接层、循环层&#xff…...