前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache Hudi 0.15.0 版本发布

Apache Hudi 0.15.0 版本发布

作者头像
ApacheHudi
发布2024-07-04 14:59:55
4050
发布2024-07-04 14:59:55
举报
文章被收录于专栏:ApacheHudi
Apache Hudi 0.15.0 版本带来了增强的引擎集成、新功能和多个领域的改进。其中包括 Spark 3.5 和 Scala 2.13 支持、Flink 1.18 支持、更好的 Trino Hudi 原生连接器支持以及新引入的与 Hadoop 无关的存储和 I/O 抽象。我们鼓励用户在使用 0.15.0 版本之前查看下面的版本亮点[1]和迁移指南[2],了解相关模块和 API 更改[3]以及行为更改[4]。

迁移指南

此版本保留与 0.14.0 版本相同的表版本 (6),如果从 0.14.0 升级,则无需升级表版本。有一些模块和 API 更改以及行为更改,如下所述,用户在使用 0.15.0 版本之前应采取相应的操作。

如果从旧版本(0.14.0 之前)迁移,请按顺序查看每个旧版本的升级说明。

Bundle包更新

新的 Spark Bundle 包

我们通过两个新 Bundle 包扩展了对 Spark 3.5 的 Hudi 支持:

  • • Spark 3.5 和 Scala 2.12:hudi-spark3.5-bundle_2.12[5]
  • • Spark 3.5 和 Scala 2.13:hudi-spark3.5-bundle_2.13[6]
Scala 2.13 的新实用程序包

除了为 Spark 3.5 和 Scala 2.13 添加 Bundle 包外,我们还添加了新的实用程序 Bundle 包以用于 Scala 2.13、hudi-utilities-bundle_2.13[7] 和 hudi-utilities-slim-bundle_2.13[8]。

新的和已弃用的 Flink Bundle包

我们通过一个新的Bundle包 hudi-flink1.18-bundle[9] 扩展了对 Flink 1.18 的 Hudi 支持。该版本删除了 Flink 1.13 对 Hudi 的支持。

模块和 API 更改

Hudi 存储和 I/O 抽象

此版本引入了与 Hadoop 无关的新存储和 I/O 抽象,以改进与查询引擎的集成,包括 Trino,它使用自己的本机文件系统 API。核心 Hudi 类(包括 HoodieTableMetaClient 、 HoodieBaseFile 、 HoodieLogFile 、 HoodieEngineContext 等)现在依赖于新的存储和 I/O 类。如果直接在应用程序中使用这些类,则需要更改集成代码和用法。有关更多详细信息,请查看此部分[10]。

模块更改

作为引入新的存储和 I/O 抽象并使核心读取器逻辑与 Hadoop 无关的一部分,此版本重构了 Hudi 模块以清楚地反映分层。具体说来

  • • hudi-io 添加了用于 I/O 相关功能的模块,Hudi 原生 HFile 读取器实现位于此新模块中;
  • • hudi-common 模块包含 Apache Hudi 技术规范的核心实现,现在独立于 Hadoop;
  • • hudi-hadoop-common 模块包含基于 Hadoop 文件系统 API 的实现,可与 Spark、Flink、Hive 和 Presto 等引擎上的模块一起 hudi-common 使用。

如果之前使用 hudi-common module 作为依赖项,而 Hadoop 文件系统 API 和实现则现在应包含所有三个模块 hudi-io 、 hudi-common 和 hudi-hadoop-common 和 作为依赖项。请注意,Presto 和 Trino 将基于 Hudi 0.15.0 版本发布,并进行此类更改。

锁定提供程序 API 更改

LockProvider 实例化现在需要实例 StorageConfiguration 作为构造函数的第二个参数。如果之前扩展 LockProvider 为实现自定义锁提供程序,则需要更改构造函数以匹配上述构造函数签名。下面是一个示例:

代码语言:javascript
复制
public classXYZLockProviderimplementsLo   ckProvider<String>,Serializable{
...

publicXYZLockProvider(final LockConfiguration lockConfiguration, final StorageConfiguration<?> conf){
...
}

...
}

行为更改

改善Clean表服务

我们改进了默认的清理程序行为,仅在没有inflight计划中时才安排新的清理程序计划,方法是将hoodie.clean.allow.multiple[11]默认值从 true 翻转到 false 。这简化了启用元数据表时的清理表服务。该配置现已弃用,并将在下一个版本后删除。

允许在插入时重复

现在我们默认允许在操作时 INSERT 使用重复键,即使将插入路由为与现有文件合并(以确保文件大小),也可以将hoodie.merge.allow.duplicate.on.inserts默认值从 false 翻转到 true 。这仅与 INSERT 操作相关,因为 UPSERT 和 DELETE 操作始终确保唯一的键约束。

将 MOR 快照同步到元存储

为了更好地支持对 OLAP 引擎上的 MOR 表的快照查询,默认情况下,MOR 快照或 RT 会使用表名同步到元存储,方法是将hoodie.meta.sync.sync_snapshot_with_table_name默认值从 false 翻转到 true

Flink Option 默认翻转

默认值 read.streaming.skip_clustering 为 false 在此版本之前,这可能会导致 Flink 流式读取读取被替换的聚簇文件切片和重复数据的情况(与 read.streaming.skip_compaction情况类似), 0.15.0 版本通过将默认的 read.streaming.skip_clusteringread.streaming.skip_compaction 翻转到 true ,使 Flink 流式处理在所有情况下都跳过聚簇和压缩瞬间,以避免读取相关文件切片。

版本亮点

Hudi 存储和 I/O 抽象

为了提供更好的与查询引擎(包括使用原生的文件系统 API 的 Trino)的集成体验,此版本引入了与 Hadoop 无关的新存储和 I/O 抽象。具体来说,该版本引入了 Hudi 存储抽象 HoodieStorage ,它提供了所有 I/O API 来读取和写入存储上的文件和目录,例如 open 、 read 等。此类可以扩展以实现存储层优化,例如缓存、联合存储布局、热/冷存储分离等。此类需要基于特定系统实现,例如 Hadoop FileSystem 和 Trino TrinoFileSystem 的 。引入了用于访问文件系统的核心类:

  • StoragePath :表示存储上文件或目录的路径,它取代了 Hadoop Path
  • StoragePathInfo :保留 Hudi 使用的路径、长度、isDirectory、修改时间等信息,取代了 Hadoop FileStatus
  • StorageConfiguration :通过包装相应文件系统使用的特定配置类对象来提供存储配置。

引入抽象 HoodieIOFactory 是为了提供 API 来为 I/O 创建读取器和写入器,而无需依赖 Hadoop 类。通过使用新的存储和 I/O 抽象,我们在此版本中使 Hudi Hadoop 中的 hudi-common 模块和核心读取器逻辑独立于此版本。我们引入了一个新 hudi-hadoop-common 模块,其中包含基于Hadoop的文件系统API和实现的实现 HoodieStorage HoodieIOFactory ,以及依赖于Hadoop的API的现有读取器和写入器逻辑。该 hudi-hadoop-common 模块由 Spark、Flink、Hive 和 Presto 集成使用,其中逻辑保持不变。对于独立于Hadoop的引擎,集成应使用 hudi-common 模块并插入其自己的实现, HoodieStorage 并通过 HoodieIOFactory 设置新配置 hoodie.storage.classhoodie.io.factory.class 存储配置。

引擎支持

Spark 3.5 和 Scala 2.13 支持

此版本添加了对 Spark 3.5 的支持和 Scala 2.13 的支持;使用 Spark 3.5 的用户可以使用基于 Scala 版本的新 Spark Bundle包:hudi-spark3.5-bundle_2.12 和 hudi-spark3.5-bundle_2.13。此版本继续支持 Spark 3.4、3.3、3.2、3.1、3.0 和 2.4。要快速开始使用 Hudi 和 Spark 3.5,可以浏览我们的快速入门指南[12]。

Flink 1.18 支持

该版本添加了对 Flink 1.18 的支持,并添加了新的编译 maven 配置文件 flink1.18 和新的 Flink bundle hudi-flink1.18-bundle。

Hudi-Native HFile 读取器

Hudi 使用 HFile 格式作为基本文件格式,用于在元数据表 (MDT) 中存储各种元数据,例如文件列表、列统计信息和布隆过滤器,因为 HFile 格式针对范围扫描和点查找进行了优化。HFile 格式最初由 HBase 设计和实现。为了避免 HBase 依赖冲突,并通过独立于 Hadoop 的实现轻松实现引擎集成,我们在 Java 中实现了一个新的 HFile 读取器,它独立于 HBase 或 Hadoop 依赖项。此 HFile 读取器向后兼容现有的 Hudi 版本和存储格式。我们还编写了一个 HFile 格式规范,它定义了 Hudi 所需的 HFile 格式。这使得HFile读取器和写入器通过遵循此规范实现在任何语言中成为可能,例如,C++或Rust。

Hudi Utilities 中的新功能

StreamContext 和 SourceProfile 接口

对于 Hudi Streamer,我们引入了新的 StreamContextSourceProfile 接口。这些旨在包含有关如何在 StreamSync 的下一轮同步中从源使用数据并写入(例如,并行性)的详细信息。这允许用户控制源读取和数据写入目标 Hudi 表的行为和性能。

增强的 Proto Kafka 源代码支持

我们添加了对使用 Confluent 原型反序列化器进行反序列化的支持,通过新配置 hoodie.streamer.source.kafka.proto.value.deserializer.class 来指定 Kafka Proto 有效负载反序列化器类。

忽略 Hudi Streamer 中的检查点

Hudi streamer 有一个新选项, --ignore-checkpoint 可以忽略源的最后一个提交检查点。此选项应按照建议使用唯一值、时间戳值或 UUID 进行设置。设置此配置表示后续同步应忽略源的最后一个提交检查点。配置值存储在提交历史记录中,因此使用相同的值设置配置不会产生任何影响。此配置可用于 kafka 主题更改等场景,在这些场景中,我们希望在切换主题后从最新或最早的偏移量开始引入(在这种情况下,我们希望忽略先前提交的检查点,并依赖其他配置来选择起始偏移量)。

Meta Sync 改进

Glue Catalog Sync 中的并行列表

AWS Glue Catalog 同步现在支持并行列出分区,以提高列表性能并减少元同步延迟。添加了三个新配置来控制列表并行性:

  • hoodie.datasource.meta.sync.glue.all_partitions_read_parallelism :列出所有分区的并行性(首次同步)。
  • hoodie.datasource.meta.sync.glue.changed_partitions_read_parallelism :列出更改的分区(第二次和后续同步)的并行性。
  • hoodie.datasource.meta.sync.glue.partition_change_parallelism :更改操作(如创建、更新和删除)的并行性。
使用元数据表进行 BigQuery 同步优化

现在如果启用了元数据表,BigQuery Sync 会从元数据表加载一次所有分区,以提高文件列表性能。

向 M3 报告指标

添加了新的 MetricsReporter 实现 M3MetricsReporter ,以支持向 M3 报告指标。用户现在可以通过在 hoodie.metrics.m3.host 和 hoodie.metrics.m3.port 中设置 hoodie.metrics.reporter.type 为 M3 及其相应的主机地址和端口来启用向 M3 报告指标。

其他功能和改进

Schema异常分类

该版本引入了 schema 相关异常的分类 (HUDI-7486[13]),以便用户轻松了解根本原因,包括由于非法 schema 将记录从 Avro 转换为 Spark Row 时出现的错误,或者记录与提供的 schema 不兼容。

记录大小估计改进

通过额外考虑替换提交和增量提交,改进了 Hudi 中的记录大小估计 (HUDI-7429[14])。

为 Athena 使用 S3 Scheme

最近的 Athena 版本在分区位置有 s3a 方案时静默删除 Hudi 数据。使用分区 s3 方案重新创建表可解决此问题。我们添加了 AWS Glue Catalog 同步 (HUDI-7362[15]) 中 Hudi 表分区使用 s3 方案的修复。

引用链接

[1] 版本亮点: [https://hudi.apache.org/releases/release-0.15.0/#release-highlights](https://hudi.apache.org/releases/release-0.15.0/#release-highlights) [2] 迁移指南: [https://hudi.apache.org/releases/release-0.15.0/#migration-guide-overview](https://hudi.apache.org/releases/release-0.15.0/#migration-guide-overview) [3] 模块和 API 更改: [https://hudi.apache.org/releases/release-0.15.0/#module-and-api-changes](https://hudi.apache.org/releases/release-0.15.0/#module-and-api-changes) [4] 行为更改: [https://hudi.apache.org/releases/release-0.15.0/#behavior-changes](https://hudi.apache.org/releases/release-0.15.0/#behavior-changes) [5] hudi-spark3.5-bundle_2.12: [https://mvnrepository.com/artifact/org.apache.hudi/hudi-spark3.5-bundle_2.12](https://mvnrepository.com/artifact/org.apache.hudi/hudi-spark3.5-bundle_2.12) [6] hudi-spark3.5-bundle_2.13: [https://mvnrepository.com/artifact/org.apache.hudi/hudi-spark3.5-bundle_2.13](https://mvnrepository.com/artifact/org.apache.hudi/hudi-spark3.5-bundle_2.13) [7] hudi-utilities-bundle_2.13: [https://mvnrepository.com/artifact/org.apache.hudi/hudi-utilities-bundle_2.13](https://mvnrepository.com/artifact/org.apache.hudi/hudi-utilities-bundle_2.13) [8] hudi-utilities-slim-bundle_2.13: [https://mvnrepository.com/artifact/org.apache.hudi/hudi-utilities-slim-bundle_2.13](https://mvnrepository.com/artifact/org.apache.hudi/hudi-utilities-slim-bundle_2.13) [9] hudi-flink1.18-bundle: [https://mvnrepository.com/artifact/org.apache.hudi/hudi-flink1.18-bundle](https://mvnrepository.com/artifact/org.apache.hudi/hudi-flink1.18-bundle) [10] 此部分: [https://hudi.apache.org/releases/release-0.15.0/#hudi-storage-and-io-abstractions-1](https://hudi.apache.org/releases/release-0.15.0/#hudi-storage-and-io-abstractions-1) [11] hoodie.clean.allow.multiple: [https://hudi.apache.org/docs/configurations#hoodiecleanallowmultiple](https://hudi.apache.org/docs/configurations#hoodiecleanallowmultiple) [12] 快速入门指南: [https://hudi.apache.org/docs/quick-start-guide](https://hudi.apache.org/docs/quick-start-guide) [13] HUDI-7486: [https://issues.apache.org/jira/browse/HUDI-7486](https://issues.apache.org/jira/browse/HUDI-7486) [14] HUDI-7429: [https://issues.apache.org/jira/browse/HUDI-7429](https://issues.apache.org/jira/browse/HUDI-7429) [15] HUDI-7362: [https://issues.apache.org/jira/browse/HUDI-7362](https://issues.apache.org/jira/browse/HUDI-7362)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ApacheHudi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 迁移指南
    • Bundle包更新
      • 模块和 API 更改
        • 行为更改
        • 版本亮点
          • Hudi 存储和 I/O 抽象
            • 引擎支持
              • Hudi-Native HFile 读取器
                • Hudi Utilities 中的新功能
                  • Meta Sync 改进
                    • 向 M3 报告指标
                      • 其他功能和改进
                      相关产品与服务
                      对象存储
                      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档