前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hudi元数据表(Metadata table)解析

Hudi元数据表(Metadata table)解析

作者头像
从大数据到人工智能
发布2022-05-11 08:59:27
2.6K0
发布2022-05-11 08:59:27
举报
文章被收录于专栏:大数据-BigData

元数据表的作用

ApacheHudi元数据表可以显著提高查询的读/写性能。元数据表的主要目的是消除“列出文件”操作的要求。

读取和写入数据时,会执行文件列表操作,以获取文件系统的当前视图。当数据集较大时,列出所有文件可能是性能瓶颈,但更重要的是,在AWS S3等云存储系统中,由于某些请求限制,大量文件列出请求有时会导致限制。元数据表将主动维护文件列表,并消除递归文件列表操作的需要。

相关测试

运行TPCDS基准测试时,单个文件夹的p50列表延迟与文件/对象的数量成线性关系:

Number of files/objects

100

1K

10K

100K

P50 list latency

50ms

131ms

1062ms

9932ms

然而,元数据表中的列表不会随着文件/对象计数线性扩展,而是每次读取大约需要100-500毫秒,即使对于非常大的表也是如此。更棒的是,timeline服务器缓存了部分元数据(目前仅针对writers),并为列表提供了约10毫秒的性能。

支持多模态索引

多模式索引可以极大地提高文件索引中的查找性能和数据跳过时的查询延迟。包含文件级Bloom过滤器的Bloom过滤器索引有助于key查找和文件修剪。包含所有列的统计信息的column stats索引改进了基于写入程序和读取程序中的键和列值范围的文件修剪,例如Spark中的查询规划。多模式索引被实现为包含元数据表中的索引的独立分区。

启用Hudi元数据表和多模式索引

在 0.11.0 中,默认启用具有同步更新和基于元数据表的文件列表的元数据表。 部署注意事项中有一些先决条件配置和步骤,可以安全地使用此功能。 元数据表和相关文件列表功能仍然可以通过将 hoodie.metadata.enable 设置为 false 来关闭。 对于 0.10.1 及之前的版本,默认情况下禁用元数据表,您可以通过将相同的配置设置为 true 来打开它。

如果在启用后关闭元数据表,请确保在再次启用元数据表之前等待几次提交,以便元数据表被完全清理。

多模式索引在 0.11.0 版本中引入。 默认情况下它们被禁用。 启用元数据表时,您可以通过将 hoodie.metadata.index.bloom.filter.enable 设置为 true 来选择启用布隆过滤器索引,并通过将 hoodie.metadata.index.column.stats.enable 设置为 true 来启用列统计索引。 在 0.11.0 版本中,Spark 中改进查询的数据跳过现在依赖于元数据表中的列统计索引。 启用元数据表和列统计索引是使用 hoodie.enable.data.skipping 启用数据跳过的先决条件。

部署注意事项

为了确保元数据表保持最新,在不同的部署模型中,同一Hudi表上的所有写操作都需要额外的配置。在启用元数据表之前,必须停止同一表上的所有写入程序。

部署模型A:带内联表服务的单writer

如果您当前的部署模型是单写入器,并且所有表服务(清理、集群、压缩)都配置为内联,例如 Deltastreamer 同步一次模式和具有默认配置的 Spark 数据源,则无需额外配置。 将 hoodie.metadata.enable 设置为 true 后,重新启动单个 writer 足以安全地启用元数据表。

部署模型 B:具有异步表服务的单个写入器

如果您当前的部署模型是单写入器以及在同一进程中运行的异步表服务(例如清理、集群、压缩),例如 Deltastreamer 连续模式写入 MOR 表、Spark 流(其中压缩默认为异步),以及您的作业设置在同一个编写器中启用异步表服务,在启用元数据表之前,必须配置乐观并发控制、锁提供程序和惰性失败写入清理策略,如下所示。这是为了在启用元数据表时保证乐观并发控制的正确行为。 不遵循配置指南会导致数据丢失。 请注意,仅当在此部署模型中启用了元数据表时,才需要这些配置。

代码语言:javascript
复制
hoodie.write.concurrency.mode=optimistic_concurrency_control
hoodie.cleaner.policy.failed.writes=LAZY
hoodie.write.lock.provider=org.apache.hudi.client.transaction.lock.InProcessLockProvider

如果存在多个不同进程的写入器,包括一个带有异步表服务的写入器,请参阅部署模型 C:配置的多写入器,与使用分布式锁提供程序的区别。请注意,在writer之外运行单独的压缩 (HoodieCompactor) 或集群 (HoodieClusteringJob) 作业被视为多writer部署,因为他们不能依赖进程锁而在同一个进程中运行。

部署模型C:多写入器

如果你当前的部署模式是基于锁的多写入器模式,那么您需要对所有写入器配置如下选项。您可以在停止写入器以启动元数据表之后按顺序启动写入器。如果你只对部分写入器配置如下参数,那么会导致数据丢失,所以,请确保为每个写入器启动元数据表。

代码语言:javascript
复制
hoodie.write.concurrency.mode=optimistic_concurrency_control
hoodie.cleaner.policy.failed.writes=LAZY
hoodie.write.lock.provider=<distributed-lock-provider-classname>

请注意,有3种不同的分布式锁提供程序可供选择:ZookePerBasedLockProvider、HiveMetastoreBasedLockProvider和DynamodBBbasedLockProvider。

0 0 投票数

文章评分

本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://lrting.top/backend/bigdata/hudi/hudi-basic/4602/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 元数据表的作用
    • 相关测试
      • 支持多模态索引
      • 启用Hudi元数据表和多模式索引
      • 部署注意事项
        • 部署模型A:带内联表服务的单writer
          • 部署模型 B:具有异步表服务的单个写入器
            • 部署模型C:多写入器
            相关产品与服务
            文件存储
            文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档