Hudi MetaServer元数据服务技术探索

文摘   科技   2024-08-12 12:00   北京  

编者荐语:



在大数据领域,数据管理和性能优化一直是永恒的话题。随着数据规模的不断增长和种类的增加,亟需有效地管理数据并确保高性能处理。亚信科技推出的 Hudi 自研特性为解决这一难题带来了全新的解决方案,包括元数据服务、数据权限控制、常驻服务以及表达式 Payload,每一个特性都显著提升了数据入湖的易用性和性能。希望本文能够为广大数据工程师和开发者在实际工作中提供有价值的参考和帮助。


Hudi MetaServer元数据服务技术探索
亚信科技(中国)有限公司
摘要本文阐明了亚信科技在 Hudi MetaServer 方面的演进和创新。通过引入 Hudi MetaServer,实现了元数据的集中管理、权限控制和可视化服务,提升了系统的稳定性和性能。同时,介绍了 TTL 功能和基于 Aviator 表达式的 Payload 特性,增强了数据处理的灵活性。未来,Hudi MetaServer 将继续发展,支持常驻表服务、多表融合和 JDBC 协议等新特性,进一步优化数据管理

亚信科技Hudi演进概览

在引入元数据服务(Hudi MetaServer)之前,Hudi的元数据是以小文件方式存储在HDFS上。这种分散的存储方式导致元数据管理和查看对用户而言不是很方便。此外,在HDFS负载较高时,Hudi MetaClient的初始化时间会延长,导致写入和查询任务变慢;引入Hudi MS可以适当减缓HDFS访问压力。


为了解决这些问题,亚信科技在Hudi的演进方向上引入了Hudi MetaServer,实现了对Hudi表元数据的统一管理。Hudi MetaServer集中化管理元数据,提供了诸多增强的能力和特性:


1. 统一的权限管理:

• Hudi MetaServer 实现了对元数据的集中化管理,简化了权限控制。

• 提高了数据访问的安全性,确保了不同用户和应用程序之间的权限合规性。

• 减少了权限管理的复杂度。


2. 可视化服务平台

• Hudi MetaServer 引入了直观的可视化界面,使用户能够方便地监控和管理元数据。

• 通过可视化工具,显著提升了问题分析效率,并降低了使用的复杂度。

• 实现了更高效的运维操作。


3. 表达式 Payload 处理扩展:

• 增强了数据处理的灵活性和功能性。

• 允许用户在处理数据时使用更丰富的表达式和逻辑,满足特殊的数据处理需求。


4. 多活水平扩展和动态最优分配策略:

• 通过架构设计,Hudi MetaServer 确保了系统的多活水平扩展。

• 通过动态最优分配策略提升系统性能,确保高负载情况下系统依然稳定运行,不影响数据处理任务的执行。


5. 跨平台的元数据服务管理:

• Hudi MetaServer 与 Flink、Spark、Hive 等主流计算查询引擎无缝对接。

•  用户可以在不同引擎间灵活切换和使用元数据,提升了数据处理的灵活性。

•  提供了更多选择,使得数据管理更加高效。


Hudi MetaServer的引入不仅简化了元数据管理,还大幅提升了系统的可用性和性能。未来,随着Hudi MetaServer的不断发展,其在权限管理、可视化服务和数据处理能力方面将进一步增强,成为数据湖管理领域的重要工具。这种演进将为企业在大数据处理和管理方面带来更高效、更可靠的解决方案。


图1:亚信科技Hudi MetaServer功能演进图

亚信科技Hudi元数据服务创新实践
在湖仓一体技术实践的过程中,现Hudi开源版本在特定场景下存在局限性。我们研发了新的特性来解决这些问题。

(一)引入独立的Hudi MetaServer元数据服务

亚信科技Hudi引入了全新的元数据服务(Hudi MetaServer),其集中化和可视化的特性为用户提供了更便捷的元数据管理方式。通过实现Flink & Spark引擎Hudi MS Catalog,以及主流引擎对接Hudi元数据服务,包括Flink、Spark、Hive等,用户可以更加灵活地管理和利用元数据信息。同时,元数据服务的多活水平扩展特性和动态最优分配策略,进一步保障了系统的稳定性和性能。

图2:计算引擎和Hudi MetaServer交互示意图


在实现过程中解决了遇到的技术难题:


•  修改社区版本的hudi-common、platform-service模块,抽象新增Table API、Meta API、Permission API等,且分别实现server、client端相关逻辑。

•  实现基于Flink引擎自定义Hudi MetaServer Catalog。

•  实现基于Spark引擎自定义Hudi MetaServer Catalog。

•  实现Hive、Trino等主流引擎对接Hudi MetaServer查询数据能力。

•  实现Hudi MetaServer水平扩展能力,且支持动态最优分配策略。

•  实现基于Hudi MetaServer元数据可视化平台。


图3:Hudi MetaServer可视化平台


Hudi MetaServer特性不仅为后续多个功能(如Hudi权限的统一管理)提供了支持,还简化了用户查看和分析Hudi业务的复杂度。此外,在特定环境下,能够有效提升数据入湖作业的稳定性和性能。


(二)数据权限控制加强

数据安全始终是数据管理的核心关注点。通过基于Hudi MetaServer(Hudi MS)的数据权限控制机制,用户能够实现更加细粒度的权限管理。Hudi MetaServer支持默认权限控制方案以及与Apache Ranger的集成方案,确保数据访问的安全性和合规性。此权限控制机制还扩展到对主流查询引擎(如Flink、Spark、Hive和Trino)的支持,进一步强化了系统的整体安全架构,确保各个层面的数据访问都符合严格的安全标准。


图4:Hudi 权限管理流程示意图

在Hudi MetaServer中,MetaServerAuthorizer负责总体权限检查,它通过调用checkTablePermission()方法来执行权限验证。权限验证流程从MetaServerDefaultAuthorizer开始,该组件根据设定的平台权限策略执行基础权限检查。


当使用Apache Ranger进行权限控制时,MetaServerRangerAuthorizer会与Ranger的管理服务器(RangerAdminServer)通信,获取最新的权限策略并执行检查。Ranger Hudi插件负责在Hudi MetaServer和Ranger之间传递权限策略,确保权限策略的一致性和实时性。


对于外部计算引擎(如Flink、Spark、Hive和Trino),权限检查通过RPC机制进行。每个计算引擎在执行数据读写操作之前,会调用HoodieTablePermissionMSClient中的checkTableWritePermission()方法,该方法继承自HoodieTablePermissionClient。该客户端负责与Hudi MetaServer进行通信,执行远程权限检查。


在执行权限检查时,HoodieTablePermissionMSClient会通过RPC请求将权限检查请求发送到TableService,后者负责具体的权限验证逻辑。TableService调用MetaServerDefaultAuthorizer或MetaServerRangerAuthorizer进行权限检查,并将结果返回给调用的计算引擎。


这种架构设计确保了权限控制的高效性和安全性,统一了不同计算引擎的权限管理,并通过集成Apache Ranger实现了更高级的权限管理功能。同时,权限检查的集中化和自动化进一步增强了系统的安全性和合规性,减少了人工干预和潜在的安全漏洞。

通过这种精细化和集成化的权限控制机制,Hudi MetaServer不仅保障了数据安全,还简化了用户在多引擎环境下的权限管理复杂度,显著提升了系统的整体安全性和稳定性。


(三)TTL的引入

TTL(Time To Live)功能的引入使得Hudi MetaServer在数据管理和性能优化方面实现了显著提升。TTL功能的核心在于对数据生命周期的管理,亚信Hudi主要提供了两种方案:一种是采用社区适配的分区TTL方案,另一种是自研的更细粒度的Record TTL方案。通过TTL功能,系统能够确保数据在规定时间内被有效利用,从而降低存储成本并提升数据处理效率。

图5:Hudi TTL流程示意图

图6:Hudi MetaServer可视化平台TTL设置示意图


分区TTL(Partition TTL)主要依据分区数据的创建时间或最近更新时间,判断其是否小于设定的数据保留时间。如果小于设定的保留时间,则整个分区数据将被清除。


记录级TTL(Record TTL)通过在数据写入和查询时进行时间比对来管理数据的生命周期。查询时,如果数据不符合保留时间要求,则不会返回结果。对于已经写入但已过期的数据,系统通过Hudi的Compaction和Clustering服务进行清理,以确保数据时效性。


(四)表达式Payload的创新

引入基于Aviator表达式的Payload特性,为用户提供了更灵活和高效的数据处理方式。利用表达式Payload,用户可以在数据处理过程中实现更复杂和定制化的逻辑,从而显著提升系统的灵活性和性能。通过这种方式,用户能够更精细地控制和优化数据处理流程,满足各种个性化的需求。

图7:表达式Playload流程示意图

上图通过驻留时长业务实例,简要描述了表达式Payload的运行机制。


表达式Payload的使用主要体现在Hudi表的创建过程中,通过指定相关参数来实现。在任务提交后,系统根据指定的表达式参数进行加载和编译。数据流入时,系统基于编译后的表达式对数据进行处理,生成符合预期的结果,最终写入Hudi表进行汇总。该机制确保了用户可以在数据处理过程中应用高度定制化的逻辑,提升了数据处理的灵活性和效率。具体而言:


1. 表定义阶段:用户在创建Hudi表时,通过Flink SQL指定payload类和表达式路径。

2. 任务提交阶段:在作业提交后,系统进入初始化阶段,加载并编译指定的表达式。

3. 数据处理阶段:当数据流入时,系统根据编译后的表达式对每条记录进行处理,生成结果并写入Hudi表进行汇总。


这种方法不仅提高了数据处理的灵活性,还确保了处理效率,使得复杂业务逻辑的实现变得更加简便。


未来演进和发展

本文分享了亚信科技Hudi MetaServer探索演进,介绍了在大数据Hadoop架构下向湖仓一体演进的技术路线,提出了基于现有能力下的功能特性。未来随着数字化的发展,数据多样性和实时性要求也会越来越高,这对湖仓一体架构也会提出更高的要求,后续的演进方向:


 LLS(Long Live Service):Hudi常驻表服务,通过常驻服务集中化处理多表零碎的表服务任务,提升资源使用率,以及更近一步降低入湖门槛。

•  多表融合:支持多个Hudi表融合使用。

•  多索引融合:支持单表索引演进。

•  JDBC协议支持:支持JDBC通用协议,进行数据查询、写入。

参考资料
[1] Hudi RFC:https://github.com/apache/hudi/blob/master/rfc/rfc-65/rfc-65.md

亚信科技新技术探索
亚信科技的ICT前沿技术观点与行业洞见。展现亚信新技术与产品行业实践成果。
 最新文章