Hudi 版本 | Apache Hudi 0.9.0 版本重磅发布

HBase技术社区

共 7233字,需浏览 15分钟

 ·

2021-09-06 11:24


1. 重点特性

1.1 Spark SQL支持

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

1.2 Flink集成

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

1.3 查询端改进

Hudi 现在可以在 Spark 中注册为数据源表。

基于Metadata Table的 Spark 读取改进。添加了对时间旅行查询的支持。请参考时间旅行[3]

1.4 写入端改进

添加了虚拟键支持,用户可以避免将元字段添加到 Hudi 表并利用现有的字段来填充记录键和分区路径。请参考 具体配置[4]来开启虚拟键。Clustering改进DeltaStreamer 和 Spark Streaming 都添加了异步Clustering支持。可以在这篇博客文章[5]中找到更多细节。增量读取也适用于Clustering数据。添加了 HoodieClusteringJob[6] 以作为独立作业来构建和执行Clustering计划。添加了一个配置(hoodie.clustering.plan.strategy.daybased.skipfromlatest.partitions)以在创建Clustering计划时跳过最近的 N 个分区。增强 Bulk_Insert模式(新增行写入器模式),并缺省打开,用户可以使用行写入器模式以获得更好的性能。在 HiveSyncTool 中添加了对 HMS 的支持。HMSDDLExecutor 是一个 DDLExecutor 实现,基于使用 HMS 的 HMS apis 直接用于执行所有 DDL 。Spark 引擎中添加了预提交验证器框架[7]。用户可以利用该框架来添加验证给定提交的文件是否都存在,或是否已经删除所有无效文件等。org.apache.hudi.client.validator.SqlQueryEqualityPreCommitValidator[8] 可用于验证提交前后行的数据行相同org.apache.hudi.client.validator.SqlQueryInequalityPreCommitValidator[9] 可用于验证提交前后的数据行不相同org.apache.hudi.client.validator.SqlQuerySingleResultPreCommitValidator[10] 可用于验证表是否产生特定值这些可以通过设置 hoodie.precommit.validators=<逗号分隔的验证器类名称列表> 来配置。用户还可以通过扩展抽象类 SparkPreCommitValidator 并覆盖此方法来提供自己的实现。用户可以选择删除用于生成分区路径的字段(hoodie.datasource.write.drop.partition.columns),以支持使用BigQuery系统查询Hudi快照。支持华为云、百度云、金山云对象存储。添加了对delete_partition操作的支持,用户可以在需要时利用它删除旧分区。ORC格式支持,现在用户可以指定存储格式为ORC,注意现在暂时只支持Spark查询。Hudi 使用不同类型的可溢出映射,用于内部处理合并(压缩、更新甚至 MOR 快照查询)。在 0.9.0 中,我们添加了对 bitcask默认选项的压缩支持,并引入了由 RocksDB 支持,它可以在大批量更新或处理大型基本文件时性能更高。增强对未提交的数据的自动清理,该增强在云存储上性能更优,具体来说是新增了一种新的标记机制,利用时间线服务器对底层存储执行集中协调的文件标记批量读/写,你可以使用这个配置[11]来启用,并在这个博客[12]上了解更多。

1.5 DeltaStreamer改进

JDBC Source[13] 可以采用提取 SQL 语句并从支持 JDBC 的源中增量获取数据。这对于例如从 RDBMS 源读取数据时很有用。请注意,这种方法可能需要定期重新引导以确保数据一致性,尽管在基于 CDC 的方法上操作要简单得多。SQLSource[14] 使用 Spark SQL 语句从现有表中提取数据,对于基于 SQL 的简单回填用例非常有用,例如:过去 N 个月只回填一列。S3EventsHoodieIncrSource[15] 和 S3EventsSource[16] 有助于从 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[17]Maven仓库包地址: 地址[18]
推荐阅读
更进一步节省空间!Apache Hudi支持虚拟键
Apache Hudi数据不知道怎么删除?多种方式快来Get!
字节跳动基于Apache Hudi构建EB级数据湖实践
基于Apache Hudi构建数据湖的典型应用场景介绍
Apache Hudi:新一代流式数据湖平台

引用链接

[1] SparkSQL : http://hudi.apache.org/docs/quick-start-guide
[2] RFC-25: (https://cwiki.apache.org/confluence/display/HUDI/RFC+-+25%3A+Spark+SQL+Extension+For+Hudi)
[3] 时间旅行: http://hudi.apache.org/docs/quick-start-guide#time-travel-query
[4] 配置: http://hudi.apache.org/docs/configurations#hoodiepopulatemetafields
[5] 博客文章: http://hudi.apache.org/blog/2021/08/23/async-clustering
[6] HoodieClusteringJob: https://github.com/apache/hudi/blob/bf5a52e51bbeaa089995335a0a4c55884792e505/hudi-utilities/src/main/java/org/apache/hudi/utilities/HoodieClusteringJob.java
[7] 预提交验证器框架: https://github.com/apache/hudi/blob/bf5a52e51bbeaa089995335a0a4c55884792e505/hudi-client/hudi-spark-client/src/main/java/org/apache/hudi/client/validator/SparkPreCommitValidator.java
[8] org.apache.hudi.client.validator.SqlQueryEqualityPreCommitValidator: https://github.com/apache/hudi/blob/bf5a52e51bbeaa089995335a0a4c55884792e505/hudi-client/hudi-spark-client/src/main/java/org/apache/hudi/client/validator/SqlQueryEqualityPreCommitValidator.java
[9] org.apache.hudi.client.validator.SqlQueryInequalityPreCommitValidator: https://github.com/apache/hudi/blob/bf5a52e51bbeaa089995335a0a4c55884792e505/hudi-client/hudi-spark-client/src/main/java/org/apache/hudi/client/validator/SqlQueryInequalityPreCommitValidator.java
[10] org.apache.hudi.client.validator.SqlQuerySingleResultPreCommitValidator: https://github.com/apache/hudi/blob/bf5a52e51bbeaa089995335a0a4c55884792e505/hudi-client/hudi-spark-client/src/main/java/org/apache/hudi/client/validator/SqlQuerySingleResultPreCommitValidator.java
[11] 配置: http://hudi.apache.org/docs/configurations#hoodiewritemarkerstype
[12] 博客: http://hudi.apache.org/blog/2021/08/18/improving-marker-mechanism
[13] JDBC Source: https://github.com/apache/hudi/blob/bf5a52e51bbeaa089995335a0a4c55884792e505/hudi-utilities/src/main/java/org/apache/hudi/utilities/sources/JdbcSource.java
[14] SQLSource: https://github.com/apache/hudi/blob/bf5a52e51bbeaa089995335a0a4c55884792e505/hudi-utilities/src/main/java/org/apache/hudi/utilities/sources/SqlSource.java
[15] S3EventsHoodieIncrSource: https://github.com/apache/hudi/blob/bf5a52e51bbeaa089995335a0a4c55884792e505/hudi-utilities/src/main/java/org/apache/hudi/utilities/sources/S3EventsHoodieIncrSource.java
[16] S3EventsSource: https://github.com/apache/hudi/blob/bf5a52e51bbeaa089995335a0a4c55884792e505/hudi-utilities/src/main/java/org/apache/hudi/utilities/sources/S3EventsSource.java
[17] Apache Hudi 0.9.0 Source Release: https://downloads.apache.org/hudi/0.9.0/hudi-0.9.0.src.tgz
[18] 地址: https://repository.apache.org/#nexus-search;quick~hudi






浏览 75
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报