美文网首页
HUDI基础

HUDI基础

作者: 阿猫阿狗Hakuna | 来源:发表于2023-05-15 00:02 被阅读0次

    什么是Hudi?

    image.png

    HUDI(Hadoop Upserts Deletes and Incrementals)是一个开源的数据湖工具,用于管理大规模数据湖中的数据。

    HUDI旨在解决数据湖中常见的一些挑战,如数据的增量更新、删除和查询等。它提供了一套API和工具,可以帮助用户在数据湖中进行写入、更新、删除和查询等操作,并提供了高效的数据索引和存储机制,以加速数据的访问和处理。

    HUDI的核心理念是将数据分为小的、可修改的单元,称为"写时复制(copy-on-write)"。当数据需要更新或删除时,HUDI会创建一个新的数据文件,而不是直接修改原始数据文件。这种设计可以保证数据的不可变性,同时提供了高效的增量更新和删除操作。

    HUDI还提供了用于数据管理的元数据存储和查询功能,可以跟踪数据的版本、变更历史和元数据信息。这使得用户可以轻松地追踪和管理数据的变更,同时支持time-travel查询,即可以查询数据在不同时间点的版本。

    Hudi Timeline

    Hudi timeline是HUDI用于跟踪和管理数据变更历史的一种机制。它记录了数据湖中各个数据集的不同版本和变更操作,以及它们在时间上的顺序。

    Timeline的核心概念是HUDI数据集的不可变性。每当对HUDI数据集进行写入、更新或删除操作时,HUDI会创建一个新的数据文件或目录,而不是直接修改原始数据文件。每个数据文件或目录都被分配一个唯一的时间戳,用于表示它的创建时间。

    Timeline维护了所有数据文件和目录的时间戳信息,并按照时间顺序组织它们。这使得HUDI能够追踪数据集的完整变更历史,并支持time-travel query。通过Timeline,用户可以查询数据集在不同时间点的版本,回溯到过去的数据状态。

    HUDI Timeline还提供了一些其他功能,如支持增量数据拉取(incremental data pull)和增量数据合并(incremental data merge)。增量数据拉取允许用户只拉取数据集中发生变化的部分,而不必处理整个数据集。增量数据合并则可以将多个HUDI数据集合并为一个数据集,并保持数据的一致性和有序性。

    Hudi的Timeline由一系列按时间顺序的Instants组成,Instant有下面三部分:

    • Instant action: 对于Hudi table的操作类型;
    • Instant time:操作发生时间戳(比如20190117010349);
    • Instant state: Instant的当前状态。

    Instant Action主要有以下几种:

    • COMMITS:commit表示将一批记录原子的写入到hudi table中;
    • CLEANS:删除表中不再需要的旧版本文件,后台活动。
    • DELTA_COMMIT:delta_commit指的是将一批记录原子写入 MergeOnRead 类型的表中,其中一些/所有数据可以只写入delta logs。
    • COMPACTION: 将delta logs里的数据与parquet data files合并。
    • ROLLBACK:表示commit/delta commit不成功并回滚,删除在此类写入期间产生的任何partial data files。
    • SAVEPOINT:将某些file group标记为“saved”,这样cleaner就不会删除它们。 在发生灾难/数据恢复情况时,它有助于将表恢复到timeline上的某个点。

    Instant State主要有以下几种:

    • REQUESTED:表示已经被scheduled,但尚未启动的操作。
    • INFLIGHT:表示操作正在进行。
    • COMPLETED:表示操作已经完成。

    Hudi Table/Query Type

    在Hudi中,有几种常见的表类型,用于满足不同的数据管理和处理需求。下面是Hudi中常见的表类型:

    • Copy-on-Write (COW)表:COW表是Hudi最基本的表类型。它采用了写时复制的策略,每次更新操作都会创建一个新版本的完整数据集。新版本以一组新的文件形式存储,而原始数据保持不变。COW表适合那些数据写入一次后多次读取的场景。
    • Merge-on-Read (MOR)表:MOR表是Hudi引入的一种改进型表类型。它采用了基于读取时合并的策略。数据被组织成基础文件(base files)和日志文件(log files)。基础文件包含不可变的数据,而日志文件则记录了基础文件的增量更改。在查询执行期间,Hudi会动态地合并基础文件和日志文件,以提供一致的数据视图。MOR表适合那些需要频繁更新和低延迟查询的场景。


      image.png

    在Hudi中,有几种常见的查询类型可以用来检索和分析数据。下面是Hudi中常用的查询类型:

    • Snapshot Query:Snapshot查询是一种基于数据快照(Snapshot)的查询方式。它可以获取Hudi表中的某个commit或compaction的数据快照,并以只读方式进行查询和分析。通过指定特定的时间戳或快照ID,可以获取表在该时间点的一致视图。
    • Incremental Query:Hudi支持增量查询,即只查询某个commit或compaction以来有变化的数据。增量查询利用Hudi表的增量存储和索引结构,可以快速检索到最新的变化数据,避免全表扫描,提高查询效率。
    • Read Optimized Queries:查询给定某个commit或compaction的snapshot。仅暴露file group中的base/columnar文件,不暴漏delta log文件,以期获得与非Hudi 列存表相同的查询性能。


      image.png

    Hudi File Layout

    • Hudi将数据表组织成分布式文件系统上base path下的目录结构。
    • 表被分割成多个partition。
    • 在每个partition内,文件被组织成file group,由file ID唯一标识。
    • 每个file group包含多个file slices。
    • 每个file slice包含在某个commit/compaction instant生成的base file(.parquet),以及一组delta log(.log.*),这些delta log文件包含了自base file生成以来对base file的插入/更新操作。

    相关文章

      网友评论

          本文标题:HUDI基础

          本文链接:https://www.haomeiwen.com/subject/bgcmsdtx.html