干货 | 携程酒店基于血缘元数据的数据流程优化实践

news2024/11/13 16:31:43

作者简介

九号,携程数据技术专家,关注数据仓库架构、数据湖、流式计算、数据治理。

一、背景

元数据MetaData狭义的解释是用来描述数据的数据,广义的来看,除了业务逻辑直接读写处理的那些业务数据,所有其它用来维持整个系统运转所需的信息/数据都可以叫作元数据。比如数据表格的Schema信息,任务的血缘关系,用户和脚本/任务的权限映射关系信息等等。

在数据仓库的建设质量的评估中,一个必不可少的评价指标就是数据产出的及时性,特别是对于P0级别的流程,及时性指标的好坏一方面决定了下游应用方能否准时地获取所需的业务指标,直接影响到业务的工作效率;另一方面也反映了相应指标的数据架构的合理程度。

数据及时性,顾名思义就是测试数据需要按时产出。及时性重点关注的三个要素是:定时调度时间、数据任务优先级以及数据产出deadline。其中任务的优先级决定了它获取数据计算资源的多少,影响了任务执行时长。数据deadline则是数据最晚产出时间的统一标准,需要严格遵守。这三要素中,属于业内统一认知且在质量保障阶段需要重点关注的是:数据deadline,这也是我们优化数据流程产出的最终评判标准。

二、问题

上述部分已经阐述了数据及时性的重要性和评判标准,在通常情况下,为了提升数据及时性,需要投入人力对重点数据流程进行优化。

但针对数据仓库业界来讲,对于一个重要的数据结果,其上游可能存在几十个层级,数百个不同的数据处理任务,从最初的数据到最终的结果,数据流转过程极其复杂,传统的通过人工逐个排查的方式去定位影响数据流程产出的问题节点,存在如下的三项缺点:

  1. 1)覆盖的任务范围有限;

  2. 2)效率低下,判断标准不统一,判定准确率不高;

  3. 3)无法形成知识沉淀,依赖于个人能力;

如果数据流程未能充分优化,一方面会存在数据结果产出时间不稳定,影响数据的及时性;另一方面也会造成计算资源和存储资源的浪费,并且也不易于后续维护。

三、方案

为了避免上述的问题,提升数据流程优化的效率和质量,我们采用了从血缘元数据出发的方案。在数仓任务的执行中,都会依赖于一个调度系统组件,目前业内通用的是以DAG为核心的工作流系统,数据流程中的每个任务都会设置定时执行或者配置上游依赖,这些设置的上游依赖就是我们方案中需要的调度血缘的元数据。

基于上述的血缘数据,我们的方案中需要实现以下两个功能:

  • 基于任务之间的血缘关系生成所有上游任务的层级依赖数据

以调度系统本身的元数据作为出发点,调度系统自身的元数据就包含了一个任务的上游和下游依赖,基于这个数据,通过层级递归的扫描,就可以得到指定根节点任务的所有上游任务的层级依赖结果。

  • 设计合理的算法定位到有问题的任务

在上一步骤得到指定根节点任务的所有上游任务的层级依赖结果后,通过如下三种逻辑定位有问题的任务:

1)定位过度分层:JobA的下游只有JobA1在使用,且JobA是JobA1产出的关键路径,也即JobA1的产出时间由JobA决定,那么此种情形下,我们可以把JobA的逻辑合并到JobA1,这样一方面可以减少大数据任务的启动消耗时间和获取资源的时间;另一方面也可以减少依赖层级,方便后续维护。

2)定位重复依赖:在较复杂的数据流程中,会出现如下的情况:JobB2依赖JobB1和JobB,而JobB1也同时依赖JobB,简化后的情况如下图:

c710c1b571d618ea46cc6a48128c455a.jpeg

此时我们就可以检查JobB2的逻辑,考虑任务内容中涉及到JobB的逻辑合并到JobB1,从而可以实现流程依赖和代码逻辑的合并优化,降低维护成本,提升整体产出时间。

3)定位关键路径:在完成上述两个步骤后,整个流程从结构上已经基本没问题,如果要进一步优化产出时间,需要针对特定任务进行调优,此时可以基于已有的上游层级依赖数据,计算得到每个层级的最晚产出的任务Id,这些任务Id串联在一起就是影响整个流程产出的关键路径,然后对关键路径上的任务进行调优。

上述方案的整体设计图如下:

065b50911ac61360518590709d0ef644.png

四、案例

在对酒店订单明细宽表的优化过程中,基于前期的元数据建设,主要的工作内容分为以下三个步骤:

1)调度优化。调度优化的出发点是合理分配同步任务的优先级,将非核心任务的数据同步延后。从而降低0到2点,酒店订单宽表核心流程执行期间的集群资源压力。

2)模型优化。在这一步骤中,我主要是从两个方向出发:

  • 减少跨层级重复依赖,避免相似逻辑代码的出现,提升数据结果的复用能力。

  • 避免滥用分层,对冗余的分层、中间表进行合并,减少任务调度链路的层级,减少Job数量,节省Job的启动时间。

3)任务优化。通过调整参数设置、SQL逻辑优化的方式对具体任务进行优化需要优化的任务。这一步骤的工作也就是传统认知中的任务优化。

其中第二步和第三步就是基于本文中的方案快速定位到问题任务,整体优化后的效果如下:

  • 酒店订单明细宽表的7日平均产出时间由2:51提前到1:36,提升45%

  • 全流程任务总数量从211个降到145个,减少32%

  • 可控上游依赖任务(非外BU任务)总数量由180降到117,减少35%

  • 关键链路调度层级由11层减少到6层,且其中两层是外部BU任务

五、展望

基于元数据和血缘建设,本方案后续有如下三点可以深入优化:

  • 跨多层判断重复依赖。由于上述实际案例中的酒店订单流程相对不复杂,在仅进行一层的重复依赖判断后,就已经达到了比较满意的优化效果,所以为继续进行多层重复依赖的判断,但从血缘结构上是可以支持多层判断的。

  • 定位多Job中重复/相似逻辑。多个任务依赖同一个上游任务,可以人工进行判断是否存在可合并的重复/相似逻辑;这一点如果要提升效率,需要再结合表的血缘关系一起判断。

  • 多数据流程的优化。在数仓的工作中,一个主题域产出的结果表,通常会存在多张,在进行整个主题域流程的优化或者重构中,也可以利用本案的思想,结构化进行优化工作,提升效率。

【推荐阅读】

  • 贝叶斯结构模型在全量营销效果评估的应用

  • 节约60%开发工时,离在线一体化数仓系统在携程旅游的落地实践

  • 提速10倍+,StarRocks 指标平台在携程火车票的实践

  • 携程火车票基于因果推断的业务实践

    7f5ad5980879959df41cb138981a1199.jpeg

     “携程技术”公众号

      分享,交流,成长

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

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

相关文章

C语言之字符串函数

C语言之字符串函数 文章目录 C语言之字符串函数1. strlen的使用和模拟实现1.1 strlen的使用1.2 strlen的模拟实现 2. strcpy的使用和模拟实现2.1 strcpy的使用2.2 strncpy的使用2.3 strcpy的模拟实现 3. strcat的使用和模拟实现3.1 strcat的使用3.2 strncat3.3 strcat的模拟实现…

深度学习中的Dropout正则化:原理、代码实现与实际应用——pytorch框架下如何使用dropout正则化

目录 引言 一、导入包 二、dropout网络定义 三、创建模型,定义损失函数和优化器 四、加载数据 五、训练train 六、测试 引言 dropout正则化的原理相对简单但非常有效。它在训练神经网络时,以一定的概率(通常是在0.2到0.5之间&#xff…

基于C#实现赫夫曼树

赫夫曼树又称最优二叉树,也就是带权路径最短的树,对于赫夫曼树,我想大家对它是非常的熟悉,也知道它的应用场景,但是有没有自己亲手写过,这个我就不清楚了,不管以前写没写,这一篇我们…

GeoTrust SSL数字安全证书介绍

一、GeoTrust OV证书的介绍 GeoTrust OV证书是由GeoTrust公司提供的SSL证书,它是一种支持OpenSSL的数字证书,具有更高的安全性和可信度。GeoTrust是全球领先的网络安全解决方案提供商,为各类用户提供SSL证书和信任管理服务。GeoTrust OV证书…

Docker+ Jenkins+Maven+git自动化部署

环境:Centos7 JDK1.8 Maven3.3.9 Git 2.40 Docker 20.10.17 准备工作: 安装Docker Centos7默认的yum安装的docker是1.13,版本太低,很多镜像都要Docker版本要求,升级Docker版本。 卸载已安装Docker: yum …

快速在WIN11中本地部署chatGLM3

具体请看智谱仓库github:GitHub - THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 或者Huggingface:https://huggingface.co/THUDM/chatglm3-6b 1. 利用Anaconda建立一个虚拟环境: conda create -n chatglm3 pyt…

U盘启动制作工具Rufus

U盘启动制作工具Rufus 下载U盘启动制作工具Rufus,进入Rufus官网:http://rufus.ie/en/,打开之后往后滑动,找到download即可点击下载。 需要插入U盘 首先需要插入U盘,如果U盘有重要文件一定要备份,然后右键…

DB2中实现数据字段的拼接(LISTAGG() 与 xml2clob、xmlagg)

DB2中实现数据字段拼接(LISTAGG 与 xml2clob、xmlagg) 1. 使用函数LISTAGG()1.1 同oracle实现方式1.2 DB2中使用LISTAGG()1.2.1 关于DB2版本1.2.2 数据准备1.2.3 代码实现 2 解决DB2中关于 LISTAGG() 超长问题2.1 使用xmlagg xmlelement2.2 将xml标签去…

【论文阅读笔记】Smil: Multimodal learning with severely missing modality

Ma M, Ren J, Zhao L, et al. Smil: Multimodal learning with severely missing modality[C]//Proceedings of the AAAI Conference on Artificial Intelligence. 2021, 35(3): 2302-2310.[开源] 本文的核心思想是探讨和解决多模态学习中的一个重要问题:在训练和测…

SpringBoot整合Redis,redis连接池和RedisTemplate序列化

SpringBoot整合Redis 1、SpringBoot整合redis1.1 pom.xml1.2 application.yml1.3 配置类RedisConfig,实现RedisTemplate序列化1.4 代码测试 2、SpringBoot整合redis几个疑问?2.1、Redis 连接池讲解2.2、RedisTemplate和StringRedisTemplate 3、RedisTemp…

DALSA.SaperaLT.SapClassBasic无法加载,试图加载格式不正确的程序,c#

情景:用c#wpf写DALSA线扫相机的项目,生成时不报错,运行到DALSA相关的代码就报错找不到dll(DALSA的技术支持没给到任何支持 ) 一.根据框架选择dll 如果是.net framework框架(比如说.net480)&am…

【LeetCode刷题-链表】--61.旋转链表

61.旋转链表 方法: 记给定的链表的长度为n,注意当向右移动的次数k>n时,仅需要向右移动k mod n次即可,因为每n次移动都会让链表变为原状 将给定的链表连接成环,然后将指定位置断开 /*** Definition for singly-linked list.*…

【OJ比赛日历】快周末了,不来一场比赛吗? #11.25-12.01 #17场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注! 以下信息仅供参考,以比赛官网为准 目录 2023-11-25(周六) #9场比赛2023-11-26…

Linux(Centos)上使用crontab实现定时任务(定时执行脚本)

场景 Windows中通过bat定时执行命令和mysqldump实现数据库备份: Windows中通过bat定时执行命令和mysqldump实现数据库备份_mysqldump bat-CSDN博客 上面讲windows中使用bat实现定时任务的方式,如果是在linux上可以通过crontab实现。 cron是服务名称。…

案例018:基于微信小程序的实习记录系统

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

Java核心知识点整理大全10-笔记

往期快速传送门: Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客文章浏览阅读9w次,点赞7次,收藏7次。Java核心知识点整理大全https://blog.csdn.net/lzy302810/article/details/132202699?spm1001.2014.3001.5501 Java核心知识点整理…

服务器流量包扣减规则

服务器买的流量包,一般指的是上行带宽,下行通常是不限的 上行和下行是针对服务器而言的 客户端上传文件给服务器,对服务器而言它是在下载,所以对服务器而言他是用的下行带宽(下行流量) 客户端从服务器下载文件,对服务器而言它是在上传,所以对服务器而言他是用的上行带宽(上行…

HTB Napper WriteUp

Napper 2023年11月12日 14:58:35User Nmap ➜ Napper nmap -sCV -A -p- 10.10.11.240 --min-rate 10000 Starting Nmap 7.80 ( https://nmap.org ) at 2023-11-12 13:58 CST Nmap scan report for app.napper.htb (10.10.11.240) Host is up (0.15s latency). Not shown: …

Linux文件查看命令

1.cat加上文件名 (因为所有文件内容都会打印到屏幕上,所以内容少时使用这个,总不能用cat来定义一本小说) 3.往文件中写入数据——cat加上>(重定向符)加上文件名,写完之后,按键 cat原本是把…

设计模式——行为型模式(一)

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行…