重庆制作网站速成班物流网站建设
文章目录
- 什么是 Hudi ?
- Hudi 是如何对数据进行管理的?
- Hudi 表结构
- Hudi 核心概念
什么是 Hudi ?
Hudi 是一个用于处理大数据湖的开源框架。
大数据湖是指一个大规模的、中心化的数据存储库,其中包含各种类型的数据,如结构化数据、半结构化数据和非结构化数据,目的是为企业提供一个集中的数据存储库,从而更容易地进行数据分析和洞察。
Hudi支持数据操作模式:Insert、Update 和 Delete。这些操作是原子性的,因此在多个客户端并发访问时,数据的一致性得到了保证。另外,Hudi 支持基于时间戳的查询,使得可以轻松地查询某个时间点的数据快照。Hudi 还支持增量式处理,可以高效地处理大量的数据更新。
Hudi 是如何对数据进行管理的?
Hudi 通过管理数据的元数据,实现了对数据的管理。
具体来说,Hudi 将数据分为两个部分:数据本身和元数据。数据本身是指实际的数据,而元数据是指描述数据的数据,包括数据的结构、位置、格式、版本等信息。
Hudi 使用元数据来跟踪数据的变化,包括数据的插入、更新和删除等操作,并提供高效的查询功能,支持各种查询条件和时间点的查询。
在 Hudi 中,每个数据集都有一个元数据文件,用于描述数据集的结构、版本、位置等信息。每当数据集发生变化时,Hudi 会更新元数据文件,以便跟踪数据的变化。此外,Hudi还提供了一些工具,如命令行界面和 API,用于管理和查询数据集的元数据信息。
Hudi 还提供了两种不同的数据格式: Write-Optimized Format 和 Read-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 还可以用于数据回滚和恢复操作。
