数据湖 Hudi 核心概念

什么是 Hudi ?

Hudi 是一个用于处理大数据湖的开源框架。

大数据湖是指一个大规模的、中心化的数据存储库,其中包含各种类型的数据,如结构化数据、半结构化数据和非结构化数据,目的是为企业提供一个集中的数据存储库,从而更容易地进行数据分析和洞察。

Hudi支持数据操作模式:InsertUpdateDelete。这些操作是原子性的,因此在多个客户端并发访问时,数据的一致性得到了保证。另外,Hudi 支持基于时间戳的查询,使得可以轻松地查询某个时间点的数据快照。Hudi 还支持增量式处理,可以高效地处理大量的数据更新。

Hudi 是如何对数据进行管理的?

Hudi 通过管理数据的元数据,实现了对数据的管理。

具体来说,Hudi 将数据分为两个部分:数据本身和元数据。数据本身是指实际的数据,而元数据是指描述数据的数据,包括数据的结构、位置、格式、版本等信息。

Hudi 使用元数据来跟踪数据的变化,包括数据的插入、更新和删除等操作,并提供高效的查询功能,支持各种查询条件和时间点的查询。

在 Hudi 中,每个数据集都有一个元数据文件,用于描述数据集的结构、版本、位置等信息。每当数据集发生变化时,Hudi 会更新元数据文件,以便跟踪数据的变化。此外,Hudi还提供了一些工具,如命令行界面和 API,用于管理和查询数据集的元数据信息。

Hudi 还提供了两种不同的数据格式: Write-Optimized FormatRead-Optimized Format

Write-Optimized Format 针对写入操作进行了优化,可以高效地插入和更新数据,但查询性能较差。

Read-Optimized Format 则针对查询操作进行了优化,可以快速地读取数据,但写入性能较差。

Hudi 表结构

Hudi 是一种基于 Hadoop 的数据管理框架,可用于在分布式环境中管理大规模数据集。它提供了一种用于存储和处理数据的表结构,该结构被称为 Hudi 表。

Hudi 表由多个文件组成,这些文件位于 Hadoop 分布式文件系统(HDFS)或其他支持 Hadoop API 的文件系统中。Hudi 表的文件结构基于 Apache Parquet 格式,并且可以通过 Hudi 提供的 API 进行读写操作。

Hudi 的表结构在 HDFS 上的目录结构是比较复杂的,由以下几部分组成:

1. 表根目录(Table Root)

表根目录是Hudi表的顶级目录,它包含了表的元数据、数据文件以及其他Hudi特定的文件和目录。它的目录结构如下:

<Table Root>
├── .hoodie
│   ├── _SUCCESS
│   ├── .temp
│   ├── .tmp
│   ├── archive
│   ├── meta.properties
│   ├── metadata
│   ├── timeline.json
│   ├── version
│   ├── write.lock
│   └── ...
├── partition_1
│   ├── .hoodie_partition_metadata
│   ├── .hoodie_partition_metadata.json
│   ├── 2021/01/01
│   │   ├── file1_20210101.parquet
│   │   ├── file2_20210101.parquet
│   │   └── ...
│   ├── 2021/01/02
│   │   ├── file1_20210102.parquet
│   │   ├── file2_20210102.parquet
│   │   └── ...
│   └── ...
├── partition_2
│   ├── .hoodie_partition_metadata
│   ├── .hoodie_partition_metadata.json
│   ├── 2021/01/01
│   │   ├── file1_20210101.parquet
│   │   ├── file2_20210101.parquet
│   │   └── ...
│   ├── 2021/01/02
│   │   ├── file1_20210102.parquet
│   │   ├── file2_20210102.parquet
│   │   └── ...
│   └── ...
├── ...
└── .hoodie_partition_metadata
  • .hoodie 目录是 Hudi 表的核心目录,它包含了 Hudi 表的元数据和其他相关文件和目录

  • .temp 目录用于存储正在写入的数据

  • .tmp 目录用于存储已完成写入但尚未提交的数据

  • archive 目录用于存储归档数据

  • metadata 目录包含了所有分区的元数据信息

  • timeline.json 文件包含了表的时间轴信息

  • version 文件包含了表的版本信息

  • write.lock 文件用于控制并发写入

2.分区目录(Partition Directory)

分区目录是按照分区键组织的目录,每个分区目录下都包含了该分区下的所有数据文件和 .hoodie_partition_metadata 文件。

.hoodie_partition_metadata 文件包含了该分区的元数据信息,例如分区键、分区路径等。

3. 数据文件(Data File)

数据文件是 Hudi 表中实际存储数据的文件,通常采用 Apache Parquet 格式存储。每个数据文件都包含了数据记录,其中记录由多个列组成。列可以是原始类型(如整数和字符串)或复杂类型(如数组和嵌套结构)。

Hudi 核心概念

Copy-on-Write (写时复制)

  • Copy-on-Write 是 Hudi 最重要的概念之一。当 Hudi 写入数据时,它不会覆盖原有的数据,而是将新数据写入到新的文件中,然后通过元数据的方式将新旧数据进行关联,这种方式称为写时复制。这个过程保证了数据的一致性和可靠性。

Delta Stream

  • Delta Stream 是指数据的增量变化,Hudi 能够实时监控这些变化,并将它们存储为新的 Delta 文件。Delta Stream 可以实现多种格式的数据输入和输出,包括 Kafka、Flume、HDFS、S3 等。

Table

  • Table 是 Hudi 中数据存储的基本单元,每个 Table 都包含了一系列的数据文件和元数据文件。Table 可以支持多种数据格式,包括 Parquet、ORC 等。

Partition

  • Partition 是指将 Table 按照一定的规则划分为多个子集,每个子集称为一个 Partition。Partition 可以按照日期、地区等方式进行划分,以便更好地管理和查询数据。

Write Handle

  • Write Handle 是 Hudi 中用于写入数据的组件,它可以将数据写入到 Hudi Table 中,并将数据写入的过程进行优化。Write Handle 包括了多种优化技术,例如 Bloom Filter、Compaction 等。

Query Handle

  • Query Handle 是 Hudi 中用于查询数据的组件,它可以通过 SQL 或者 API 的方式查询数据。Query Handle 会自动将查询请求路由到正确的 Partition 和文件中,以便更快地检索数据。

Index

  • Index 是 Hudi 中用于优化数据查询性能的组件。它可以将数据中的某些字段进行索引,并将索引存储在内存中,以便更快地查询数据。

Hoodie Timeline

  • Hoodie Timeline 是 Hudi 中用于管理数据版本的组件。它可以将每个数据文件的元数据存储为一个时间轴,以便更好地跟踪数据的变化。Hoodie Timeline 还可以用于数据回滚和恢复操作。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月亮给我抄代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值