FusionInsight MRS Hudi原理解析之Metadata Table

一枚核桃 发表于 2021/12/28 09:43:30 2021/12/28
【摘要】 Hudi是数据湖的文件组织层,对Parquet格式文件进行管理提供数据湖能力,支持多种计算引擎,提供IUD接口,在 HDFS的数据集上提供了插入更新和增量拉取的流原语。

什么是Metadata

Metadata表即Hudi元数据表,是一种特殊的Hudi表,对用户隐藏。该表用于存放普通Hudi表的元数据信息。

Metadata表包含在普通Hudi表内部,与Hudi表是一一对应关系。

为什么引入Metadata表

HDFS的list海量表分区文件是非常耗费rpc请求,很容易导致HDFS的吞吐量下降,影响性能,这对于OBS等对象存储问题更严重。而查询引擎在查询之前必须要经历上述步骤。

当前分区表的分区信息一般存放在Hive Metastore里面。当分区表的分区大到一定程度,查询引擎查询当前表分区信息时性能会严重下降。

Metadata表是如何解决这些问题的

Metadata表把当前Hudi表的分区信息,以及分区目录下的文件信息作为元数据信息,存储在一张特殊的Hudi表里面,这样当查询引擎需要list表分区文件时只需要访问这张特殊的表即可,由于元数据信息数据量本身不大,所以查询起来可以大大降低HDFS的rpc压力。

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

如何使用Metadata

Hive查询时执行:set hoodie.metadata.enable=true

SparkSql查询时在启动SparkSql时指定:--conf spark.hadoop.hoodie.metadata.enable=true

Spark写入时直接在option参数里面指定“hoodie.metadata.enable”值为“true”。

更多参数请参考配置参考或Hudi官网:http://hudi.apache.org/docs/configurations.html#metadata-config

Metadata性能提升

测试有25万个分区文件的表,Metadata表相比使用Spark并发Listing要快2~3倍。

更多设计细节可查阅Hudi官网:https://cwiki.apache.org/confluence/display/HUDI/RFC+-+15%3A+HUDI+File+Listing+Improvements

Metadata表使用最佳实践

  • 禁止用户手动操作Metadata表,影响数据安全。
  • 启用Metadata,必须在每次写入操作中均开启Metadata,保证数据查询完整。
  • Hudi 0.8版本对表执行Compaction、Rollback,不支持同步到metadata表。
  • Clean同时启用Metadata能更新Metadata表。
  • Metadata表支持在commit数达到一定值后,自动触发compaction、clean、archive,所以手动操作并无必要。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。