基于 MRS-Hudi 构建数据湖的典型应用场景介绍
摘要:华为云 FunsionInsight MRS 已集成 Apache Hudi 0.8 版本,基于 MRS-Hudi 构建数据湖解决方案。
本文分享自华为云社区《基于MRS-Hudi构建数据湖的典型应用场景介绍》,作者:受春柏。
一、传统数据湖存在的问题与挑战
传统数据湖解决方案中,常用 Hive 来构建 T+1 级别的数据仓库,通过 HDFS 存储实现海量数据的存储与水平扩容,通过 Hive 实现元数据的管理以及数据操作的 SQL 化。虽然能够在海量批处理场景中取得不错的效果,但依然存在如下现状问题:
问题一:不支持事务
由于传统大数据方案不支持事务,有可能会读到未写完成的数据,造成数据统计错误。为了规避该问题,通常控制读写任务顺序调用,在保证写任务完成后才能启动读任务。但并不是所有读任务都能够被调度系统约束住,在读取时仍存在该问题。
问题二:数据更新效率低
业务系统库的数据,除流水表类的数据都是新增数据外,还有很多状态类数据表需要更新操作(例如:账户余额表,客户状态表,设备状态表等),而传统大数据方案无法满足增量更新,常采用拉链方式,先进行 join 操作再进行 insert overwrite 操作,通过覆盖写的方式完成更新操作,该操作往往需要 T+1 的批处理模式 ,从而导致端到端数据时延 T+1,存在效率低、成本高等问题。
问题三:无法及时应对业务表变化
上游业务系统对数据 schema 发生变更后,会导致数据无法入湖,需要数据湖的表 schema 进行同步调整。从技术实现上采用数据表重建的方式来满足该场景,导致数据湖的数据表的管理与维护方案复杂,实现成本高。另外该种场景通常需要业务部门与数据团队相配合,通过管理流程来实现表结构的同步。
问题四:历史快照表数据冗余
传统数据湖方案需要对历史的快照表进行存储,采用全量历史存储的方式实现,例如:天级历史快照表,每天都会全量存储全表数据。这样就造成了大量的数据存储冗余,占用大量的存储资源。
问题五:小批量增量数据处理成本高
传统数据湖为了实现增量 ETL,通常将增量数据按照分区的方式进行存储,若为了实现 T+0 的数据处理,增量数据需要按照小时级或者分钟级的分区粒度。该种实现形式会导致小文件问题,大量分区也会导致元数据服务压力增大。
基于以上问题,华为 FunsionInsight MRS 集成 Apache Hudi 组件,希望通过 Hudi 组件来改善传统数据湖存在的问题。
二、MRS 云原生数据湖 Hudi 的关键特性
Apache Hudi 是数据湖的文件组织层,对 Parquet 等格式文件进行管理提供数据湖能力,支持多种计算引擎,提供 IUD 接口,在 HDFS/OBS 的数据集上提供了插入更新和增量拉取的流原语,具有如下特点:
1. 支持 ACID
支持 SnapShot 数据隔离,保证数据读取完整性,实现读写并发能力
数据 commit,数据入湖秒级可见
2. 快速 Upsert 能力
支持可插拔索引进制实现新增更新数据快速入湖
扩展 Merge 操作,实现新增、更新、删除混合数据同时入湖
支持写入同步小文件合并能力,写入数据自动按照预设文件大小进行文件合并
3. Schema Evolution
支持湖内数据 schema 的同步演进
支持多种常见 schema 变更操作
4. 多种视图读取接口
支持实时快照数据读取方式
支持历史快照数据读取方式
支持当前增量和历史增量数据读取方式
支持快速数据探索分析
5. 多版本
数据按照提交版本存储,保留历史操作记录,方便数据回溯
数据回退操作简单,速度快。
三、MRS-Hudi 的典型应用场景
l 基于 MRS-CDL 组件实现数据实时入湖
场景说明:
可以从业务数据库中直接抽取数据
数据入湖需要高实时性,秒级延迟
数据表变更需要与数据湖表结构实时同步
方案介绍:
该方案基于 MRS-CDL 组件构建,由 CDL 组件实现业务库的操作事件捕获并写入的基于 MRS-Hudi 的数据湖存储。
MRS-CDL 是 FusionInsight MRS 推出的一种数据实时同步服务,旨在将传统 OLTP 数据库中的事件信息捕捉并实时推送到数据湖中去。该方案有以下特性支持:
MRS-CDL 支持捕获业务系统库的 DDL 和 DML 事件。
支持将 MRS-Hudi 作为数据目标端。
可视化操作,采集任务、入湖任务以及任务管理都是可视化操作。
入湖任务支持多租户,保证数据权限与湖内权限保持一致。
全程任务开发零代码,节省开发成本。
方案收益:
入湖操作简单,全程零代码开发。
入湖时效快,从业务系统数据调整到入湖,可在分钟内完成。
l 基于 Flink SQL 入湖
场景说明:
无需直接对接数据库,数据由已有采集工具发送到 Kafka 或者由业务系统直接发送到 Kafka。
不需要实时同步 DDL 操作事件。
方案说明:
MRS 的 FlinkSQL 入湖链路是基于 Flink+Hudi 成的。MRS-Flink 以下特性支持该方案:
增加了 Flink 引擎与 Hudi 的对接能力。支持了对 Hudi 中 COW 表以及 MOR 表的读写操作。
FlinkServer(Flink 开发平台)增加了对 Hudi 的流量表支持。
作业开发与作业维护可视化操作。
方案收益:
入湖代码开发简单。
通过 FlinkSQL 实现入湖的语句如下:
Insert into table_hudi select * from table_kafka;
入湖时效快,最快可达秒级数据入湖。
l 湖内数据快速 ETL
场景说明:
湖内数据通常会采用数仓分层存储,例如:贴源层(SDI)、汇总层(DWS)、集市层(DW),各家企业也会有不同的分层标准。数据在各层直接流转也会有相应的规范。传统数据湖通常采用天级全量数据 ETL 处理以实现各层之间数据流转。
现在 Hudi 支持 ACID 特性、Upsert 特性和增量数据查询特性,可以实现增量的 ETL,在不同层之间快速的流转。
增量 ETL 作业与传统 ETL 作业业务逻辑完全一样,涉及到的增量表读取采用 commit_time 来获取增量数据,在作业逻辑中的多表关联可以使 Hudi 表与 Hudi 表关联,也可以是 Hudi 表与存量 Hive 表的关联。 ETL 作业开发可以基于 SparkSQL、FlinkSQL 开发。基于增量视图的 ETL 语句样例如下:Upsert table_dws select * from table_SDI where commit_time > “2021-07-07 12:12:12”。
由于采用了增量 ETL 方式,每次所处理的数据量也会下降,具体下降多少有赖于业务实际流量情况和增量的周期粒度。例如:物联网的业务数据,全天 24 小时流量稳定,采用 10 分钟级别的增量 ETL,那么所处理的数量将全天数据量的 1/(24*60/10)。因此在处理数据量大幅下降情况下,所需的计算资源也有相应的下降。
方案收益:
单个 ETL 作业处理时延降低,端到端时间缩短。
消耗资源下降,单位 ETL 作业所处理数据量大幅下降,所需计算资源也会相应下降。
原有湖内存储的模型无需调整。
l 支持交互式分析场景
场景说明:
数据湖存储的数据具有数据种类全、维度多、历史周期长的特点,业务所需数据在数据湖中基本都是存在的,因此直接交互式分析引擎直接对接数据湖可以满足业务各类需求数据需求。
在数据探索、BI 分析、报表展示等业务场景需要具备针对海量数据查询秒级返回的能力,同时要求分析接口简单 SQL 化。
方案说明:
在该场景中可以采用 MRS-HetuEngine 来实现该方案,MRS-HetuEngine 是分布式高性能的交互式分析引擎,主要用于数据的快速实时查询场景。MRS-HetuEngine 具备以下特性可以很好的支撑该场景:
MRS-HetuEngine 引擎已经完成与 MRS-Hudi 的对接,能够快速读取 Hudi 存储的数据。
支持读取快照查询,查询当前最新快照数据和历史快照数据。
支持增量查询,根据 commit_time,查询任一时间段内的增量数据。
针对 MOR 存储模型,尤其在数据探索场景可以通过读优化查询接口,快速分析 MOR 模型的 Hudi 表数据。
支持多源异构协同,具备跨 Hudi 与其他 DB 的联合分析能力,例如:维度数据存在 TP 库中,可以实现数据湖的事实表与 TP 维度表的关联分析。
查询语句 SQL 化,支持 JDBC 接口。
方案收益:
结合 MRS-CDL 数据入湖,业务系统库数据变更可在分钟内实现在数据湖内可见。
对 TB 级到 PB 的数据量的交互式查询可达到秒级结果返回。
可对湖内各层数据进行分析。
l 基于 Hudi 构建批流一体
场景说明:
传统处理架构中采用 Lambda 或者 Kappa 架构。Lambda 使用比较灵活,也可以解决业务场景,但是在该架构中需要两套系统来完成,维护比较复杂。数据分流以后也很难再关联应用。例如:流处理场景使用批处理的结果。Kappa 架构是为实时处理的架构,该架构缺少了批处理的能力。
方案说明:
在很多实时场景中,对时延要求可以是分钟级的,这样可以通过 MRS-Hudi 和实时计算引擎 Flink 和 Spark-Streaming 进行增量计算实现数据的快速处理,端到端实现分钟级延迟。另外 MRS-Hudi 本身就是湖存储,可以存储海量数据,因此也可以支持批量计算,常用的批处理引擎可以采用 Hive 和 Spark。
方案价值:
数据统一存储,实时数据与批量数据共用相同的存储。
同时支持实时计算与批量计算。相同业务逻辑的处理结果复用。
满足分钟级延时的实时处理能力和海量的批量处理。
五、总结
传统大数据由于不支持事务等痛点问题,造成 T+1 时延,虽然能够基于 Flink 流式计算实现少量数据在简单场景的秒级数据处理能力,但依然缺乏海量复杂场景的实时更新、事务支持能力。现在基于华为云 FusionInsight MRS 的 Hudi 可以构建分钟级数据处理方案,实现较大数据量的复杂计算实时处理能力,大大提升数据时效性,让数据价值近在眼前。
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/41cb6b46a767335b88f95f126】。文章转载请联系作者。
评论