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

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.mzph.cn/news/89499.shtml

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

相关文章

链表入门(单链表讲)

链表 1.链表1.1 链表概念及其结构1.2 链表的分类 2.单链表代码实现2.1 单链表的定义2.2 单链表的初始化2.3 单链表的新增结点2.4 单链表的打印2.4 单链表的插入2.4.1 头插2.4.2 尾插2.4.3 任意位置插入 2.5 单链表的删除2.5.1 头删2.5.2 尾删2.5.3 任意位置删除 2.6 单链表的查…

【PickerView案例10-国旗选择界面02 Objective-C预言】

一、好了,我们继续来实现这个国旗选择界面: 1.它的界面里面,是不是很简单,就一个UIPickerView,就完事儿了 然后,显示的每一行内容呢, 1)一个文字Label 2)一个图片 那大家应该有意识,它返回的应该是一个View,对吧, 代理方法里面,有一个返回View的,viewForRow…

Django:五、登录界面实现动态图片验证码

一、下载包 pip install pillow 二、代码 这是一个函数,无输入,返回两个值。一个值是图片,一个值是图片中的数字及字母。 需要注意:font_fileMonaco.ttf 是一个验证码字体文件,如有需要,可三连私信。 …

【逆向】在程序空白区添加Shellcode

目录 硬编码 内存对齐和文件对齐 节表 实战 滴水逆向03-17 #include <windows.h>LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) …

Pycharm 搭建 Django 项目,看完这一篇就够了

1. 安装需求 在使用 python 框架 Django 需要注意下面事项 Pycharm 版本是专业版而不是社区版本Pycharm 配置好了 python 解释器 &#xff08;一般我们现在用的都是python3&#xff09;我自己使用的是 Pycharm 版本是2020.1.2 2. 准备工作 2.1 新建项目 首先我们打开 Pycharm …

Linux离线安装elasticsearch|header|kibna插件最详细

1.准备软件安装包 [hadoophost152 elasticsearch]$ ll -rw-r--r--. 1 hadoop hadoop 515807354 9月 23 23:40 elasticsearch-8.1.1-linux-x86_64.tar.gz -rw-r--r--. 1 hadoop hadoop 1295593 9月 23 23:48 elasticsearch-head-master.tar.gz -rw-r--r--. 1 hadoop hadoop…

记录一个 GUI 库的对比测试结果

1&#xff0c;Java 的 JavaFX 2&#xff0c;golang 的 Fyne 1, Java 测试的是一个俄罗斯方块的 GUI 程序。一切正常。 2&#xff0c;Golang github 的原仓库网络问题&#xff0c;没能测试上&#xff0c;使用以下库 https://gitee.com/mirrors/Fyne 下载代码后提示“编译失…

Tomcat 与 JDK 对应版本关系

对应关系 Tomcat版本 jdk版本11.0.x JDK 21及以后10.1.x JDK11及以后10.0.xJDK1.8及以后9.0.x JDK1.8及以后8.5.xJDK1.7及以后8.0.x JDK1.7及以后 查看对应关系方法&#xff1a; 登陆Tomcat官网&#xff1a;Apache Tomcat - Welcome! 结果&#xff1a;

Picgo

title: “Picgo” createTime: 2021-07-01T12:05:5808:00 updateTime: 2021-07-01T12:05:5808:00 draft: false author: “name” tags: [“未标签”] categories: [“未分类”] description: “测试的” picgo 地址 : /home/zhu/software/node/node-v14.15.0-linux-x64/bin文…

河北吉力宝以步力宝健康鞋引发的全新生活生态商

在当今瞬息万变的商业世界中&#xff0c;成功企业通常都是那些不拘泥于传统、勇于创新的先锋之选。河北吉力宝正是这样一家企业&#xff0c;通过打造一双步力宝健康鞋&#xff0c;他们以功能性智能科技穿戴品为核心&#xff0c;成功创造了一种结合智能康养与时尚潮流的独特产品…

C#读取CAD文件(dwg/dxf)并处理

文章目录 一、前言二、调研过程2.1 CAD相关2.2 DWG2.3 DXF2.4 小结三、解析CAD的库3.1 netDxf3.2 Teigha3.2.1 官网获取3.2.2 网上获取四、图形计算一、前言 需求: 项目要求识别CAD图纸(图纸内容与现实事物比例是1:1)中的内容,并提取出一些关键信息。 这里的CAD图纸是指C…

unity 实用框架

单例模式基类 类不继承mono的单例基类 /// <summary> /// 单例基类 /// </summary> //泛型解决&#xff0c;给他一个约束要么是这个类本身要么是它的子类 public class SingleBase<T>where T : SingleBase<T> {protected SingleBase() { }//线程锁。…

C++ 类和对象(4)构造函数

C的目标之一是让使用类对象就像使用标准类型一样&#xff0c;但是常规的初始化语法不适用于类似类型Stock&#xff1a; int year 2001&#xff1b; struct thing {char * pn;int m; }; thing amabob {"wodget",-23}; //有效初始化 Stock hot {"Sukies Autos…

Leetcode 992. K 个不同整数的子数组

文章目录 题目代码&#xff08;9.27 首刷看解析&#xff09; 题目 Leetcode 992. K 个不同整数的子数组 代码&#xff08;9.27 首刷看解析&#xff09; 滑动窗口&#xff0c;恰好转换为&#xff1a;最多K个不同的数 - 最多K-1个不同的数 class Solution { public:int subarr…

kafka伪集群部署,使用KRAFT模式

1:拉去管理kafka界面UI镜像 docker pull provectuslabs/kafka-ui2:拉去管理kafka镜像 docker pull bitnami/kafka3:docker-compose.yml version: 3.8 services:kafka-1:container_name: kafka1image: bitnami/kafka ports:- "19092:19092"- "19093:19093&quo…

测试用例的八大基本准则

测试用例的八大基本准则 测试用例的八大基本准则功能测试性能测试兼容性测试安全测试可靠性测试易用性测试数据库测试接口测试 测试案例 测试用例的八大基本准则 上节测试用例的设计中我们讨论如何设计一个测试用例&#xff0c;知道了测试用例的设计有&#xff1a;“边界值&am…

Linux命令(87)之pwd

linux命令之pwd 1.pwd介绍 linux命令pwd(全称&#xff1a;print working directory)用来列出当前目录 2.pwd用法 pwd [参数] pwd参数(了解即可&#xff0c;99.99%用不到) 参数说明-L显示逻辑路径-P显示实际物理路径 3.实例 3.1.显示当前目录 命令&#xff1a; pwd [ro…

如何制作gif动图gif (多图合成gif、GIF录制软件、视频制作成GIF动图)

文章目录 1 在线制作多图合成gif动画2 GIF录制软件3 将现有的视频 制作成GIF动图 1 在线制作多图合成gif动画 在线制作gif动画链接:https://www.matools.com/gif ①选择需要制作gif动画的图片将其添加 ②调整时间间隔&#xff0c;图片宽高等设置 ③一键生成gif ④下载到本…

目标检测YOLO实战应用案例100讲-区域卷积网络在阴影环境目标检测上的研究与应用(下)

目录 5.2 阴影检测模块与街景检测模块实验设置 5.2.1 实验环境与工具 5.2.3 损失函数 5.2.4 实验具体流程 5.3 实验评估与对比 5.3.1 两类实验的评估标准 5.3.2 两类实验结果对比 阴影环境下街景目标检测系统的实现 6.1 系统概述 6.2 系统软硬件环境 6.3 功能模块设计 6.4 系统…

【OpenSSH漏洞修复】升级到openssh9.4p1版本

实战环境 操作系统:Centos7.9 openssh版本:7.4 重要的升级文件 使用rpm包升级 D:\Linux基线离线安装包\openssh9.4-升级包 的目录openssh-9.4p1-4.el7.x86_64.rpm openssh-clients-9.4p1-4.el7.x86_64.rpm openssh-server-9.4p1-4.el7.x86_64.rpm需要自己去官网下载离线rp…