FusionInsight MRS Hudi原理解析之Metadata Table
【摘要】 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)