hudi 0.11.0版本正式release啦,接下来跟着官网介绍看看本版本引入了哪些新的功能特性吧!
文章内容翻译自:hudi release 0.11.0
版本亮点
多模式索引
在 0.11.0 中,我们默认为 Spark writer 启用具有同步更新和基于元数据表的文件列表的元数据表(metadata table),以提高在大型 Hudi 表上的分区和文件列表的性能。 在用户方面,用户需要将其设置为true以从中受益。 元数据表和相关文件列表功能仍然可以通过设置 hoodie.metadata.enable=false 来关闭。 因此,使用异步表服务部署 Hudi 的用户需要配置来锁定服务。 如果您不关心此功能,您可以另外设置 hoodie.metadata.enable=false 并像以前一样使用 Hudi。
我们在元数据表中引入了多模式索引,以显着提高文件索引中的查找性能和数据跳过的查询延迟。 元数据表中添加了两个新索引:
-
布隆过滤器索引包含文件级布隆过滤器,以便在作者进行更新插入期间将密钥查找和文件修剪作为布隆索引的一部分
-
列统计索引包含所有/感兴趣的列的统计信息,以改进基于写入器和读取器中的键和列值范围的文件修剪,例如在 Spark 中的查询计划中。
默认情况下它们被禁用。 您可以通过将 hoodie.metadata.index.bloom.filter.enable 和 hoodie.metadata.index.column.stats.enable 分别设置为 true 来启用它们。
有关升级和部署的详细说明,请参阅元数据表指南。
使用元数据表跳过数据
随着在元数据表中增加了对列统计的支持,数据跳过现在依赖于元数据表的列统计索引 (CSI),而不是它自己的定制索引实现(与 0.10.0 中添加的空间曲线相比),从而允许对所有数据集进行数据跳过,无论它们是否执行布局优化程序(如聚类)。
数据跳过支持标准函数(以及一些常用表达式),允许您将常用标准转换应用于查询过滤器中列中的原始数据。 例如,如果您有将时间戳存储为字符串的列“ts”,您现在可以在谓词中使用人类可读的日期来查询它,如下所示: date_format(ts, "MM/dd/yyyy" ) < "04/01/ 2022”。
注意:目前仅在读优化模式下的 COW 表和 MOR 表中支持 Data Skipping。 在 HUDI-3866 中跟踪了对 MOR 表的全面支持的工作。
有关更多信息,请参阅性能指南。
异步索引器
在 0.11.0 中,我们添加了一个新的异步服务,用于索引我们丰富的表服务集。 它允许用户在元数据表中创建不同类型的索引(例如,文件、布隆过滤器和列统计信息),而不会阻塞摄取。 索引器在时间线上添加一个新的动作索引。 虽然索引过程本身是异步的并且对写入器是非阻塞的,但需要配置锁提供程序以安全地协调进程与工作中的写入器。
有关详细信息,请参阅索引指南。
Spark 数据源改进
Hudi 的 Spark 低级集成进行了相当大的改革,整合了通用流程以共享基础架构,并在查询数据时提高了计算和数据吞吐量效率。
- 没有日志文件的 MOR 查询(增量查询除外)表现在在读取数据时利用矢量化 Parquet 读取器,这意味着 Parquet 读取器现在能够利用现代处理器矢量化指令来进一步加快数据解码速度。 默认启用。
- 当使用标准的 Record Payload 实现(例如,OverwriteWithLatestAvroPayload)时,MOR 表只会在查询引用的列之上获取严格必要的列(主键、预组合键),从而大大减少浪费的数据吞吐量以及花费在解压和解码数据的时间。 例如,这对于具有 1000 列的“宽”MOR 表非常有利。
有关相关配置更新,请参阅迁移指南。
Spark 的 Schema-on-read
在 0.11.0 中,用户现在可以轻松更改 Hudi 表的当前模式,以适应不断变化的数据模式。 通过 ALTER TABLE 语法为 Spark 3.1.x 和 Spark 3.2.1 添加了 Spark SQL DDL 支持(实验性)。
有关更多详细信息,请参阅模式演变指南。
Spark SQL 改进
-
用户可以使用非主键字段更新或删除 Hudi 表中的记录。
-
现在通过时间戳支持时间旅行查询作为语法。 (仅限 Spark 3.2+)
-
添加了 CALL 命令以支持在 Hudi 表上调用更多操作。
有关更多详细信息和示例,请参阅快速入门 – Spark 指南。
Spark 版本和捆绑包
-
增加了 Spark 3.2 支持; 使用 Spark 3.2 的用户可以使用 hudi-spark3.2-bundle 或 hudi-spark3-bundle(旧版包名称)。
-
Spark 3.1 将继续通过 hudi-spark3.1-bundle 获得支持。
-
Spark 2.4 将继续通过 hudi-spark2.4-bundle 或 hudi-spark-bundle(旧包名称)得到支持。
有关使用更新,请参阅迁移指南。
瘦的实用程序包
在 0.11.0 中,添加了一个新的 hudi-utilities-slim-bundle 以排除可能导致与其他框架(如 Spark)发生冲突和兼容性问题的依赖项。
- hudi-utilities-slim-bundle 适用于 Spark 3.1 和 2.4。
- hudi-utilities-bundle 继续与 Spark 3.1 一起使用,就像在 Hudi 0.10.x 中一样。
Flink 集成改进
- 在 0.11.0 中,同时支持 Flink 1.13.x 和 1.14.x。
- 支持 Map 和 Array 等复杂数据类型。 复杂数据类型可以嵌套在另一个组件数据类型中。
- 添加了一个基于 DFS 的 Flink 目录,目录标识符为 hudi。 您可以直接通过 API 实例化目录,也可以使用 CREATE CATALOG 语法来创建它。
- Flink 在正常的 UPSERT 和 BULK_INSERT 操作中支持 Bucket Index。 与默认的基于状态的 Flink 索引不同,Bucket Index是在恒定数量的buckets中。 将 SQL 选项 index.type 指定为 BUCKET 以启用它。
谷歌 BigQuery 集成
在 0.11.0 中,Hudi 表可以作为外部表从 BigQuery 中查询。 用户可以将 org.apache.hudi.gcp.bigquery.BigQuerySyncTool 设置为 HoodieDeltaStreamer 的同步工具实现,并使目标 Hudi 表在 BigQuery 中可发现。 更多请参阅 BigQuery 集成指南页面了解更多详情。
注意:这是一项实验性功能,仅适用于 hive 样式的分区 Copy-On-Write 表。
AWS Glue Meta同步
在 0.11.0 中,Hudi 表可以直接通过 AWS 开发工具包同步到 AWS Glue 数据目录。 用户可以将 org.apache.hudi.aws.sync.AwsGlueCatalogSyncTool 设置为 HoodieDeltaStreamer 的同步工具实现,并使目标 Hudi 表在 Glue 目录中可发现。 有关更多详细信息,请参阅同步到 AWS Glue 数据目录指南页面。
注意:这是一个实验性功能。
DataHub Meta同步
在 0.11.0 中,Hudi 表的元数据(特别是模式和上次同步提交时间)可以同步到 DataHub。 用户可以将 org.apache.hudi.sync.datahub.DataHubSyncTool 设置为 HoodieDeltaStreamer 的同步工具实现,并将目标表同步为 DataHub 中的 Dataset。 有关详细信息,请参阅同步到 DataHub 指南页面。
注意:这是一个实验性功能。
加密
在 0.11.0 中,添加了对 Spark 3.2 的支持,并附带了 Parquet 1.12,它为 Hudi(写入时复制表)带来了加密功能。 有关详细信息,请参阅加密指南页面。
Bucket Index
0.11.0增加了一种高效、轻量级的索引类型bucket index。 它使用基于记录键的散列函数将记录分配到存储桶,其中每个存储桶对应于单个文件组。 要使用此索引,请将索引类型设置为 BUCKET,并将 hoodie.storage.layout.partitioner.class 设置为 org.apache.hudi.table.action.commit.SparkBucketIndexPartitioner。 对于 Flink,设置 index.type=BUCKET。
更多详情请参考配置页面中的hoodie.bucket.index.*。
保存点和恢复
灾难恢复是任何生产部署中的关键任务功能。 尤其是在涉及存储数据的系统时。 Hudi 从一开始就为 COW 表提供了保存点和恢复功能。 在 0.11.0 中,我们添加了对 MOR 表的支持。
有关此功能的更多信息,请参阅灾难恢复。
Pulsar 写提交回调
Hudi 用户可以使用 org.apache.hudi.callback.HoodieWriteCommitCallback 在成功提交时调用回调函数。 在 0.11.0 中,我们在现有的 HTTP 回调和 Kafka 回调的基础上增加了 HoodieWriteCommitPulsarCallback。 详细设置请参考配置页面。
HiveSchemaProvider
在 0.11.0 中,添加了 org.apache.hudi.utilities.schema.HiveSchemaProvider 用于从用户定义的配置单元表中获取模式。 当在 HoodieDeltaStreamer 中跟踪 Hive 表而不是提供 avro 模式文件时,这很有用。
迁移指南
捆绑使用更新
-
不再正式支持 3.0.x 的 Spark 捆绑包。 鼓励用户升级到 Spark 3.2 或 3.1。
-
鼓励用户使用名称中包含特定 Spark 版本的包 (hudi-sparkX.Y-bundle) 并远离旧包 (hudi-spark-bundle 和 hudi-spark3-bundle)。
-
Spark 或 Utilities 包在运行时不再需要额外的 spark-avro 包; 选项 –package org.apache.spark:spark-avro_2.1: 可以删除。
配置更新
-
对于 MOR 表,写入和读取都需要 hoodie.datasource.write.precombine.field。
-
仅在使用 BigQuery 集成时设置 hoodie.datasource.write.drop.partition.columns=true。
-
对于依赖提取物理分区路径的 Spark 阅读器,设置 hoodie.datasource.read.extract.partition.values.from.path=true 以保持与现有行为的兼容。
-
Spark 的默认索引类型从 BLOOM 更改为 SIMPLE (HUDI-3091)。 如果您当前依赖于默认的 BLOOM 索引类型,请相应地更新您的配置。
原始发行说明
原始发行说明可在此处获得。
本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://lrting.top/backend/bigdata/hudi/4579/