导读

百度MEG上一代大数据产品存在平台分散、易用性差等问题,导致开发效率低下、学习成本高,业务需求响应迟缓。为了解决这些问题,百度MEG内部开发了图灵3.0生态系统,包括Turing Data Engine(TDE)计算&存储引擎、Turing Data Studio(TDS)数据开发治理平台和Turing Data Analysis(TDA)可视化BI产品。依托图灵3.0生态,我们引入了数据湖表格式:Apache Iceberg,利用其特性并在多种业务场景下进行优化实践,解决图灵数仓业务实时数据入湖,数据表历史记录更新效率低等多个痛点问题。

01 背景

1.1 图灵3.0生态概述

由于百度MEG上一代大数据产品存在平台多、易用性差及数据流转繁琐等问题。这些问题导致开发人员研发效率低及多平台间高昂的学习成本;业务部门的感知则是需求交付迟缓、数据产出延迟及数据质量低等问题。为了解决上述问题,我们构建了新一代大数据解决方案——“图灵3.0”,旨在覆盖数据全生命周期,支持全链路数据操作,提供高效敏捷且统一的强大数据生态系统,其中包括数据计算引擎、数据开发和数据分析三个核心部分:

1. TDE(Turing Data Engine):图灵生态的计算引擎,包含基于Hive、Iceberg进行数据处理的Spark和ClickHouse高性能计算引擎。

2. TDS(Turing Data Studio):一站式数据开发治理平台。

3. TDA(Turing Data Analysis):新一代可视化BI产品。

本文主要介绍数据湖表格式Iceberg在图灵3.0生态下的应用与实践。

△图灵3.0生态产品

1.2 问题

MEG数据中台基于Hive构建了离线数据仓库,已支持手百,搜索,商业,贴吧,小说,用增架构,销售等多个业务需求,但随着业务的发展,业务对数据的实时性以及查询性能等有更高要求,当前主要存在以下几个问题:

1. 商业、电商、销售等业务,周期性地更新行业等信息,单次更新数据量占比小、字段少,但是基于Hive的数据更新(以下简称:数据回溯)只能通过全量覆盖写的方式实现,数据回溯周期长、效率低、成本高。

2. 由于Hive在实时数据更新以及事务支持上存在一定局限性,无法有效满足业务构建实时数仓的需求。

3. 在处理大规模数据集上,Hive的查询性能受到如元数据的加载解析以及每次访问数据都需通过分布式文件系统listFile遍历文件列表等问题的影响,导致性能降低。

基于上述问题,我们通过技术调研,最终引入了开源的数据湖表格式Iceberg,构建数据湖存储服务,并借助大数据生态的Spark、Flink等计算引擎来实现数据湖的分析,将其无缝集成到图灵生态中,帮助业务提效降本,构建更快速、更高效、更低成本的数据中台产品。

1.3 Hive和Iceberg对比

Hive作为一个基于Hadoop生态系统的开源数据仓库工具,主要用于对大规模结构化数据进行存储、查询和分析。而Iceberg作为新一代数据湖表格式,提供了类似传统数据库的事务性,保证和数据一致性,并支持复杂的数据操作,如行级更新和删除等,更加适合实时更新,流批一体数据场景,下表列出Hive和Iceberg一些主要特性对比:

在这里插入图片描述

1.4 Iceberg的组织结构

Iceberg文件组织分为元数据层和数据层,主要包含version-hint,metadata file、snapshot file、manifest file和data file文件类型,具体如下:

  • metadata元数据层

    a. version-hint:该文件作为元数据索引初始文件,记录了Iceberg表的版本号,通过版本号找到对应的metadata file。

    b. metadata file:记录了Iceberg表的schemas、properties以及快照等信息。

    c. snapshot file(manifest-list):每次数据 commit 会生成一个新的快照,保存了该快照下每个manifest file路径及对应的分区范围。

    d. manifest file:记录数据文件元信息,包含每个数据文件的路径、文件的大小等一系列统计信息(如文件每列的最大最小值、空值数等),实现元数据和数据文件的关联。

  • data数据层

    data file:实际的数据文件,以 parquet 等列存格式存储数据。

△Iceberg表结构

△Iceberg文件组织结构

通过上述Iceberg元数据文件组织结构,Iceberg实现了文件级的元信息统计及版本化管理。

02 Iceberg能力建设与应用

2.1 图灵生态能力适配

2.1.1 统一元数据服务

由于原生iceberg缺少元数据的可视化管理能力,我们通过构建统一的元数据微服务,将Iceberg表和Hive表元数据进行管理,对应用层提供相关表和分区的增删改查等接口,统一数据存储的元数据操作入口。

该微服务主要包含常驻SparkSession模块,EngineMetaService模块和元数据模块,通过将SparkSession常驻,为用户提供Iceberg表和Hive表元数据和分区数据的增删改查功能,以及可视化的元数据管理界面。

△统一元数据服务架构

2.1.2 打通Iceberg和Hive联邦查询

为了兼容历史业务存量Hive表,同时降低用户使用Iceberg的成本。我们在计算引擎层面打通Iceberg和Hive联邦查询能力,并保证了Iceberg表与原有方式语法一致。

通常在一条SQL执行过程中,主要可简化以下Parse、Analyzer、Optimizer、CBO四个流程。通过在Analyzer和Plan阶段进行改进优化,来打通Iceberg和Hive表联邦查询。

  • Analyzer阶段:该阶段主要是将spark未解析的逻辑计划进行解析,我们通过对SparkSessionCatalog加载方式改造,优先加载iceberg表使用的catalog类型,如果用户SQL使用的是Iceberg表,则对应会使用IcebergCatalog和iceberg数据源访问,否则使用SessionCatalog与Hive数据源访问。

  • Optimizer阶段:为加强数据安全管理,我们进一步打通Iceberg表鉴权能力,在基于逻辑计划生成物理计划阶段,解析注入表、字段信息以及表操作类型规则,并与公司内数管平台交互,实现对Iceberg表和字段的鉴权

△Iceberg和Hive联邦查询适配流程

2.2 存量Hive低成本迁移Iceberg

现有数仓业务数据主要存储于Hive表,为支持业务快速切换Iceberg应用新技术,我们建设了存量Hive表低成本迁移至Iceberg表的能力。

以下是在实践过程中的两种迁移方案对比:

方式1:使用Iceberg功能migrate进行原地迁移,通过社区提供的CALL migrate语法,直接执行如下示例的SQL语句,即可将Hive表升级为Iceberg表。

CALL catalog_name.system.migrate('db.sample', map('foo', 'bar'));

该方案操作简单且可回滚,但这种方式在图灵生态落地过程中也存在一些问题:

该方式会基于原Hive表的数据信息构建Iceberg元数据信息,并将原Hive表名重命名为sample_backup_,同时数据路径也进行重命名。

  • 下游无法读:在执行迁移过程中,原Hive表对应的路径已经被重命名,进而导致下游业务无法正常读取正在迁移中的表。

  • 多表挂载冲突:在业务的使用场景中,存在同一份物理数据被多个Hive表挂载可能,直接修改路径会导致其他表失效。

方式2:基于上述问题,我们进一步对现有方案进行优化,不改变Hive表原有的数据路径,来实现Hive低成本迁移Iceberg,具体流程如下:

  • 构建Iceberg元数据:直接复用Hive的分区数据,新建同名的Iceberg表,并重建Iceberg元数据,最终新Iceberg表的元数据信息实际指向是Hive分区数据存储位置。

  • 数据校验:当Iceberg元数据构建完成后,查询Iceberg表中字段数据,和迁移之前Hive表字段数据,进行一致性校验,验证迁移是否符合预期。

  • 读写切换:数据校验完成后,我们只需要将对应表的属性更新为Iceberg。因为我们已经打通了Iceberg和Hive的查询,且迁移后表名未变,业务可正常使用原有表名及语法进行查询和写入,降低迁移成本。

△Hive迁移Iceberg整体实现流程

2.3 Iceberg在图灵的应用和性能优化

2.3.1 图灵实时数仓应用

在图灵数仓大部分场景中,用户主要依托天级或小时级运行的离线Spark任务来完成数据入仓。在这种模式下,难以满足部分对数据实时性要求较高的需求。

为解决该问题,我们基于Iceberg+Flink构建的图灵实时湖仓架构,整体重构流程如下图所示。该架构模式实现了数据分钟级别实时入仓,显著提升了数据入仓的时效性。进一步扩展了整个图灵的应用场景。

  • 针对数据分析和case排查等场景,业务可基于图灵常驻计算引擎进行实时查询,快速获取所需要的数据支持业务分析决策;

  • 针对策略迭代、特征生产以及机器学习等复杂计算场景,可基于spark例行任务进行加工生产;

  • 针对策略数据调研分析、科学计算等复杂场景通过数据交互计算引擎Jupyter进行数据计算。通过构建图灵实时湖仓架构,既保证了数据分析的时效性又兼顾了复杂计算任务的处理能力,有效提升了业务的数据处理效率和分析决策能力。

△图灵实时湖仓架构演变

2.3.2 行级更新策略

在图灵数仓业务场景下,商业、搜索、电商、销售等业务,周期性地更新行业等信息。而Hive在该场景下支持相对较弱,需通过全量覆盖写方式刷新数据,这种方式在大数据量场景下,回溯数据周期长,消耗资源大,所需要的人力时间成本也高。我们通过利用Iceberg行级更新的特性,基于update、merge into等方式回溯进行字段变更,能够很大程度的提高回溯效率,降低资源和人力成本。

针对数据行级更新,Iceberg提供了两种策略,分别为COW(Copy on Write: 写时复制) 或 MOR (Merge on Read:读时合并),其中MOR根据其标记删除文件的区别又细分了两种方式(Equality Delete File和Position Delete File)。

在这里插入图片描述

关于COW和MOR更新策略的文件表现形式如下图所示,我们针对不同场景采用不同更新策略:

  • 对于日常数据查询分析场景,小时级&天级离线例行生成加工场景,由于查询次数会远多于数据更新次数,可默认采用COW策略;

  • 针对一些业务更新少量字段进行长周期回溯场景,以及实时场景,写入频繁,通过使用MOR策略,来支持用户进行数据回溯变更字段信息,以提升数据更新效率并节省资源。

△COW和MOR两种更新策略对比

△MOR两种删除文件类型&更新字段示例

在业务进行数据回溯应用过程中,我们采用MOR(Position Delete File)进行行级数据更新,通过原Hive回溯和新Iceberg回溯两种方式对比,在一天24小时不同分区上,验证了Hive和Iceberg新旧的回溯效率,如下图所示,业务回溯效率整体可平均提升50%+;进一步地对比单次回溯一年数据消耗的计算资源量对比,平均整体降低70%+的计算资源消耗,整体上极大提升回溯效率,并降低资源成本。

△ Hive 和 Iceberg 回溯效率对比

2.3.3 Iceberg表生命周期管理和性能优化

在Iceberg应用实践的过程中,针对不同业务场景遇到的问题,我们汇总如下:

  • 小文件过多:在实时湖仓业务场景,为了要保证数据的时效性,通常是分钟级别的commit操作,在这种场景下,单个作业执行一天,则需要1440 个 commit,如果执行时间更长,则会产生更多的commit,随着时间的累积,元数据以及数据文件等都会产生大量的小文件,对于整体查询的性能会产生一定的影响。

  • 存储资源增加:如果iceberg表的快照不及时进行清理,可能会造成数据存储增加,导致存储账号资源紧张。

  • 缺乏分区数据统一管理:在一些业务场景,只需要保存一定天数的分区数据,针对无用数据需要进行删除处理。

  • 数据文件组织不均衡且无序:由于表数据写入是随机无序,且针对表数据文件大小会存在不均衡的情况。

针对上述问题,我们通过对Iceberg表进行全生命周期管理,并结合Iceberg特性优化表查询性能,保障整个数据链路的稳定性,整体框架如下图所示:

△Iceberg表生命周期管理和性能优化流程

以上流程主要包含表数据生命周期管理和表性能优化两部分。

一方面,对于表数据生命周期管理,我们通过在线服务执行定时任务,来实现对表数据和元数据进行全生命周期监控,具体如下:

  • 数据分区过期:基于用户配置的表生命周期,进行分区数据删除,保证数据文件按期清理。

  • 元数据快照清理:为用户提供按照时间维度天级别和按照个数维度小时级别两种快照过期策略,精细化元数据快照过期处理,实现存储资源的高效利用。

  • 元数据孤儿文件清理:通过天级例行任务来触发清理由于计算引擎执行任务失败等情况产生的一些没有被引用的孤儿文件,避免元数据累积影响性能。

另一方面,在表性能优化方面,我们结合图灵数仓表使用情况,并基于Iceberg原生特性,为用户在平台侧提供Iceberg表优化算子(如下图示例),主要包含以下两种能力:

  • 小文件合并:通过制定合并文件大小,对表数据文件进行重写合并,避免产生大量小文件。

  • z-order排序优化:实现对表相关字段进行重排序,提升查询性能。

△Iceberg表优化算子任务创建示例

我们通过对Iceberg表整体的生命周期管理,实现了数据和元数据的统一治理,表元数据小文件数万个降低到数百级别,合理控制了元数据产生的数量,并解决了数据频繁回溯场景下存储快速增加的问题。而在表查询优化方面,通过在一些表的数据重分布和字段重排序应用,在部分业务表查询性能提速50%。

03 未来规划

Iceberg作为图灵3.0生态中的重要组成部分,基于其高时效性、行级更新能力、小文件合并以及Z-order等成体系的数据优化的技术解决方案,为MEG数据中台业务提供构建湖仓一体,解决数据回溯等痛点问题的能力。目前Iceberg的应用已覆盖搜索,商业,销售,用增架构等多个业务线,通过低成本助力业务将存量Hive迁移Iceberg表,为业务提供高性能数据查询,同时实现对业务的降本增效。此外,我们也在不断完善Iceberg数据存储引擎的各项能力,包含表数据智能治理、查询优化、智能索引以及特定场景的性能问题等,并不断扩大Iceberg的业务覆盖范围。

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

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

相关文章

FPGA设计的用户约束

FPGA设计的用户约束 文章目录 FPGA设计的用户约束FPGA设计的用户约束综合约束管脚约束位置约束时序约束小总结 FPGA设计的用户约束 至此,HDL到门级网表的转化已经完成,对于编译器来说,下一步的任务就是要将门级网表转换并映射到具体的FPGA硬…

Spring 生态创新应用:微服务架构设计与前沿技术融合实践

在数字化转型的深水区,企业级应用正面临从 “单体架构” 向 “分布式智能架构” 的根本性跃迁。Spring 生态以其二十年技术沉淀形成的生态壁垒,已成为支撑这场变革的核心基础设施。从 2002 年 Rod Johnson 发布《Expert One-on-One J2EE Design and Deve…

车牌识别与标注:基于百度OCR与OpenCV的实现(一)

车牌识别与标注:基于百度OCR与OpenCV的实现 在计算机视觉领域,车牌识别是一项极具实用价值的技术,广泛应用于交通监控、智能停车场管理等领域。本文将介绍如何在macOS系统下,利用百度OCR API进行车牌识别,并结合OpenC…

【系统分析师】2021年真题:论文及解题思路

文章目录 试题一:论面向对象的信息系统分析方法试题二:论静态测试方法及其应用试题三:论富互联网应用的客户端开发技术试题四:论DevSecOps技术及其应用 试题一:论面向对象的信息系统分析方法 信息系统分析是信息系统生…

OFA-PT:统一多模态预训练模型的Prompt微调

摘要 Prompt微调已成为模型微调的新范式,并在自然语言预训练甚至视觉预训练中取得了成功。参数高效的Prompt微调方法通过优化soft embedding并保持预训练模型冻结,在计算成本低和几乎无性能损失方面展现出优势。在本研究中,我们探索了Prompt…

【硬核数学】2.5 “价值标尺”-损失函数:信息论如何设计深度学习的损失函数《从零构建机器学习、深度学习到LLM的数学认知》

欢迎来到本系列硬核数学之旅的第十篇,也是我们对经典数学领域进行深度学习“升级”的最后一站。我们已经拥有了强大的模型架构(基于张量)、高效的学习引擎(反向传播)和智能的优化策略(Adam等)。…

雷卯针对灵眸科技EASY EAI nano RV1126 开发板防雷防静电方案

一、应用场景 1. 人脸检测 2. 人脸识别 3. 安全帽检测 4. 人员检测 5. OCR文字识别 6. 人头检测 7. 表情神态识别 8. 人体骨骼点识别 9. 火焰检测 10. 人脸姿态估计 11. 人手检测 12. 车辆检测 13. 二维码识别 二、 功能概述 1 CPU 四核ARM Cortex-A71.5GHz 2 …

【记录】Ubuntu|Ubuntu服务器挂载新的硬盘的流程(开机自动挂载)

简而言之,看这张图片就好(可以存一下,注意挂载点/data可以自定义,挂载硬盘的位置/dev/sdb要改成步骤1中检查的时候查到的那个位置,不过这个图的自动挂载漏了UUID,可以通过blkid指令查找)&#x…

六、软件操作手册

建议在飞书平台阅读此文。 我将沿着初来乍到的用户的浏览路径介绍“诤略参谋”应用。 目录 一、用户信息1.1 注册、登录、自动登录、忘记密码、修改用户名、修改密码、退出登录与个性化设置1.2 认识主界面与任务系统1.3 语义审查、Knowledge Cutoff 审查1.4 重要内容未保存提醒…

电脑键盘不能打字了怎么解决 查看恢复方法

电脑键盘打不了字,这是我们电脑使用过程中,偶尔会遇到的电脑故障问题。一般来说,电脑键盘打不出字,可能是硬件故障、驱动问题或系统设置错误等多种原因引起。本文将详细介绍一些常见的原因和解决方法,帮助用户恢复正常…

基于STM32的土豆种植自动化灌溉系统设计与实现

📌 项目简介 随着农业现代化发展及水资源短缺问题日益突出,传统土豆种植方式在浇灌效率与用水科学性方面暴露出诸多问题。本文基于STM32F103C8T6微控制器,设计并实现了一种智能化的土豆种植自动灌溉系统,集成多种环境传感器(温湿度、土壤湿度、光照)、控制设备(水泵、…

第8篇:Gin错误处理——让你的应用更健壮

作者:GO兔 博客:https://luckxgo.cn 分享大家都看得懂的博客 引言 在Web应用开发中,错误处理是保证系统稳定性和用户体验的关键环节。Gin作为高性能的Go Web框架,提供了灵活的错误处理机制,但许多开发者在实际项目中仍会遇到错误处理混乱、异…

【PyCharm】Python安装路径查找

PyCharm应用笔记 第一章 Python安装路径查找 文章目录 PyCharm应用笔记前言一、电脑设置查找二、资源管理器查找 前言 本文主要介绍几种Python安装路径查找的方法。 一、电脑设置查找 简述过程:设置》应用》安装的应用》搜索框输入Python。 注:电脑使用…

数据结构:递归:汉诺塔问题(Tower of Hanoi)

目录 问题描述 第一性原理分析 代码实现 第一步:明确函数要干什么 第二步:写好递归的“结束条件” 第三步:写递归步骤 🌳 递归调用树 🔍复杂度分析 时间复杂度:T(n) 2^n - 1 空间复杂度分析 问题描…

synetworkflowopenrestydpdk

一.skynet 1. Skynet 的核心架构是什么?简述其进程与服务模型。 Skynet 采用多进程多服务架构。主进程负责管理和监控,多个工作进程(worker)负责实际服务运行。每个服务(service)是一个独立的 Lua 虚拟机&…

【甲方安全视角】安全防御体系建设

文章目录 前言一、云安全防护能力第一阶段:搭建安全防护设施第二阶段:安全防护设施的精细化运营第三阶段:安全运营周报输出二、IT安全防护能力(一)办公网安全设施建设(二)办公网安全运营三、基础安全防护能力(一)物理安全(二)运维安全(三)安全应急响应四、总结前言…

计算机组成原理与体系结构-实验一 进位加法器(Proteus 8.15)

目录 一、实验目的 二、实验内容 三、实验器件 四、实验原理 4.1 行波进位加法器 4.2 先行进位加法器 4.3 选择进位加法器(尝试猜测原理) 五、实验步骤与思考题 一、实验目的 1、了解半加器和全加器的电路结构。 2、掌握串行进位加法器和并行进…

react+antd Table实现列拖拽,列拉宽,自定义拉宽列

主要插件Resizable,dnd-kit/core,dnd-kit/sortable,dnd-kit/modifiers 其中官网有列拖拽,主要结合Resizable 实现列拉宽,isResizingRef 很重要防止拖拽相互影响 1.修改TableHeaderCell const isResizingRef useRef(…

光照解耦和重照明

项目地址: GitHub - NJU-3DV/Relightable3DGaussian: [ECCV2024] 可重新照明的 3D 高斯:使用 BRDF 分解和光线追踪的实时点云重新照明 可优化参数 gaussians.training_setup(opt) if is_pbr:: direct_env_light.training_setup…

Kafka 运维与调优篇:构建高可用生产环境的实战指南

🛠️ Kafka 运维与调优篇:构建高可用生产环境的实战指南 导语:在生产环境中,Kafka集群的稳定运行和高性能表现是业务成功的关键。本篇将深入探讨Kafka运维与调优的核心技术,从监控管理到性能优化,再到故障排…