【数据中台】初探数据湖-iceberg

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
实时计算 Flink 版,5000CU*H 3个月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 数据湖技术-iceberg

@[toc]

1. 什么是数据湖

准确来讲就是数据入湖中间件技术,它并不是一个存储或者计算引擎,它的存在就是更好的将存储和计算解耦,构建与存储格式之上的数据组织方式,并提供ACID(atomicity原子性、consistency一致性、isolation隔离性、durability持久性)能力,提供行级别的数据修改能力,确保schema的准确性,提供一定的schema扩展能力,

数据湖具有哪些能力,分为两个方面:

  • 存储:
  1. 元数据修正以及行级数据修正
  2. 数据质量管控
  3. 异构数据入湖
  • 计算:
  1. 流批计算融合
  2. ACID

数据技术的比较

2. iceberg的特性

2.1 优化数据入库的流程

  1. 提供ACID事务能力,上游数据写入即可见,不影响当前数据处理任务。

技术细节:

  • 事务性提交:

    1. 在写操作的时候,首先会记录当前元数据的版本-base version,然后创建新的元数据以及manifest文件,最后会原子性地将base version替换为新的版本。
    2. 原子性替换保证了线性的历史, 但原子性替换需要依赖元数据管理器所提供的能力和HDFS或是本地文件系统所提供的原子化的rename能力。
    3. 写操作基于乐观锁设计,因为大数据场景下,读比写的场景多,所以采用乐观锁的设计,回会假定当前没有其他的写操作,当遇到冲突则基于当前最新的元数据进行重试。
  • 快照隔离:

    1. 读操作仅适用当前已生成的快照。
    2. 写操作会生成新的隔离快照,并在写完成后原子性提交。
  1. 提供upsert/merge into 能力,可以极大地缩小数据入库的能力

技术细节:

  • 对于文件列表的所有修改都是原子操作:如在分区中追加数据,合并或是重写分区。同时也会此时记录表的结构,分区信息,参数等,生成变化轨迹文件,并始终向前迭代,即能实现跟踪老的快照,以确保能够回退。

2.2 支持更多的分析引擎

  1. 优秀的内核抽象使之不绑定于特定引擎,目前在支持的有spark,flink,persto,hive。
  2. 提供java native API,不用特定引擎也可以访问iceberg表。

2.3 统一数据存储和灵活的文件组织

  1. 提供基于流式的增量计算模型和基于批处理的全量表计算模型,批任务和流任务可以使用相同的存储模型(HDFS、OZONE),数据不再孤立。
  2. iceberg支持隐藏分区和分区进化,方便业务进行数据分区策略更新。
  3. 支持Parquet,ORC,Avro行存列存兼顾

2.4 增量读取处理能力

  1. 支持用过流式方式读取增量数据
  2. spark struck streaming支持
  3. flink table source支持

3. 数据湖技术催生的新架构

3.1 原有方案

原有数仓的构建方案

  • 复杂的增量入库方案来保证exactly-once和数据去重
  • 利用HDFS rename操作的原子性和复杂的命名规则来保证一致性、可见性
  • 利用调度引擎来构建依赖关系,避免读写冲突

    所存在的问题:

  • 架构复杂,设计多个不同系统的协调
  • 架构的复杂性导致延迟明显,从数据产生到最终展示有较长的时延
  • 需要支持exactly-once,并支持数据去重,导致入库方案异常复杂,增加运维难度。

3.2 新方案

如何利用iceberg改造原有方案:

  • 原子语义结合flink 两阶段提交简化整体架构
  • iceberg格式是hive、spark兼容的可读写的表格式,可以直接使用,hive、spark进行处理,无需再次将数据导入数仓中
  • iceberg支持读写分离,写入并且commit后的数据下游立即可见,因为支持ACID,所以实时读取到新增的数据,降低整体时延

基于iceberg的数据湖的增量处理分析整体方案

  • 数据入湖
  1. 利用flink+iceberg构建准实时数据接入层
  • 湖上分析
  1. 利用flink,structured streaming进行增量计算
  2. 利用spark 3.0 SQL进行sql分析

使用数据湖技术催生的新架构有三个优点:

  1. 简化整体架构
  2. 降低端到端的延迟
  3. 赋予事务型能力

4. 新架构应用场景

业务场景:mysql的数据导入到hive中,这里就会出现一个问题,mysql的数据是实时变化的数据,那业务系统的数据怎么尽快反应到离线数仓呢?

通常的做法就是将一段时间内的新增数据或者全量数据写到数仓中,覆盖掉原先的数据。那实时数仓也会存在这个问题,如何反应实时的数据变化是一个比较困难的事情。现在市面上常用的基于binlog的数据采集工具像Canal,Maxwell,Flink 从1.11起支持CDC的能力( Debezium 作为 Flink CDC 的底层采集工具),Spark structured streaming支持upsert和merge的能力,如果能将上游的增量数据实时的写入数仓,这不仅能降低端到端的时延,也能显著降低业务开销。
开源CDC方案

所以就可以构建基于iceberg的数据湖的增量处理分析系统,实现流批一体。

参考文章:
Flink CDC 2.0 正式发布,详解核心改进

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
SQL Oracle 关系型数据库
Flink CDC 系列 - 同步 MySQL 分库分表,构建 Iceberg 实时数据湖
本篇教程将展示如何使用 Flink CDC 构建实时数据湖,并处理分库分表合并同步的场景。
Flink CDC 系列 - 同步 MySQL 分库分表,构建 Iceberg 实时数据湖
|
3月前
|
存储 机器学习/深度学习 数据采集
深入解析大数据核心概念:数据平台、数据中台、数据湖与数据仓库的异同与应用
深入解析大数据核心概念:数据平台、数据中台、数据湖与数据仓库的异同与应用
|
分布式计算 Kubernetes 流计算
Iceberg+Amoro+CloudEon体验云原生数据湖
通过使用CloudEon、Iceberg、Flink、Spark和Amoro,您可以轻松地在Kubernetes上构建一个强大的大数据基础环境。
499 0
|
6月前
|
SQL 分布式计算 HIVE
最强指南!数据湖Apache Hudi、Iceberg、Delta环境搭建
最强指南!数据湖Apache Hudi、Iceberg、Delta环境搭建
286 0
|
存储 数据采集 安全
什么是数据管理,数据治理,数据中心,数据中台,数据湖?
什么是数据管理,数据治理,数据中心,数据中台,数据湖?
268 0
|
消息中间件 存储 分布式计算
SmartNews 基于 Flink 的 Iceberg 实时数据湖实践
SmartNews 数据平台架构师 Apache Iceberg Contributor 戢清雨,在 Flink Forward Asia 2022 实时湖仓专场的分享。
1474 0
SmartNews 基于 Flink 的 Iceberg 实时数据湖实践
|
存储 SQL 分布式计算
数据湖的选型(delta iceberg hudi)以及比对
数据湖的选型(delta iceberg hudi)以及比对
666 0
|
SQL 存储 设计模式
数据湖选型指南|Hudi vs Iceberg 数据更新能力深度对比
数据湖作为新一代大数据基础设施,近年来持续火热。在计划升级数据湖架构的客户中,支持数据的事务更新通常是大家的第一基础诉求。本文我们就为大家详细解析不同数据湖架构在数据事务上的能力对比,帮助大家在数据湖选型之路上做出更好的决定。这是「数据湖选型」系列的第一期,后续还将陆续推出,希望大家和我们共同探讨~
1638 0
数据湖选型指南|Hudi vs Iceberg 数据更新能力深度对比
|
存储 SQL 分布式计算
5分钟入门数据湖IceBerg
随着大数据存储和处理需求的多样化,如何构建一个统一的数据湖存储,并在其上进行多种形式的数据分析成了企业构建大数据生态的一个重要方向。Netflix 发起的 Apache Iceberg 项目具备 ACID 能力的表格式成为了大数据、数据湖领域炙手可热的方向。关注公众号:857Hub
891 0
5分钟入门数据湖IceBerg
|
存储 数据采集 机器学习/深度学习
数据湖和数据中台
简要介绍数据湖的特点和功能,与数据仓库的区别。此外,还介绍了数据中台的作用和功能。
954 0
数据湖和数据中台