基于Apache Hudi构建数据湖的典型应用场景介绍

1. 传统数据湖存在的问题与挑战

传统数据湖解决方案中,常用Hive来构建T+1级别的数据仓库,通过HDFS存储实现海量数据的存储与水平扩容,通过Hive实现元数据的管理以及数据操作的SQL化。虽然能够在海量批处理场景中取得不错的效果,但依然存在如下现状问题:

问题一:不支持事务

由于传统大数据方案不支持事务,有可能会读到未写完成的数据,造成数据统计错误。为了规避该问题,通常控制读写任务顺序调用,在保证写任务完成后才能启动读任务。但并不是所有读任务都能够被调度系统约束住,在读取时仍存在该问题。

问题二:数据更新效率低

业务系统库的数据,除流水表类的数据都是新增数据外,还有很多状态类数据表需要更新操作(例如:账户余额表,客户状态表,设备状态表等),而传统大数据方案无法满足增量更新,常采用拉链方式,先进行join操作再进行insert overwrite操作,通过覆盖写的方式完成更新操作,该操作往往需要T+1的批处理模式 ,从而导致端到端数据时延T+1,存在效率低、成本高等问题。

问题三:无法及时应对业务表变化

上游业务系统对数据schema发生变更后,会导致数据无法入湖,需要数据湖的表schema进行同步调整。从技术实现上采用数据表重建的方式来满足该场景,导致数据湖的数据表的管理与维护方案复杂,实现成本高。另外该种场景通常需要业务部门与数据团队相配合,通过管理流程来实现表结构的同步。

问题四:历史快照表数据冗余

传统数据湖方案需要对历史的快照表进行存储,采用全量历史存储的方式实现,例如:天级历史快照表,每天都会全量存储全表数据。这样就造成了大量的数据存储冗余,占用大量的存储资源。

问题五:小批量增量数据处理成本高

传统数据湖为了实现增量ETL,通常将增量数据按照分区的方式进行存储,若为了实现T+0的数据处理,增量数据需要按照小时级或者分钟级的分区粒度。该种实现形式会导致小文件问题,大量分区也会导致元数据服务压力增大。

基于以上问题,华为FunsionInsight MRS集成Apache Hudi组件,希望通过Hudi组件来改善传统数据湖存在的问题。

2. MRS云原生数据湖Hudi的关键特性

Apache Hudi是数据湖的文件组织层,对Parquet等格式文件进行管理提供数据湖能力,支持多种计算引擎,提供IUD接口,在 HDFS/OBS的数据集上提供了插入更新和增量拉取的流原语,具有如下特点:

支持ACID

支持SnapShot数据隔离,保证数据读取完整性,实现读写并发能力

数据commit,数据入湖秒级可见

快速Upsert能力

支持可插拔索引进制实现新增更新数据快速入湖

扩展Merge操作,实现新增、更新、删除混合数据同时入湖

支持写入同步小文件合并能力,写入数据自动按照预设文件大小进行文件合并

Schema Evolution

支持湖内数据schema的同步演进

支持多种常见schema变更操作

多种视图读取接口

支持实时快照数据读取方式

支持历史快照数据读取方式

支持当前增量和历史增量数据读取方式

支持快速数据探索分析

多版本

数据按照提交版本存储,保留历史操作记录,方便数据回溯

数据回退操作简单,速度快

3. MRS-Hudi的典型应用场景 3.1 基于MRS-CDL组件实现数据实时入湖

基于Apache Hudi构建数据湖的典型应用场景介绍

场景说明:

可以从业务数据库中直接抽取数据

数据入湖需要高实时性,秒级延迟

数据表变更需要与数据湖表结构实时同步

方案介绍:

该方案基于MRS-CDL组件构建,由CDL组件实现业务库的操作事件捕获并写入的基于MRS-Hudi的数据湖存储。

MRS-CDL是FusionInsight MRS推出的一种数据实时同步服务,旨在将传统OLTP数据库中的事件信息捕捉并实时推送到数据湖中去。该方案有以下特性支持:

MRS-CDL支持捕获业务系统库的DDL和DML事件。

支持将MRS-Hudi作为数据目标端。

可视化操作,采集任务、入湖任务以及任务管理都是可视化操作。

入湖任务支持多租户,保证数据权限与湖内权限保持一致。

全程任务开发零代码,节省开发成本。

方案收益:

入湖操作简单,全程零代码开发。•入湖时效快,从业务系统数据调整到入湖,可在分钟内完成。

3.2 基于Flink SQL入湖

基于Apache Hudi构建数据湖的典型应用场景介绍

场景说明:

无需直接对接数据库,数据由已有采集工具发送到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;

入湖时效快,最快可达秒级数据入湖。

3.3 湖内数据快速ETL

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwszs.html