在发布的Apache Hudi 0.10.中共解决了0版388个issue,它包括许多重磅特征支持和许多重磅特征支持Bug修复。
1. 重点特性1.1 Kafka Connect(Kafka连接器)在0.10.0 中我们为 Hudi 添加了一个Kafka Connect Sink,为用户提供服务 Apache Kafka 直接向 Hudi 表摄入/流式传输记录的能力。虽然用户已经可以使用了 Deltastreamer/Spark/Flink 将 Kafka 记录流式传输 Hudi 表中,但 Kafka Connect Sink如果不部署和运维,为当前用户提供良好的灵活性Spark/Flink的用户,也可以通过Kafka Connect Sink将数据写入数据湖。Kafka Connect用户可以参考实验阶段README-Hudi-Kafka-Connect[1]快速启动详细步骤,对内部实现感兴趣的用户可参考RFC-32_Kafka Connect Sink For Hudi[2]。除了Kafka Connect外,Apache Pulsar和RocketMQ还提供了直接将军Pulsar和RocketMQ数据写入Hudi扩展数据湖的能力,并提供相应的Hudi Connector,详情可参考Pulsar-to-Hudi[3]和RocketMQ-to-Hudi[4]
1.2 Z-Ordering,Hilbert Curves 和 Data Skipping在 0.10.0 支持基于空间填充曲线排序的索引,首先支持了 Z-Ordering[5]和 Hilbert Curves[6]。
数据跳过对优化查询性能至关重要。通过使用包含单个数据文件的列级统计信息(如最小值、最大值、空值等)的列统计索引,一些查询允许快速切割不包含值的文件,只返回命中的文件。当数据按列进行整体排序时,数据跳过是最有效的,允许单个 Parquet 文件包含不相交的值范围,实现更有效的裁剪。
使用空间填充曲线(如 Z-order、Hilbert 等)允许基于包含多列的排序按钮有效地对表数据进行排序,并保留非常重要的属性:在多列上使用空间填充曲线对行进行排序按钮也将保留每个单独列的内部排序。在需要通过复杂的多列排序按钮对行进行排序的用例中,该属性非常方便,这些键需要通过键的任何子集(不一定是键前缀)有效查询,使空间填充曲线对简单的线性(或字典序列)有更好的排序性能。如果应用得当,在此类用例中使用空间填充曲线可能会显著降低搜索空间,从而大大提高查询性能。如果应用得当,在此类用例中使用空间填充曲线可能会显著降低搜索空间,从而大大提高查询性能。
这些功能目前正处于实验阶段,我们计划在博客文章中快速研究更多细节,展示空间填充曲线的实际应用。
1.3 Debezium Deltastreamer数据源在0.10.0中我们在 Deltastreamer 在生态系统中添加了两个新系统 debezium 源,Debezium 变更数据捕获 (CDC) 开源分布式平台。我们添加了PostgresDebeziumSource和MysqlDebeziumSource以分别将Postgres和MySQL数据库通过 Deltastreamer 将 CDC 日志写入 Apache Hudi,在此功能的帮助下,我们可以连续捕获行级变更,插入、更新和删除这些更改 Hudi数据湖中。
1.4 支持外部配置文件0.10.0版本操作用户通过配置文件 hudi-default.conf 传输配置,而不是直接将配置传给每个配置 Hudi 作业。默认情况下,Hudi 会加载 /etc/hudi/conf 用户可以设置目录下的配置文件 HUDI_CONF_DIR 环境变量指定不同的配置目录位置,需要经常重复相同的配置(如简化) Hive 同步设置、写入/索引调整参数)非常有用。
1.5 元数据表增强在 0.10.0 通过同步更新而不是异步更新,我们对元数据表进行了更基本的修复,以简化整体设计,构建未来更先进的功能,用户可以使用它hoodie.metadata.enable=true
打开元数据表。在默认情况下,基于元数据表的文件列表功能被禁止,我们希望在 0.11.用户可以关注0发布前修复的其他后续工作 HUDI-1292[7]了解更多细节,在打开元数据表之前,请参移指南。
想知道的重构Hudi内部实现和特征的用户非常重要.10.在0中,文档被添加到以前缺乏文档但存在的功能中。同时,我们重新组织了官方网站文档布局,帮助新用户改进发现和使用Hudi同时,我们根据社区反馈对文档进行了许多改进,请参考最新文件:https://hudi.apache.org[8]
2. 写入端改进提交即时时间(instant time)从秒级格式升级到毫秒级格式,对用户透明,用户可以顺利升级,无需修改任何配置。
Deltastreamer增强
?Deltastreamer增强
?添加ORCDFSSource以支持 ORC 文件?
S3EventsHoodieIncrSource现在可以单身了 S3 多张表写在元数据表中
Clustering增强?为了满足外部索引的要求,增加了保留相同文件组的支持pending状态的Clustering增量时间线支持用于操作。
Hudi 在 0.8.0 作为功能使用的一部分,用户需要配置锁服务提供商,这增加了对并发写入的支持。在 0.10.0 我们添加了用户可以使用的内容 DynamoDBBased 锁提供程序。配置此锁提供程序,用户必须设置以下配置:
2.1 DynamoDB锁提供器
Hoodie.write.lock.dynamodb.tableHoodie.write.lock.dynamodb.partition_keyhoodie.write.lock.dynamodb.region
此外,还应设置访问 AWS 资源凭证,用户可设置以下属性:
更多关于并发控制的详细信息,请参考并发控制[9]
2.2 修改默认配置
在0.10.0中我们将 hudi 中所有 shuffle 并行性配置的默认值
1500
调整为200
。相关配置是hoodie.insert.shuffle.parallelism
、
、
hoodie.upsert.shuffle.parallelism和hoodie.delete.shuffle.parallelism
。如果用户依赖默认设置,请级时请注意这些配置。如果用户依赖默认设置,请在升级时注意这些配置。但我们已经在一些规模数据集中测试了这些配置。
Clustering: 默认计划策略改为SparkSizeBasedClusteringPlanStrategy
。默认情况下Clustering在时间轴中保留提交的元数据Replace提交的增量查询支持非常有用。2.3 Spark SQL改进
0.10.0中我们对 spark-sql 更多的改进,比如添加非主键
支持,新支持
SHOW PARTITIONS和DROP PARTITIONS等待操作命令。
同时在0.10.0中支持了Spark 3.1.2版本。
3. 查询端改进
为 MOR 表添加了 Hive 增量查询支持和快照查询分区修剪增加Clustering支持增量读取。我们改进了列表逻辑,获得了查询时间 65% 提升,针对 Hudi 表的 Presto 获得了查询 2.8 倍并行度。总的来说,我们在这个版本中修复了大量的错误(多作者、存档、回滚、元数据、集群等)。)和稳定性修复,进了我们围绕元数据和集群命令的修复 CLI,希望用户在 hudi 0.10.0 使用更顺畅。
3.1 Flink集成改进
Flink Reader现在支持增量读取,设置
hoodie.datasource.query.type=incremental
配置选项
开始提交指定读取,配置选项
read.end-commit提交指定结束(包括两者)。同样的选项也可以用于流式读取read.start-commit
指定起始偏移量。同样的选项也可以用于流式读取
指定起始偏移量。支持批量执行模式下的支持 Upsert 操作,使用 INSERT INTO 现有数据集的语法更新。
对日志数据等非更新数据集,Flink Writer现在支持直接添加新的数据集而不合并,这是的INSERT操作的Copy On Write在默认情况下,表类型的默认模式 Writer现有的小文件不合并,设置
write.insert.cluster=true合并使用小文件。
小文件策略更稳定,每个新策略都更稳定bucket单独管理文件组子集意味着分配任务bucket并行分配任务会影响小文件的数量。
Flink写入和读取也支持元数据Metadata对于底层存储的分区搜索和文件,元数据表可以显著减少写入和读取List。配置metadata.enabled=true使用此功能。4. 生态
4.1 DBT支持
通过与非常流行的数据转换工具 dbt[11]集成已经存在dbt 1.0.latest 在版本中发布,用户可以更方便地创建衍生品 Hudi 数据集。使用 0.10.0用户可以使用 dbt 创建增量 Hudi 详情请参考数据集 dbt-spark#issue187[12]
4.2 监控
Hudi 现在支持发布指标 Amazon CloudWatch。可设置
hoodie.metrics.reporter.type=CLOUDWATCH
静态用于启用和使用 AWS 凭证可用