Apache Hudi 0.9.0版本重磅发布!更强大的流式数据湖平台

2023-06-15,,

1. 重点特性

1.1 Spark SQL支持

0.9.0 添加了对使用 Spark SQL 的 DDL/DML 的支持,朝着使所有角色(非工程师、分析师等)更容易访问和操作 Hudi 迈出了一大步。 用户现在可以使用 CREATE TABLE....USING HUDICREATE TABLE .. AS SELECT 语句直接在 Hive 等目录中创建和管理表。 然后用户可以使用 INSERTUPDATEMERGE INTODELETE 语句来操作数据。 此外,INSERT OVERWRITE 语句可用于覆盖现有批处理 ETL 管道的表或分区中的现有数据。 有关更多信息,请在此处单击 SparkSQL查看文档。 有关更多实现细节,请参阅 RFC-25。

1.2 Flink集成

Flink写入支持 CDC Format的 MOR 表,打开选项 changelog.enabled时,Hudi 会持久化每条记录的所有更改标志,使用 Flink 的流读取器,用户可以根据这些更改日志进行有状态的计算。请注意当使用异步压缩时,所有中间更改都合并为一个(最后一条记录),仅具有 UPSERT 语义。
支持Bulk insert来加载现有表,可以将 write.operation 设置为 bulk_insert 来使用。
Flink支持流式读取 COW 表。
删除消息默认在流式读取模式下发出,当 changelog.enabledfalse 时,下游接收 DELETE 消息作为带有空负载的 Hudi 记录。
Flink写入现在可以更新历史分区,即删除历史分区中的旧记录然后在当前分区插入新记录,打开 index.global.enabled 使用。
通过支持不同的 Hive 版本(1.x、2.x、3.x),大大改善了 Hive 同步。
Flink 支持纯日志追加模式,在这种模式下没有记录去重,对于 COWMOR 表,每次刷新都直接写入 parquet,关闭 write.insert.deduplicate 以开启这种模式。

1.3 查询端改进

Hudi 现在可以在 Spark 中注册为数据源表。
基于Metadata Table的 Spark 读取改进。
添加了对时间旅行查询的支持。 请参考时间旅行。

1.4 写入端改进

添加了虚拟键支持,用户可以避免将元字段添加到 Hudi 表并利用现有的字段来填充记录键和分区路径。 请参考 具体配置来开启虚拟键。

Clustering改进

DeltaStreamer 和 Spark Streaming 都添加了异步Clustering支持。可以在这篇博客文章中找到更多细节。
增量读取也适用于Clustering数据。
添加了 HoodieClusteringJob 以作为独立作业来构建和执行Clustering计划。
添加了一个配置(hoodie.clustering.plan.strategy.daybased.skipfromlatest.partitions)以在创建Clustering计划时跳过最近的 N 个分区。

增强 Bulk_Insert模式(新增行写入器模式),并缺省打开,用户可以使用行写入器模式以获得更好的性能。

在 HiveSyncTool 中添加了对 HMS 的支持。 HMSDDLExecutor 是一个 DDLExecutor 实现,基于使用 HMS 的 HMS apis 直接用于执行所有 DDL 。

Spark 引擎中添加了预提交验证器框架。 用户可以利用该框架来添加验证给定提交的文件是否都存在,或是否已经删除所有无效文件等。

org.apache.hudi.client.validator.SqlQueryEqualityPreCommitValidator 可用于验证提交前后行的数据行相同
org.apache.hudi.client.validator.SqlQueryInequalityPreCommitValidator 可用于验证提交前后的数据行不相同
org.apache.hudi.client.validator.SqlQuerySingleResultPreCommitValidator 可用于验证表是否产生特定值

这些可以通过设置 hoodie.precommit.validators=<逗号分隔的验证器类名称列表> 来配置。 用户还可以通过扩展抽象类 SparkPreCommitValidator 并覆盖此方法来提供自己的实现。

用户可以选择删除用于生成分区路径的字段(hoodie.datasource.write.drop.partition.columns),以支持使用BigQuery系统查询Hudi快照。

支持华为云、百度云、金山云对象存储。

添加了对delete_partition操作的支持,用户可以在需要时利用它删除旧分区。

ORC格式支持,现在用户可以指定存储格式为ORC,注意现在暂时只支持Spark查询。

Hudi 使用不同类型的可溢出映射,用于内部处理合并(压缩、更新甚至 MOR 快照查询)。 在 0.9.0 中,我们添加了对 bitcask默认选项的压缩支持,并引入了由 RocksDB 支持,它可以在大批量更新或处理大型基本文件时性能更高。

增强对未提交的数据的自动清理,该增强在云存储上性能更优,具体来说是新增了一种新的标记机制,利用时间线服务器对底层存储执行集中协调的文件标记批量读/写。 你可以使用这个配置来启用,并在这个博客上了解更多。

1.5 DeltaStreamer改进

JDBC Source 可以采用提取 SQL 语句并从支持 JDBC 的源中增量获取数据。 这对于例如从 RDBMS 源读取数据时很有用。 请注意,这种方法可能需要定期重新引导以确保数据一致性,尽管在基于 CDC 的方法上操作要简单得多。
SQLSource 使用 Spark SQL 语句从现有表中提取数据,对于基于 SQL 的简单回填用例非常有用,例如:过去 N 个月只回填一列。
S3EventsHoodieIncrSource 和 S3EventsSource 有助于从 S3 读取数据,可靠且高效地将数据摄取到 Hudi。 现有使用 DFSSource 的方法是使用文件的最后修改时间作为检查点来拉入新文件,但是如果大量文件具有相同的修改时间,则可能会遇到丢失一些要从源读取的文件的问题。 这两个源(S3EventsHoodieIncrSource 和 S3EventsSource)通过利用从源存储桶订阅文件事件的 AWS SNS 和 SQS 服务,共同确保将数据从 S3 可靠地摄取到 Hudi。
除了使用 DeltaStreamer 使用常规偏移格式(topic_name,partition_num:offset,partition_num:offset,....),我们还为 kafka 源提取数据添加了两种新格式,即基于时间戳和组消费者偏移量。
添加了在 deltastreamer 中使用模式提供程序在模式注册表提供程序 url 中传递基本身份验证凭据的支持。
hudi-cli 的一些改进,例如SCHEDULE COMPACTIONRUN COMPACTION语句,以便轻松在 Hudi 表上调度和运行Compaction、Clustering。

2. 迁移指南

如果从 0.5.3 之前的版本迁移,还请检查下面每个后续版本的升级说明。
Hudi 在 0.9.0 中添加了更多表属性,以帮助将现有的 Hudi 表与 spark-sql 结合使用。 为了顺利地迁移,这些属性添加到 hoodie.properties 文件中。 每当 Hudi 使用较新的表版本启动时,即 2(或从 0.9.0 之前移动到 0.9.0),升级步骤将自动执行。 这个自动升级步骤对于每个 Hudi 表只会发生一次,因为hoodie.table.version 将在升级完成后在属性文件中更新。
同样如果某些用户想要将 Hudi 从表版本 2 降级到 1 或从 Hudi 0.9.0 移动到 0.9.0 之前,则添加了用于降级的命令行工具(command - downgrade),需要使用0.9.0版本中的hudi-cli工具。
在此版本中我们添加了一个新框架来跟踪代码中的配置属性,不再使用包含属性名称和值的字符串变量。 这一举措有助于我们自动生成配置文档。虽然我们仍然支持旧的字符串变量,但鼓励用户使用新的 ConfigProperty 配置项。在大多数情况下,它就像在相应的替代方法上调用 .key().defaultValue() 一样简单。 例如 RECORDKEY_FIELD_OPT_KEY 可以替换为 RECORDKEY_FIELD_NAME.key()

3. 感谢

感谢参与0.9.0版本的所有贡献者,欢迎广大数据湖爱好者加入Apache Hudi社区,欢迎star & fork https://github.com/apache/hudi

4. 源码下载

源码下载 : Apache Hudi 0.9.0 Source Release
Maven仓库包地址: 地址

Apache Hudi 0.9.0版本重磅发布!更强大的流式数据湖平台的相关教程结束。

《Apache Hudi 0.9.0版本重磅发布!更强大的流式数据湖平台.doc》

下载本文的Word格式文档,以方便收藏与打印。