探索GaussDB(DWS)湖仓融合:Hudi与元数据打通的深度解析
华为云数仓GaussDB(DWS)研发专家高若岳老师,深入解析GaussDB(DWS)数据仓库如何与大数据生态快速对接。
随着智能数据时代的到来,数据量爆发式增长,数据形态呈海量化和多样化发展,不再是单一的结构化数据。从海量和多样化的数据做融合分析,创造更多业务价值的诉求日益强烈。在本期《GaussDB(DWS)湖仓融合技术解析》的主题直播中,华为云数仓GaussDB(DWS)研发专家高若岳老师,深入解析GaussDB(DWS)数据仓库如何与大数据生态快速对接?如何高效访问开源数据?GaussDB(DWS)湖仓融合技术为企业带来哪些助力?
什么是数据湖?
不同的用户对数据湖的概念有不同的理解,例如:
- 云厂商:基于对象存储,以 S3、OSS、OBS 等构建数据底座,进行统⼀存储即为湖;
- 大数据互联网:以数据湖三剑客为主,Iceberg、Hudi、Delta lake。它们可以支持比 Hive更高层的 Upsert、Delete、事务操作等高级特性,能基于 Hive 进行升级,解决准实时性的问题即为湖;
- 传统用户:以Hadoop集群为主,满足支持所有结构化、半结构、无结构化的数据存储即为湖。
数据湖的优势
- 更低的存储成本,更高的可靠性:使用对象存储,相比于本地磁盘存储、SSD 存储或者云盘存储等,可以大幅降低存储成本,并且通过编码的方式能够在降低副本数据量的同时又能保证高可靠性,可以使用户不用担心底层数据的丢失,从而获得低成本的存储;
- 更好的 Table format:通过支持 ACID 事务、支持 Schema evolution,能够为用户提供更好的表格式;
- 更好的 File format:数据湖在文件格式上支持越来越多的半结构化 Map、Struct、Json 等,并且支持越来越多的索引,进而使文件的查询和存储效率更高,并且在基于列式存储的基础上支持更多的复杂嵌套结构;
- 统⼀的 Catalog:通过统一的 Catalog 实现统⼀的元数据管理、权限管理、统计信息管理、入湖管理等。
为什么要做湖仓融合?
- 数仓加速:基于数据湖的远程IO成本很高,且缺少一系列数仓加速的手段。早期的数据湖格式多样且不成熟,索引的支持不完善,查询性能有待提升。并且数据湖主要针对吞吐量的优化,关注低成本和高可靠,不适用于高性能的需求;
- 实时分析:传统的数据湖实时性不够,在Iceberg或者Hudi的支持下可能能解决分钟级别的时效性,但是无法解决秒级时效性的问题;
- 高并发查询:对于高并发查询,不管是点查还是聚合类的查询,数仓是更擅长的。比如做分桶的处理,更精细的裁剪,降低扫描的数据量,提升点查的效率。另一方面通过物化视图或者CUBE等相关的预聚合手段,可以提升聚合查询的性能。
- 降本增效:简化技术架构,增强整体架构可靠性,降低运维成本;
- 更完善的数据治理:湖仓融合的数据底座统一了主数据和元数据,基于此才有可能做上层统⼀的数据治理。
GaussDB(DWS)湖仓融合优势介绍
无缝访问数据湖
- 对接LakeFormation元数据管理,直接访问数据湖的数据表定义;
- 支持主要开源数据格式:Hudi,ORC, Parquet, Carbon,Iceberg等;
- 可支持实时链路的增量分析,也可以支持离线链路的批量分析;
- 数据湖加速。
融合查询
- GaussDB(DWS)混合查询数据湖和仓内的任意数据;
- 查询一步到位输出到仓内/数据湖,无需额外数据中转拷贝。
极致查询性能
- 使用GaussDB(DWS)数仓高质量的查询计划和高效的执行引擎;
- 使用数仓的负载管理手段,精准控制。
湖仓融合支持哪些数据格式?
当前GaussDB(DWS)湖仓融合技术,支持以下三种数据格式:
- 文本类型:支持TEXT、CSV,高性能导入导出,支持指定分隔符(delimiter)、换行符(eol)、编码(encoding),以及多种容错方式处理,错误表等;
- 列存存储格式:高性能列式存储格式,用于大数据环境中高效的存储和查询数据,支持多种压缩算法、编码方式,并且兼容多种引擎;
Parquet/ORC:融合查询,复杂类型查询,支持多种压缩算法,支持多种方式写出。
- 湖格式:Hudi 是一个功能丰富的存储管理平台,支持构建具有增量数据管道的流式数据湖,针对处理引擎和常规批处理进行了优化;针对数据探索、BI场景的交互式分析能力进行了优化;
支持COW、MOR的导入查询,以及增联同步导入。
湖仓融合主要面临3个难点:
- 如何统一湖仓的元数据和建表语句,让用户获得一个统一数据目录和表结构; 如何完善湖仓的实时能力,来解决不同场景的实时性需求; 如何让湖仓架构能够有超过数仓的性能。
湖仓融合功能介绍
本次分享,我们重点详细讲解Hudi和元数据打通两大功能。
Hudi是什么?
Hudi 是一个功能丰富的存储管理平台,支持构建具有增量数据管道的流式数据湖,针对处理引擎和常规批处理进行了优化;针对数据探索、BI场景的交互式分析能力进行了优化。
Hudi具备哪些能力?
- 变更数据:支持高效的数据更新,删除能力,基于可插拔的索引保证数据唯一,支持Upsert、Merge语法;
- 实时性:支持CDC数据实时入湖;支持增量数据处理,可基于Flink、Spark进行流式数据处理;支持基于增量通道实现快速增量批量处理;
- 数据事务:支持事务ACID,异常回滚,Snapshot数据隔离;
- 并发性:支持MVCC并发控制,支持读写并发操作;
- 多版本能力:支持基于Time Travel多版本,SavePoint能力;
- 存储优化:支持order/z-order clustering 优化,提高查询能力;
- 表结构变更:支持丰富的表变更操作,向后兼容;
- 数据管理:支持丰富的clustering、compactions、clean、小文件自动合并操作;
- 生态兼容:丰富的生态集成,支持flink/spark 写入,HetuEngine/hive/spark/flink 做实时/增量查询。
Hudi具备自动同步能力,可以将单表同步任务实现外表到内表的数据合并,记录增量同步进度。智能调度框架,实现定时调用存储过程任务,并进行资源管控调度,提供任务启停,告警等运维能力。
当前DWS支持自动增量同步
自动同步
(1)单表同步任务实现外表到内表的数据合并,记录增量同步进度。(列映射, Hudi增量commit time同步点)
(2)智能调度框架,实现定时调用存储过程任务,并进行资源管控调度,提供任务启停,告警等运维能力 。
Hudi同步任务使用:
Hudi查询方式介绍
- Hudi外表查询
(1)支持Hudi两种表类型,COW、MOR;
(2)支持Hudi两种查询视图,snapshot、incremental。
- 增量查询
针对Hudi增量查询功能,可以通过设置增量查询参数实现增量查询。
- 增量设置的增量参数
可以通过查询以下视图查看已经设置了哪些参数,检查是否设置正确。
- 查询Hudi外表属性
读取OBS上Hudi数据的hoodie.properties。
- 查询Hudi外表最大时间线
读取OBS上Hudi数据最大时间线,也就是最新的提交记录。
元数据打通
图一属于存算分离架构,存算分离,底层数据文件可对上层服务共享。湖和仓的元数据隔离,共享数据仍需ETL。湖和仓权限隔离,不支持统一权限管理。
图二湖仓一体架构,在存算分离的基础上,构建统一元数据层,上层服务通过统一元数据层,便捷高效地共享数据,对上层服务实现统一的高效的权限管理。
元数据打通——Lakeformation使用指导
创建Lakeformation数据源
前提条件:
- 有可用的LakeFormation实例且已对接MRS服务;
- 创建包含LakeFormation权限的委托(需包含最小权限)。
步骤一:在GaussDB(DWS)管理控制台,单击“集群管理”
步骤二:在集群列表,单机指定集群的名称,然后选择“数据源->Lakeformation数据源”。
步骤三:在LakeFormation数据源页面,单击“创建LakeFormation数据源连接”,填写配置参数。
创建external schema
通过创建external schema来访问存储在Lakeformation服务中MRS服务表的元数据,进而访问存储在OBS上的表数据。
查询:其中ex_lf为前面创建的external schema的名称,test为想要访问的Lakeformation服务的表。且该表已经在角色授权中对当前用户授予此表对应的select权限。
本期分享到此结束,更多关于GaussDB(DWS)产品技术解析、数仓产品新特性的介绍,请关注GaussDB(DWS)开发者平台,GaussDB(DWS)开发者平台为开发者们提供最新、最全的信息咨询,包括精品技术文章、最佳实践、直播集锦、热门活动、海量案例、智能机器人。让您学+练+玩一站式体验GaussDB(DWS)。
GaussDB(DWS)开发者平台链接:https://bbs.huaweicloud.com/contents/dws/learning.html