Apache iceberg
如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

一般而言,数据湖技术需要具备的能力主要包括以下几项:

  • 同时支持流批处理
  • 支持数据更新
  • 支持事务(ACID)
  • 可扩展的元数据
  • 数据质量保障
  • 支持多种存储引擎
  • 支持多种计算引擎
  • Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

    今天市面上存在三种数据湖技术:Apache Iceberg、Apache Hudi 以及 Delta Lake。他们都是:

  • 构建于存储格式之上的数据组织方式
  • 提供 ACID 能力,提供一定的事务特性和并发能力
  • 提供行级别的数据修改能力
  • 确保 Schema 的准确性,提供一定的 Schema 扩展能力。
  • Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

    上面表格在十三个维度对这些数据湖分析对比,过往记忆大数据之前的 《一篇文章掌握 delta、iceberg 和 hudi 三大开源数据湖方案》、《Delta Lake、Iceberg 和 Hudi 三大开源数据湖不知道如何选?那是因为你没看这篇文章》以及《Delta Lake 和 Apache Hudi 两种数据湖产品全方面对比》文章也有这方面的比较,感兴趣的同学可以去看看。

    上面的比较中可以看出,不同数据湖产品各有千秋,不同公司根据不同需求选择了不同的数据湖产品,比如阿里云的 DLA 团队选择 Apache Hudi 作为其底层数据湖存储引擎;腾讯选择了 Apache Iceberg 作为他们的数据湖存储引擎。

    Apache Iceberg 原理介绍

    Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

    Apache Iceberg 是一种用于跟踪超大规模表的新格式,是专门为对象存储(如S3)而设计的。其核心思想:在时间轴上跟踪表的所有变化。

  • 快照(snapshot)表示表数据文件的一个完整集合
  • 每次更新操作会生成一个新的快照。
  • Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

    前面说了腾讯选择了 Apache Iceberg 作为其数据湖底层存储,主要原因如下四点:

  • 优化数据入库流程:Iceberg 提供 ACID 事务能力,上游数据写入即可见,不影响当前数据处理任务,这大大简化了 ETL;Iceberg 提供了 upsert、merge into 能力,可以极大地缩小数据入库延迟;
  • 支持更多的分析引擎:优秀的内核抽象使之不绑定特定的计算引擎,目前 Iceberg 支持的计算引擎有 Spark、Flink、Presto 以及 Hive。
  • 统一数据存储和灵活的文件组织:提供了基于流式的增量计算模型和基于批处理的全量表计算模型。批处理和流任务可以使用相同的存储模型,数据不再孤立;Iceberg 支持隐藏分区和分区进化,方便业务进行数据分区策略更新。支持 Parquet、Avro 以及 ORC 等存储格式。
  • 增量读取处理能力:Iceberg 支持通过流式方式读取增量数据,支持 Structed Streaming 以及 Flink table Source。
  • Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

    Iceberg 的快照设计方式,主要包括快照隔离以及对于文件列表的所有修改都是原子操作。

    Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

    元数据组织包括:

  • 实现基于快照的跟踪方式;
  • 表的元数据是不可修改的,并且始终向前迭代;
  • 当前的快照可以回退。
  • Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

    Iceberg 应用落地

    Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

    没有使用数据湖技术,我们需要很多组件来保证 exactly-once 语义。并且利用 HDFS 的 rename 操作的原子性和复杂的命名规则来保证一致性、可见性。利用调度引擎来构建依赖关系,从而避免读写冲突。

    上面架构存在的问题:架构比较复杂,需要不同组件之间的协调;架构的复杂会进一步导致数据的延迟。exactly-once 语义保证比较复杂,增加了运维的难度。

    Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

    有了 Iceberg 之后,整体架构简单了,而且通过简单的架构即可实现原子语义。Iceberg 格式的数据直接可以使用 Hive、Spark 来读取;同时,Iceberg 支持读写分区,写入并且 commit 的数据下游系统立即可以使用,降低系统的整体延迟。

    Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

    同时,Iceberg 技术还催生了新的架构,也就是 CDC 架构。其相比传统的架构而言整体系统架构更加简洁,端到端的延迟大大降低,而且支持 ACID 事务能力。

    Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop
    Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop

    后续规划

    Apache iceberg
    如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop
    本博客文章除特别声明,全部都是原创!
    原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
    本文链接: 【数据湖技术 Iceberg 的探索与实践】(https://www.iteblog.com/archives/9862.html)
    喜欢 (8)
    分享 (0)
    发表我的评论
    取消评论

    表情
    本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!
    (3)个小伙伴在吐槽
    1. PPT下载链接失效了,能否更新一下

      Yulei2020-10-09 17:56 回复
    2. 没失效啊,我刚刚还试了是可以下载的。

      w3970907702020-10-09 19:10 回复
    3. thx , 试了一下没问题。应该是被微信默认浏览器屏蔽了。 ❗

      Yulei2020-10-10 11:08 回复