数据湖在爱奇艺数据中台的应用

01

   我们眼中的数据湖

作为爱奇艺的数据中台团队,我们的核心任务是管理和服务公司内的大量数据资产。在实施数据治理的过程中,我们不断吸收新的理念,引入尖端的工具,以精细化我们的数据体系管理。
“数据湖”作为近年来数据领域广泛热议的概念,其技术层面也受到了业界的广泛关注。我们的团队对相关数据湖的理论和实践进行了深入研究,我们认为,数据湖不仅是一种治理数据的全新视角,更是一种集成和处理数据的极具前景的技术。

02

   数据湖是一种数据治理的思想

实施数据湖的主旨,在于提供一个高效的存储和管理方案,将数据的易用性和可用性提升至新的高度。

4bedcfb2609310c8875e1623164ed848.png

数据湖作为一种创新的数据治理理念,其价值主要体现在以下两方面:

1. 能够全面储存所有数据,无论这些数据是否正在被使用,或是否暂时无法使用,都可以确保在需要时能轻松找到所需信息,提高工作效率;

 2. 数据湖中的数据经过了科学的管理和组织,使得用户可以更加方便地自助查找和使用数据。这种管理模式大大减少了数据工程师的参与程度,用户可以自行完成数据查找与使用的任务,从而节省了大量的人力资源

为了更有效地管理各类数据,数据湖根据不同的特性和需求将数据划分为四个核心领域,分别为原始区、产品区、工作区和敏感区:

原始区:这一区域专注于满足数据工程师和专业数据科学家的需求,其主要目的是存储未经处理的原始数据。当必要时,也可以对其进行局部开放,以支持特定的访问需求。

产品区:产品区内的数据多数经过数据工程师、数据科学家和业务分析师的加工和处理,以确保数据的标准化和高度治理。这类数据通常被广泛应用于业务报告、数据分析以及机器学习等领域。

工作区:工作区域主要用于存储各类数据工作者生成的中间数据。在这里,用户需自行负责管理其数据,以支持灵活的数据探索和实验,以满足不同用户群体的需求。

敏感区:敏感区专注于安全性,主要用于存储敏感数据,如个人身份信息、财务数据以及法律合规数据等。这一领域受到最高级别的访问控制和安全保护。

通过这一划分方式,数据湖能够更好地管理不同类型的数据,同时提供便捷的数据访问和利用,以满足各种需求。

03

   数据湖的数据治理思想在数据中台的应用

数据中台的目标是解决由于数据激增和业务扩大而引发的统计口径不一致、重复开发、指标开发需求响应慢、数据质量低下和数据成本高等问题。

数据中台和数据湖的目标有一致性。通过结合数据湖的理念,对数据中台的数据体系和整体架构进行了优化升级。

在数据中台建设的初级阶段,我们对公司的数据仓库体系进行了整合,对业务进行了深入研究,整理了已有的字段和维度信息,归纳出了一致性维度,并建立了统一的指标体系,制定了数据仓库建设规范。根据该规范,我们构建了统一数据仓库的原始数据层(ODS)、明细数据层(DWD)、聚合数据层(MID),并建立了设备库,其中包括累积设备库和新增设备库。在统一数据仓库的基础上,数据团队根据不同的分析统计方向和业务需求,构建了主题数据仓库和业务市场。主题数据仓库和业务市场包括进一步处理的明细数据、聚合数据以及应用层数据表,数据应用层使用这些数据向用户提供不同的服务。

dc4d8b33d2b0af4a2bc329f531393954.png

在统一的数据仓库体系中,原始数据层及以下是不对外开放的,用户只能使用数据工程师处理加工后的数据,因此难免会造成一些数据细节的损失。在日常工作中,常常会有具备数据分析能力的用户希望访问底层原始数据,进行个性化的分析或者问题排查。

而数据湖的数据管理理念能够有效地解决这个问题。在引入数据湖的数据治理思想后,我们对再次已有的数据资源进行了梳理和整合,对数据的元数据进行了丰富和扩充,并构建了一个专门用于管理元数据中心的数据元数据中心。

faa56c838c85528f2e31ca3d05953f8a.png

在引入数据湖理念进行数据治理后,我们将原始数据层以及其他原始数据(例如原始日志文件)归置到原始数据区,有数据处理能力的用户可以申请权限使用该区域的数据。

统一数仓的明细层、聚合层以及主题数仓、业务集市归置在产品区,这些数据已经经过数据团队的数据工程师加工处理作为最终数据成品提供给用户使用,该区域的数据经过数据治理,因此数据质量有所保障。

我们还为敏感数据划定了敏感区,重点管控访问权限。

日常由用户及数据开发人员产生的临时表或个人表归置在临时区,这些数据表由用户自行负责,可以有条件的开放给其他用户使用。

通过元数据中心维护各数据的元数据,包含表信息、字段信息以及字段所对应的维度和指标。同时,我们还维护数据血缘,包括表级别和字段级别的血缘关系。

通过数据资产中心维护数据的资产特性,包括针对数据级别、敏感性和权限的管理。

为方便用户更好地自助使用数据,我们在应用层提供了数据图谱作为数据目录供用户查询数据,包括数据的用途、维度、指标、血缘等元数据。同时,该平台也可作为权限申请的一个入口。

此外,我们还提供自助分析平台为数据用户提供自助分析的能力。

在优化数据体系的同时,我们也结合数据湖思想,对数据中台架构进行了升级。

97652364c1695fc2574d4e307e3d8eb9.png

底层为数据层,包括各种数据来源,如Pingback数据,主要用于收集用户行为,业务数据则存储在各种关系型数据库和NoSQL数据库。这些数据通过传输层的不同收集工具,存储在存储层。

数据层之上是存储层,主要基于HDFS这个分布式文件系统来存储原始文件。其他结构或非结构数据则存储在Hive、Iceberg或HBase中。

再往上是计算层,主要使用离线引擎Pilot驱动Spark或Trino进行离线计算,同时使用调度引擎Gear离线工作流引擎进行定时工作流调度。而RCP实时计算平台则负责调度流式计算。经过几轮迭代,目前流式计算主要使用Flink作为计算引擎。

在计算层之上的开发层,通过对计算层和传输层的各个服务模块进一步封装,提供了用来开发离线数据处理工作流、对数据进行集成,开发实时处理工作流,开发机器学习工程实现等完成开发工作的工具套件和中间服务。其中数据湖平台对数据湖中各个数据文件与数据表的信息进行管理,数仓平台则对数仓数据模型、物理模型、维度、指标等信息进行管理。

同时,我们在纵向提供多种管理工具和服务,比如投递管理工具管理Pingback埋点的规范、字段、字典、投递时机等元信息;元数据中心、资源中心等模块用来维护数据表或数据文件的元信息,以及保障数据安全;数据质量中心和链路治理平台则监控数据质量和数据链路生产情况,及时通知相关团队进行保障,结合已有预案对线上问题和故障进行快速响应。

底层服务由云服务团队提供私有云和公有云支持。

架构上层则提供数据图谱作为数据目录供用户寻找所需要的数据。此外,我们提供魔镜、北斗等自助应用,满足不同层次的用户自助进行数据工作的需求。

经过改造后的整个架构体系,数据的集成和管理更加灵活且全面。我们通过优化自助工具降低用户使用门槛,满足不同层次用户的需求,提高数据使用效率,提升数据价值。

04

   数据湖技术在数据中台的应用

广义上,数据湖是一种数据治理的理念,狭义上,数据湖也指代一种数据处理技术。

数据湖技术涵盖了数据表的存储格式以及数据在入湖后的处理技术。

数据湖中的存储解决方案,业界主要有三种:Delta Lake、Hudi和Iceberg,三者对比如下:

47174f4d90f3bc64db31e96a0011c693.png

在综合考量后,我们选择了Iceberg作为数据表的存储格式。

Iceberg是一种表存储格式,组织底层文件系统或对象存储的数据文件。

以下是Iceberg与Hive的主要对比:

3b57a4c9261c7d315e0c0d4ca937615e.png

与Hive表相比,Iceberg表具有显著的优势,因为它能够更好地支持行级更新,数据时效性可以提高到分钟级别。这在数据处理中具有重要意义,因为数据及时性的提升可以极大地改进数据处理ETL的效率。

因此,我们可以方便地对现有的Lambda架构进行改造,实现流批一体架构:

e44da99acf873a1c46c82062ab2c2ed2.png

在引入数据湖技术之前,我们采用离线处理与实时处理相结合的方式,提供离线数据仓库和实时数据仓库。

58fd5c326c01efce501dd4952cc903c2.png

全量数据通过传统的离线解析处理方式,构建成为数仓数据,并以Hive表的形式存储在集群中。对于实时性要求高的数据,我们单独通过实时链路生产,并以Kafka中的Topic的形式提供给用户使用。

然而,这种架构存在以下问题:

  • 实时和离线两条通路需要维护两套不同的代码逻辑。当处理逻辑发生变化时,实时和离线两条通路都需要同时更新,否则会出现数据不一致的情况。

  • 离线链路的小时级更新以及1小时左右的延迟,使得在00:01的数据可能在02:00才能查询到。对于部分实时性要求较高的下游业务来说,这是无法接受的,因此需要支持实时链路。

  • 虽然实时链路的实时性可以达到秒级,但其成本较高。对于大多数使用者来说,五分钟级别的更新已经足够满足需求。同时,Kafka流的消费不如直接操作数据表方便。

针对这些问题,通过使用Iceberg表与流批一体化的数据处理方式,可以较好地解决。

5b3633516d925f9c1f7e0a312eaaf3d6.png

优化过程中,我们主要对ODS层和DWD层表进行Iceberg改造,并将解析和数据处理加工重构为Flink任务。

为确保改造过程中,数据生产的稳定性和准确性不受影响,我们采取以下措施:

1. 首先从非核心数据着手进行切换。根据实际业务情况,我们以QOS投递和自定义投递作为试点。

2. 通过对离线解析逻辑进行抽象处理,形成统一的Pingback解析入库SDK,实现了实时与离线的统一部署,使代码更加规范化。

3. Iceberg表以及新的生产流程部署完成后,我们进行了两个月双链路并行运行,并对数据进行常规化对比监测。

4. 确认数据和生产都没有问题后,我们对上层进行无感知切换。

5. 对于核心数据相关的启动、播放数据,我们将在整体验证稳定后再进行流批一体改造。

改造后,收益如下:

1. qos和自定义投递数据链路整体实现了近实时化。小时级延迟的数据达到五分钟级更新。

2. 除特殊情况外,流批一体链路已可以满足实时需求。因此,我们可以下线与QOS和自定义相关的既有实时链路和离线解析链路,从而节省资源。

通过对数据处理的改造,未来一段时间内,我们的数据链路会如下图所示:

380858dc0203bc10623ae7981405d4ee.png

05

 后续规划

对于数据湖在数据中台应用的后续规划,主要从两方面:

从架构层面,会继续细化各个模块的开发,让数据中台提供的数据与服务更加全面,更加易用,让不同的用户都可以方便地自助使用;

在技术层面,我们将继续对数据链路进行流批一体改造,同时继续积极引入合适的数据技术,提高数据的生产和使用效率,降低生产成本。

参考文献

1. Dixon, James (14 October 2010). "Pentaho, Hadoop, and Data Lakes". James Dixon’s Blog.

2. Iceberg: A modern table format for big data

3. Apache Iceberg: An Architectural Look Under the Covers

4. Iceberg Table Spec

5. Apache Flink

6. Alex Gorelik. The Enterprise Big Data Lake.

也许你还想看

爱奇艺数据湖实战

爱奇艺数据湖实战 - 广告数据湖应用

爱奇艺数据湖实战 - 基于数据湖的日志平台架构演进

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

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

相关文章

机器学习之正则化与验证提高模型泛化

文章目录 正则化(Regularization):验证(Validation): 正则化和验证是机器学习中重要的概念,它们帮助提高模型的性能和泛化能力。让我详细介绍一下这两个概念: 正则化(Re…

【完美世界】天仙书院偷食也就算了,竟然还偷院长的孙女,美滋滋

Hello,小伙伴们,我是小郑继续为大家深度解析完美世界系列。 齐道临从天仙书院劫走石昊,为何天仙书院不仅没去找他麻烦,反而给他一块随意进入渡劫神莲池的令牌?石昊来到上界也是闹出不小的动静,先是在恶魔岛的神碑留名&…

LeetCode 75-02:字符串的最大公因子

前置知识:使用欧几里得算法求出最大公约数 func gcdOfStrings(str1 string, str2 string) string {if str1str2 ! str2str1 {return ""}return str1[:gcd(len(str1), len(str2))] }func gcd(a, b int)int{if b 0{return a}return gcd(b, a%b) }

求组合数(递归版)(杨辉三角形)

description 请编写递归函数&#xff0c;求组合数。 函数原型 double Cmb(int x, int y); 说明&#xff1a;x 和 y 为非负整数&#xff0c;且 x≥y&#xff0c;函数值为组合数 C x y ​ 。 裁判程序 #include <stdio.h> double Cmb(int x, int y); int main() { int m…

使用Python+Flask/Moco框架/Fiddler搭建简单的接口Mock服务

一、Mock测试 1、介绍 mock&#xff1a;就是对于一些难以构造的对象&#xff0c;使用虚拟的技术来实现测试的过程mock测试&#xff1a;在测试过程中&#xff0c;对于某些不容易构造或者不容易获取的对象&#xff0c;可以用一个虚拟的对象来代替的测试方法接口mock测试&#x…

JPA的注解@Field指定为Keyword失败,导致查询不到数据

一、背景 使用 jpa 对es操作&#xff0c;查询条件不生效&#xff0c;需求是批量查询课程编号。说白了&#xff0c;就是一个In集合的查询。在es里&#xff0c;如果是精准匹配是termQuery&#xff0c;比如&#xff1a; queryBuilder.filter(QueryBuilders.termQuery(“schoolId…

全国职业技能大赛云计算--高职组赛题卷①(容器云)

全国职业技能大赛云计算--高职组赛题卷①&#xff08;容器云&#xff09; 第二场次题目&#xff1a;容器云平台部署与运维任务1 Docker CE及私有仓库安装任务&#xff08;5分&#xff09;任务2 基于容器的web应用系统部署任务&#xff08;15分&#xff09;任务3 基于容器的持续…

ARM Cortex-M内核中系统堆栈

文章目录 有无OS的栈结构区别&#xff1a;裸机的任务栈结构带FreeRTOS操作系统的任务栈 ARM的寄存器有哪些特殊寄存器有哪些 关于FreeRTOS中的SP寄存器栈操作【压栈与弹栈的操作】一般函数嵌套调用时sp指针的变化Cortex-M内核的MSP与PSP作用 有无OS的栈结构区别&#xff1a; 裸…

【List篇】LinkedList 详解

目录 成员变量属性构造方法add(), 插入节点方法remove(), 删除元素方法set(), 修改节点元素方法get(), 取元素方法ArrayList 与 LinkedList的区别Java中的LinkedList是一种实现了List接口的 双向链表数据结构。链表是由一系列 节点(Node)组成的,每个节点包含了指向 上一个…

第9章 【MySQL】InnoDB的表空间

表空间 是一个抽象的概念&#xff0c;对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为 表名.ibd 的实际文件。大家可以把表空间想象成被切分为许许多多个 页 的池子&#xff0c;当我…

队列(JAVA)

队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出的性质。 入队列&#xff1a;进行插入操作的一端称为队尾 出队列&#xff1a;进行删除操作的一端称为队头 在JAVA中队列和栈不同Stack是一个类&a…

线性代数的本质——几何角度理解

B站网课来自 3Blue1Brown的翻译版&#xff0c;看完醍醐灌顶&#xff0c;强烈推荐&#xff1a; 线性代数的本质 本课程从几何的角度翻译了线代中各种核心的概念及性质&#xff0c;对做题和练习效果有实质性的提高&#xff0c;下面博主来总结一下自己的理解 1.向量的本质 在物…

ElasticSearch(二)

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c;…

Hadoop的HDFS高可用方案

一、Hadoop高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用&#xff0c;两者的实现基本类似&#xff0c;但 HDFSNameNode 对数据存储及其一致性的要求比 YARN ResourceManger 高得多&#xff0c;所以它的实现也更加复杂 1、HDFS系统高可用简介…

uniapp 离线打包 plus.runtime.install 安装页面不弹起

uniapp 离线打包 plus.runtime.install 安装页面不弹起 updateVersion(webview : any, eventTitle : string, eventContent : string) {const loading plus.nativeUI.showWaiting(准备下载);var dtask plus.downloader.createDownload(eventContent,{method: GET,timeout: 5…

Linux:文本搜索命令grep

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html grep是类Unix系统中用于搜索并打印文件中符合某种模式(pattern)的行。grep命令的的基本语法如下所示&#xff1a; grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [F…

无需root,删除安卓内置应用

今天在家里反到一台比较老的安卓手机&#xff0c;直接恢复出厂设置&#xff0c;开机后一堆自带的应用&#xff0c;卡的一匹&#xff0c;于是就想办法把内置软件卸载掉。 1、手机开启开发者模式&#xff0c;打开usb调试。 2、手机与安卓连接&#xff0c;然后执行adb devices&a…

Minecraft 1.20.x Forge模组开发 06.建筑生成

我们本次尝试在主世界生成一个自定义的建筑。 效果展示 效果展示 效果展示 由于版本更新缘故,1.20的建筑生成将不涉及任何Java包的代码编写,只需要在数据包中对建筑生成进行自定义。 1.首先我们要使用游戏中的结构方块制作一个建筑,结构方块使用教程参考1.16.5自定义建筑生…

机器学习——pca降维/交叉验证/网格交叉验证

1、pca降维&#xff1a;目的是提升模型训练速度 定义&#xff1a; 使用方法&#xff1a;给训练数据或者测试数据进行降维处理 给训练数据降维 给测试数据降维&#xff1a;这里1就要用transform&#xff0c;而不是fit_transform&#xff0c;因为之前训练数据降维时特征已经确定…

JimuReport积木报表 v1.6.2 版本正式发布—开源免费的低代码报表

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…