数据湖框架 Apache Hudi 0.11 版本重磅发布!
0.11 版本包含了来自61个贡献者的638个commits!
多模式索引
在 0.11.0 中,我们默认为 Spark writer 启用具有同步更新的元数据表和基于元数据表的file listing,以提高在大型 Hudi 表上的分区和文件listing的性能。在reader方面,用户需要将其设置为 true 以从中受益。元数据表和相关文件listing 仍然可以通过设置hoodie.metadata.enable=false来关闭此功能。因此,使用异步表服务部署 Hudi 的用户需要配置锁服务。如果此功能与您无关,您可以通过额外设置这个配置 hoodie.metadata.enable=false 像以前一样使用 Hudi。
我们在元数据表中引入了多模式索引,以显着提高文件索引中的查找性能和数据跳过的查询延迟。元数据表中添加了两个新索引
布隆过滤器索引包含文件级布隆过滤器,以便在进行writer更新插入期间将主键查找和文件修剪作为布隆索引的一部分
列统计索引包含所有/感兴趣的列的统计信息,以改进基于写入器和读取器中的键和列值范围的文件修剪,例如在 Spark 的查询计划中。
默认情况下它们被禁用。您可以通过分别设置hoodie.metadata.index.bloom.filter.enable 和hoodie.metadata.index.column.stats.enable 为true来启用它们。
有关升级和部署的详细说明,请参阅元数据表指南。
使用元数据表进行data skipping
随着在元数据表中增加了对列统计的支持,数据跳过现在依赖于元数据表的列统计索引 (CSI),而不是其自己的定制索引实现(与 0.10.0 中添加的空间曲线相比),允许利用数据跳过对于所有数据集,无论它们是否执行布局优化程序(如聚类)。要从数据跳过中受益,请确保同时为写入器和读取器设置hoodie.enable.data.skipping=true,并在元数据表中启用元数据表和列统计索引。
数据跳过支持标准函数(以及一些常用表达式),允许您将常用标准转换应用于查询过滤器中列的原始数据。例如,如果您有将时间戳存储为字符串的列“ts”,您现在可以在谓词中使用人类可读的日期来查询它,如下所示date_format(ts, "MM/dd/yyyy" ) < "04/01/2022"。
注意:目前仅在COW 表和读优化模式下的MOR 表中支持 Data Skipping。在HUDI-3866中跟踪了对 MOR 表的全面支持的工作
有关更多信息,请参阅性能指南。
异步索引器
在 0.11.0 中,我们添加了一个新的异步服务,用于索引我们丰富的表服务集。它允许用户在元数据表中创建不同类型的索引(例如,文件、布隆过滤器和列统计信息),而不会阻塞摄取。索引器在时间线上添加一个名为“indexing”的新action。虽然索引过程本身是异步的并且对写入者来说是非阻塞的,但需要配置锁提供程序以安全地协调运行中的写入者进程。
有关详细信息,请参阅索引指南。
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 表中的记录。
现在通过timestamp as of语法支持时间旅行查询。(仅限 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-bundleor hudi-spark-bundle(legacy bundle name) 得到支持。
有关使用更新,请参阅迁移指南。
超薄的Utilities程序包
在 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 Catalog,catalog标识符为hudi. 您可以直接通过 API 实例化目录,也可以使用CREATE CATALOG语法创建catalog。
Flink在正常UPSERT和BULK_INSERT操作中都支持Bucket Index 。与默认的 Flink 基于状态的索引不同,桶索引是在恒定数量的桶中。指定 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 Data Catalog。用户可以设置org.apache.hudi.aws.sync.AwsGlueCatalogSyncTool为HoodieDeltaStreamer的同步工具实现,并使目标 Hudi 表在 Glue Catalog中可发现。有关更多详细信息,请参阅同步到 AWS Glue Data Catalog指南页面。
注意:这是一个实验性功能。
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(COW表)带来了加密功能。有关详细信息,请参阅加密指南页面。
Bucket 索引
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用于从用户定义的Hive表中获取Schema。这在HoodieDeltaStreamer拖尾 Hive 表而不是提供 avro 模式文件时很有用。
迁移指南
Bundle使用更新
不再正式支持 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 reader,设置hoodie.datasource.read.extract.partition.values.from.path=true为与现有行为保持兼容。
Spark 的默认索引类型从BLOOM 更改为SIMPLE( HUDI-3091 )。如果您当前依赖默认BLOOM 索引类型,请相应地更新您的配置。
原始发行说明可在此处获得:https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12322822&version=12350673