—2023— Iceberg在湖仓使用中的若干探索 李立伟华为资深工程师 整体概述应用探索 整体概述 在传统方案,例如Hive中,表被定义为一个或多个目录的全部数据。 组成表的数以目录级别进行跟踪,这些数据被存储在Hive元存储中完成。 分区值通过目录路径定义: •适用于几乎所有处理引擎,因为它是村里唯一的希望——自从大数据被更广泛采用以来,一直是事实上的标准。 •分区级别原子性 •存储格式无关 •提供了整个生态系统中的“元数据描述” •即使微小的变更依旧效率低下 •多分区修改无法保证安全性 •多个作业同时修改一份数据无法保证安全性 •列出大表的目录列表需要非常长的时间 •用户必须知道表格的物理布局 •Hive表统计信息通常是陈旧的 •在云对象存储上的性能较差 OldWay 目录级别的数据表目标: •表的正确性与一致性 •更快的planningandexecution •用户无需感知物理结构 •表演进 •在大规模数据上实现以上目标 NewWay 文件级别的数据表 -一种TableFormat规范 -一组API和库,可用于引擎与遵循该规范的表进行交互 -存储引擎 -计算引擎 -服务 Pulsar/DMQ HDFS/OBS 增量处理 增量处理 模型数据 明细数据 贴源数据 …… es clickhouse 数据入湖 APP 数据流图 •中间层支持OLAP分析及实时化 将DWD数据明细层与DWS数据服务层从批式T+1处理,演进为流式增量处理,数据时延大大降低 •支持ACID语义 完善的ACID语义支持,修改操作不会影响读取等 •支持高效回溯 Hive/Kafka等无法有效回溯历史版本,无法查看历史的表格式与数据 •存储成本更低 一套存储在OBS上完成业务数据落地 •数据延迟未达到实时 •业务系统改造对接 •针对Iceberg表的定制优化 消息 … 文件 业务库 数据源 实时检索 …… Redis 图数据库 ELasticSearch HBase Clickhouse IOTDB 贴源数据 明细数据 模型数据 LogStore FileStore Service 生命周期管理 数据压实 数据重分布 监控 告警 批流一体存储逻辑架构 实时应用 数据管理 数据清洗专题分析挖掘建模 固定报表 AI分析 自助分析 …… 清单/详单 查询 BI 大屏展示 实时加载 数据入湖 按需加载 StorageCache(数据加速层) HDFS OBS 应用探索 通知式告知完成状态 分区数据未写入完成,不希望下游可查询等场景 随时感知数据的写入位 'sink.partition-commit.delay'='1h','sink.partition-commit.trigger'='partition-time','sink.partition-commit.policy.kind'='success-file' 在流式处理过程中,时效不同的数据价值也是不同的。 时效越高的数据,价值越高。 基于此,当时效较低的数据到达时,将数据进行累积, 直到数据量达到一定级别,再行提交。 类Git式的数据管理 •周期稳定快照 •重要历史快照 •实验分支 1 lisi 2 Zhangsan 优势: 每天只存储增量数据,无需全量存储 痛点: 数据冗余存储,每天都存储了一份全量的历史数据, 表数据保存的周期越长,冗余数据越多 升级 1 lisi2 2 Zhangsan 3 wangwu (1,lisi2),(3,wangwu) (4,xiaohong) 存储占用降低为原本的25%以下 1 lisi2 2 Zhangsan 3 wangwu 4 xiaohong 列更新 a.fileDataFile SEQ0 b.fileDataFile SEQ0 AddCol2column a.fileDataFileSEQ0 b.fileDataFileSEQ0 ID Col1 1 a1 2 a2 3 a3 ID Col1 1 a1 2 a2 3 a3 c.filePartialFileSEQ1 ID Col2 1 b1 3 b3 4 b4 关键技术: •元数据关联部分列信息 •根据新列生成部分列数据 •读取时或后台异步任务合 并部分列数据 ID Col1 4 a4 ID Col1 4 a4 ID Col1 1 a1 2 a2 3 a3 4 a4 ID Col1 Col2 1 a1 b1 2 a2 3 a3 b3 4 a4 b4 使用Puffin完成初步的索引应用 根据规范,Puffin是一种文件格式,旨在保存有关由ApacheIceberg表管理的底层数据文件(例如Parquet文件)的统计信息和索引等信息,以进一步提高性能。该文件包含称为“blob”的任意信息片段,以及分析它们所需 的元数据。到目前为止,blob可以是以下类型: apache-datasketches-theta-v1。 利用Puffin文件,将此文件写入到表中,并且在开启外部索引的情况下,将此文件的内容加载到外部索引组件中,加速关联、点查等场景。 不止于TableFormat 良好的业务使用体验 极低的维护成本 自动优化 支持多种存储、计算引擎 数据湖服务 配套实时数据湖仓,全面提升相关性能、可视化、运维监控 能力: 1.服务规则引擎:使用数据重分布等提升查询性能、进行数 据生命周期管理等 2.告警规则引擎:基于配置的告警进行相应监控 实时显示湖内数据概况数据分布、告警等信息 基于FileIO的对象存储优势 基于FileIO的对象存储优势 基于FileIO的对象存储优势 基于FileIO的对象存储优势 隐藏分区 隐藏分区 隐藏分区 更新分区规范纯粹是一种元数据操作,因为不会重写先前的数据,因此非常快速、简单且成本低廉。计划查询时,引擎将拆分工作并为适用于每个分区规范的数据创建不同的计划。由于您可以打破查询计划,因此无需重写所有旧数据,从而使对表架构的增量更改变得简单且成本低廉。 同时也可以随时使用rewriteDataFiles过 程重写旧数据以进行压缩和排序。 如何无缝迁移到iceberg 仅需三步: 1.任务添加IcebergRuntime包 2.自动生成快照表用于验证 3.验证后升级原表到Iceberg(原表将被加上Backup后缀) 欢迎加入我们的团队 欢迎加入Iceberg交流群 欢迎关注Iceberg社区公众号 感谢您的观看