Apache Hudi 0.12.0版本重磅发布!

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Apache Hudi 0.12.0版本重磅发布!

Presto-Hudi 连接器

从 PrestoDB 0.275 版本开始,用户现在可以利用原生 Hudi 连接器来查询 Hudi 表。它与 Hive 连接器中的 Hudi 支持相当。要了解有关连接器使用的更多信息,请查看 prestodb 文档[1]

存档点以外的存档

Hudi 支持保存点和恢复功能,这对备份和灾难恢复场景很有用。更多信息查看这里[2]。在 0.12.0 之前,给定表的归档在第一次保存点提交之后就无法再次提交,但是社区已经要求放宽这个限制,以便可以在活动时间线中保留一些粗粒度的提交并执行时间点查询。因此在 0.12.0 中用户现在可以通过启用 hoodie.archive.beyond.savepoint写入配置,让存档在保存点提交之后继续进行,这为 Hudi 用户开启了新的机遇。例如通过每天为较旧的提交添加一个保存点(假设 > 30 天),可以将提交保留多年。并使用as.of.instant和任何较旧的保存点提交查询 hudi 表。这样 Hudi 不需要在活动时间线中为较旧的提交保留每个提交。

注意:如果启用此功能,则无法支持还原。此限制将在未来的版本中放宽,可以在 HUDI-4500 中跟踪此功能的开发。

基于文件系统的锁

对于使用乐观并发控制的多个写入器,Hudi 已经支持基于Zookeeper、Hive Metastore 或 Amazon DynamoDB。在0.12.0版本中,新添加基于文件系统的锁。不像需要其他锁提供者中的外部系统,此实现基于原子获取/释放锁底层文件系统的创建/删除操作。要使用此锁,用户需要设置以下配置

hoodie.write.concurrency.mode=optimistic_concurrency_control
hoodie.write.lock.provider=org.apache.hudi.client.transaction.lock.FileSystemBasedLockProvider

Deltastreamer 终止策略

用户现在可以使用 deltastreamer 连续模式配置写入后终止策略。例如如果连续 5 次没有来自源的新数据,用户可以配置优雅关闭。这是终止策略的接口。

/**
 * Post write termination strategy for deltastreamer in continuous mode.
 */
public interface PostWriteTerminationStrategy {
  /**
   * Returns whether deltastreamer needs to be shutdown.
   * @param scheduledCompactionInstantAndWriteStatuses optional pair of scheduled compaction instant and write statuses.
   * @return true if deltastreamer has to be shutdown. false otherwise.
   */
  boolean shouldShutdown(Option<Pair<Option<String>, JavaRDD<WriteStatus>>> scheduledCompactionInstantAndWriteStatuses);
}

这可能有助于引导新表,与其做一个批量加载或bulk_insert,利用大型集群写入大量数据,不如在所有数据都被引导后,在连续模式下启动deltastreamer并添加一个关闭策略来终止。这样每个批次可以更小,并且可能不需要大型集群来引导数据,Hudi内置一个开箱即用的具体实现,NoNewDataTerminationStrategy[3]。用户可以随意实施他们认为合适的策略。

Spark 3.3 支持

0.12.0添加了 Spark 3.3 支持,使用 Spark 3.3 的用户可以使用 hudi-spark3.3-bundlehudi-spark3-bundle。将继续支持 Spark 3.2、Spark 3.1 和 Spark 2.4。请查看迁移指南以获取bundle更新[4]

Spark SQL 支持改进

• 通过调用Call Procedure支持升级、降级、引导、清理、回滚和修复。

• 支持分析表。

• 通过 Spark SQL 支持创建/删除/显示/刷新索引语法。

Flink 1.15 支持

Flink 1.15.x 与 Hudi 集成,编译代码时使用配置文件参数 -Pflink1.15 适配版本。或者使用 hudi-flink1.15-bundle。Flink 1.14 和 Flink 1.13 将继续得到支持,请查看迁移指南以获取bundle更新[5]

Flink 集成改进

• 批处理模式读取支持数据跳过,设置 SQL 选项 metadata.enabledhoodie.metadata.index.column.stats.enableread.data.skipping.enabled为 true 以启用它。

• 添加了一个基于 HMS 的 Flink 目录,目录标识符为 hudi。可以直接通过 API 实例化目录,也可以使用 CREATE CATALOG语法来创建它。指定目录选项 'mode' = 'hms'以切换到 HMS 目录。默认情况下,目录处于 dfs模式。

• Flink INSERT 操作支持异步Clustering,设置 SQL 选项 clustering.schedule.enabledclustering.async.enabled 为 true 以启用它。启用此功能时将异步连续调度Clustering子管道,以将小文件连续合并为更大的文件。

性能改进

这个版本带来了更多的改进,使 Hudi 成为性能最好的湖存储格式。一些显着的改进是:

• 通过 Spark Datasource与 sql 缩小了写入的性能差距。以前数据源写入速度更快。

• 所有内置密钥生成器都实现了更高性能的 Spark 特定 API。

• 将批量插入操作中的 UDF 替换为 RDD 转换以降低 serde 成本。

• 优化了数据跳过中的列统计索引性能。

我们最近将 Hudi 与 TPC-DS 工作负载进行了基准测试。请查看我们的博客[6]了解更多详情。

迁移指南

在此版本中,下面列出了一些 API 和配置更新,这些更新保证了新的表格版本。因此,最新的表版本[7]是 5。对于旧版本的现有 Hudi 表,将自动执行一次性升级步骤。在升级到 Hudi 0.12.0 之前,请注意以下更新。

配置更新

在此版本中,一些配置的默认值已更改。它们如下:

hoodie.bulkinsert.sort.mode:此配置用于确定批量插入记录的排序模式。它的默认值已从 GLOBAL_SORT 更改为 NONE,这意味着不进行排序,并且在开销方面与 spark.write.parquet() 匹配。

hoodie.datasource.hive_sync.partition_value_extractor:此配置用于在 Hive 同步期间提取和转换分区值。其默认值已从 SlashEncodedDayPartitionValueExtractor更改为 MultiPartKeysValueExtractor。如果您依赖之前的默认值(即没有明确设置),则需要将配置设置为 org.apache.hudi.hive.SlashEncodedDayPartitionValueExtractor。从此版本开始,如果未设置此配置并启用 Hive 同步,则将根据分区字段数以及是否启用 Hive 样式分区自动推断分区值提取器类。

• 如果未手动设置,将从其他配置的值推断以下配置:

META_SYNC_BASE_FILE_FORMAT:从 org.apache.hudi.common.table.HoodieTableConfig.BASE_FILE_FORMAT 推断

META_SYNC_ASSUME_DATE_PARTITION:从 org.apache.hudi.common.config.HoodieMetadataConfig.ASSUME_DATE_PARTITIONING 推断

META_SYNC_DECODE_PARTITION:从 org.apache.hudi.common.table.HoodieTableConfig.URL_ENCODE_PARTITIONING 推断

META_SYNC_USE_FILE_LISTING_FROM_METADATA:从 org.apache.hudi.common.config.HoodieMetadataConfig.ENABLE 推断

API 更新

SparkKeyGeneratorInterface中,getRecordKeyAPI 的返回类型已从 String 更改为 UTF8String。

// Before
String getRecordKey(InternalRow row, StructType schema); 
// After
UTF8String getRecordKey(InternalRow row, StructType schema);

Fallback分区

如果分区字段值为 null,则 Hudi 具有回退机制,而不是使写入失败。在 0.9.0 之前,__HIVE_DEFAULT_PARTITION__被用作备用分区。在 0.9.0 之后,由于一些重构,fallback 分区更改为default分区,此默认分区不适用于某些查询引擎。因此我们将备用分区从 0.12.0 切换到 __HIVE_DEFAULT_PARTITION__。我们添加了一个升级步骤,如果现有的 Hudi 表有一个名为 default的分区,我们将无法升级。用户应将此分区中的数据重写到名为 __HIVE_DEFAULT_PARTITION__分区中。但是如果您有意将分区命名为默认分区,则可以使用配置 hoodie.skip.default.partition.validation绕过它。

Bundle更新

• hudi-aws-bundle 从 hudi-utilities-bundle 或 hudi-spark-bundle 中提取与 aws 相关的依赖项。为了使用 Glue 同步、Cloudwatch 指标报告器或 DynamoDB 锁提供程序等功能,用户需要提供 hudi-aws-bundle jar 以及 hudi-utilities-bundle 或 hudi-spark-bundle jar。

• 添加了 Spark 3.3 支持;使用 Spark 3.3 的用户可以使用 hudi-spark3.3-bundle 或 hudi-spark3-bundle(旧版包名称)。

• Spark 3.2 将继续通过 hudi-spark3.2-bundle 支持

• Spark 3.1 将继续通过 hudi-spark3.1-bundle 支持

• Spark 2.4 将继续通过 hudi-spark2.4-bundle 或 hudi-spark-bundle(旧包名称)支持

• 增加 Flink 1.15 支持;使用 Flink 1.15 的用户可以使用 hudi-flink1.15-bundle

• Flink 1.14 将继续通过 hudi-flink1.14-bundle 支持

• Flink 1.13 将继续通过 hudi-flink1.13-bundle 支持

感谢

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

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
4月前
|
缓存 安全 Java
阿里云数据库 SelectDB 内核 Apache Doris 2.0.6 版本正式发布
阿里云数据库 SelectDB 内核 Apache Doris 2.0.6 版本正式发布
|
7天前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。
|
4月前
|
SQL 存储 Apache
Apache Doris 2.1.3 版本正式发布
Apache Doris 2.1.3 版本正式发布!该版本在功能特性上对数据湖、物化视图、负载管理等方面进行了多项更新,进一步简化湖仓一体架构、加速了查询性能。 欢迎大家下载体验~
|
2月前
|
SQL JSON Apache
Apache Doris 2.1.5 版本正式发布
在湖仓一体、多表物化视图、半结构化数据分析等方面进行了全面更新及改进,同时在倒排索引、查询优化器、查询引擎、存储管理等 10 余方向上完成了若干问题修复
|
2月前
|
SQL 分布式计算 Apache
Apache Doris + Apache Hudi 快速搭建指南|Lakehouse 使用手册(一)
本文将在 Docker 环境下,为读者介绍如何快速搭建 Apache Doris + Apache Hudi 的测试及演示环境,并对各功能操作进行演示,帮助读者快速入门。
Apache Doris + Apache Hudi 快速搭建指南|Lakehouse 使用手册(一)
|
3月前
|
弹性计算 JSON Cloud Native
Apache Doris 2.0.11 版本正式发布
Apache Doris 2.0.11 版本已于 2024 年 6 月 5 日正式与大家见面,该版本提交了 123 个改进项以及问题修复,进一步提升了系统的性能及稳定性,欢迎大家下载体验。
|
3月前
|
关系型数据库 MySQL BI
Apache Doris 2.0.12 版本正式发布
Apache Doris 2.0.12发布,含99项改进和修复。
|
3月前
|
SQL Java Apache
阿里云数据库 SelectDB 版内核 Apache Doris 2.1.4 版本正式发布
亲爱的社区小伙伴们,Apache Doris 2.1.4 版本已于 2024 年 6 月 26 日正式发布。在 2.1.4 版本中,我们对数据湖分析场景进行了多项功能体验优化,重点修复了旧版本中异常内存占用的问题,同时提交了若干改进项以及问题修复,进一步提升了系统的性能、稳定性及易用性,欢迎大家下载使用。
|
3月前
|
消息中间件 Java Kafka
实时计算 Flink版操作报错合集之从hudi读数据,报错NoSuchMethodError:org.apache.hudi.format.cow.vector.reader.PaequetColumnarRowSplit.getRecord(),该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
分布式计算 Java Apache

推荐镜像

更多