Apache Hudi 0.7.0版本重磅发布

重点特性

1. Clustering

0.7.0版本中支持了对Hudi表数据进行Clustering(对数据按照数据特征进行聚簇,以便优化文件大小和数据布局),Clustering提供了更灵活地方式增长文件大小,有了Clustering特性,即可更快速地摄取数据,而后聚簇为更大的文件,实验数据代表查询性能能够提高34倍,文件数能够减小1020倍;另外Clustering对于查询侧优化也很明显,在查询时一般会基于字段进行Clustering,经过彻底跳过一些文件来极大提高查询性能,这与云数仓Snowflake提供的Clustering功能很是相似,咱们很是高兴地宣称这个特性在0.7.0版本中彻底开源免费。html

想要了解更多Clustering细节,能够参考RFC-19,能够查阅这些配置来在你的数据管道中启用Clustering,如今Hudi支持同步和异步的Clustering模式。java

2. Metadata表

Hudi项目始于Uber,开始是基于HDFS实现的数据湖,对于云上对象存储的数据湖性能不如HDFS。在0.7.0版本,咱们解决了该问题,即支持了内部Metadata表,此表可存储索引数据,其余元数据信息等。git

Metadata表的实现使用了Hudi MOR表,这意味着像其余任何Hudi表同样,能够被压缩(Compaction)、清理(Clean)、增量更新(incrementally updated)。 并且与其余项目中的相似实现不一样,咱们选择将文件列表等信息索引为HFile格式(格式可插拔),HFile提供了很好的点查性能,能够高效获取分区文件列表等信息。github

在0.7.0版本中,在写入端配置hoodie.metadata.enable=true便可构建Metadata表,这样后续操做将再也不调用fs.listStatus()接口,咱们引入了一种同步机制来保证对数据timeline中进行的文件新增/删除操做都会同步到Metadata表。apache

测试有25W个文件的表,Metadata表相比使用Spark并发Listing要快2~3倍,更多设计细节可查阅RFC-15,其余Metadata表相关配置可参考这里,提供了参数以便在生产环境中安全使用该特性。api

3. Flink/Java客户端

Hudi最开始设计时依赖Spark,但随着项目成为Apache顶级项目,咱们意识到须要抽象内部表格式、表服务、写入层的代码以支持更多的引擎。在0.7.0版本,咱们完成了写入层的解耦,添加了Flink和Java客户端,如今你可使用HoodieFlinkStreamer来消费Kafka中的数据,以写入Hudi的COW表中。安全

4. 写入端优化

  • Spark3支持;0.7.0版本支持使用Spark3进行写入和查询,请注意使用scala 2.12版本的hudi-spark-bundle包
  • 并行Listing;咱们已将全部List操做移至HoodieTableMetadata接口下,该接口能够多线程/Spark并行执行,该优化能够在未开启Metadata表时提高清理、压缩性能。
  • Kafka Commit Callbacks;0.7.0添加了HoodieWriteCommitKafkaCallback接口,当每次进行commit后能够向Kafka中发送事件,以此来触发派生/ETL数据管道,相似Apache Airflow中的Sensors
  • Insert Overwrite/Insert Overwrite Table;0.7.0版本中新增了这两种操做类型,主要用于批处理ETL做业,该做业一般会在每次运行时覆盖整个表/分区。考虑到这些操做能够批量替换目标表,所以这些操做比upsert更合适,请查看[示例](/docs/ quick-start-guide.html#insert-overwrite-table)。
  • 删除分区支持:对于使用WriteClient/RDD级别API的用户,Hudi提供了一个新的API来删除整个分区,而不是采用记录级别删除方式。
  • 新增DefaultHoodieRecordPayload解决乱序问题;当前默认的OverwriteWithLatestAvroPayload将覆盖存储中已有的值,即便使用较旧值进行upsert。0.7.0版本添加了一个新的DefaultHoodieRecordPayload和一个有效负载配置hoodie.payload.ordering.field来指定一个字段,能够将传入的upsert记录与已存储的记录进行比较,以决定是否覆盖。推荐用户使用这种更新、更灵活的Payload模型。
  • Hive同步;支持使用SlashEncodedHourPartitionValueExtractor同步小时分区至Hive中。
  • 支持IBM云对象存储、Open Java 9版本。

5. 查询端优化

  • MOR增量查询(Spark Datasource),0.7.0版本支持使用Spark datasource增量查询MOR表,在后续版本中会继续增强和重构该特性。
  • Metadata表支持File Listings,用户还能够将元数据表用于如下查询端,对于Hive,设置hoodie.metadata.enable = true会话
    属性,对于使用SparkSQL查询注册的Hive表,请使用参数--conf spark.hadoop.hoodie.metadata.enable = true来容许从元数据中获取分区的文件列表,而非使用File Listing。

贡献者

prashantwasonTrevor-zhangsatishkothanbalajeewangxianghuhddongnsivabalanxushiyancdmikechengaryli1019kwondwsreeram26chuangehhzhedoubushishimodi95linshan-maKarl-WangSKbvaradarliujinhui1994shenh062326xushiyanpratyakshsharmaafilipchikKaiuxlw309637554vinothchandardugenkui03leesfyanghuarmpiferhj2016guykhazmabhasudhahotienvun3nashv3nkateshpengzhiwei2018yui2010jshmchenxidanny0405yui2010lichang-bdnbalajeeumehrot2多线程

相关文章
相关标签/搜索