基于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组件实现数据实时入湖
场景说明:
- 可以从业务数据库中直接抽取数据
- 数据入湖需要高实时性,秒级延迟
- 数据表变更需要与数据湖表结构实时同步
方案介绍:
该方案基于MRS-CDL组件构建,由CDL组件实现业务库的操作事件捕获并写入的基于MRS-Hudi的数据湖存储。
MRS-CDL是FusionInsight MRS推出的一种数据实时同步服务,旨在将传统OLTP数据库中的事件信息捕捉并实时推送到数据湖中去。该方案有以下特性支持:
- MRS-CDL支持捕获业务系统库的DDL和DML事件。
- 支持将MRS-Hudi作为数据目标端。
- 可视化操作,采集任务、入湖任务以及任务管理都是可视化操作。
- 入湖任务支持多租户,保证数据权限与湖内权限保持一致。
- 全程任务开发零代码,节省开发成本。
方案收益:
- 入湖操作简单,全程零代码开发。•入湖时效快,从业务系统数据调整到入湖,可在分钟内完成。
3.2 基于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;
入湖时效快,最快可达秒级数据入湖。
3.3 湖内数据快速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作业所处理数据量大幅下降,所需计算资源也会相应下降。
- 原有湖内存储的模型无需调整。
3.4 支持交互式分析场景
场景说明:
数据湖存储的数据具有数据种类全、维度多、历史周期长的特点,业务所需数据在数据湖中基本都是存在的,因此直接交互式分析引擎直接对接数据湖可以满足业务各类需求数据需求。
在数据探索、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的数据量的交互式查询可达到秒级结果返回。
- 可对湖内各层数据进行分析。
3.5 基于Hudi构建批流一体
场景说明:
传统处理架构中采用Lambda或者Kappa架构。Lambda使用比较灵活,也可以解决业务场景,但是在该架构中需要两套系统来完成,维护比较复杂。数据分流以后也很难再关联应用。例如:流处理场景使用批处理的结果。Kappa架构是为实时处理的架构,该架构缺少了批处理的能力。
方案说明:
在很多实时场景中,对时延要求可以是分钟级的,这样可以通过MRS-Hudi和实时计算引擎Flink和Spark-Streaming进行增量计算实现数据的快速处理,端到端实现分钟级延迟。另外MRS-Hudi本身就是湖存储,可以存储海量数据,因此也可以支持批量计算,常用的批处理引擎可以采用Hive和Spark。
方案价值:
- 数据统一存储,实时数据与批量数据共用相同的存储。
- 同时支持实时计算与批量计算。相同业务逻辑的处理结果复用。
- 满足分钟级延时的实时处理能力和海量的批量处理。
5. 总结
传统大数据由于不支持事务等痛点问题,造成T+1时延,虽然能够基于Flink流式计算实现少量数据在简单场景的秒级数据处理能力,但依然缺乏海量复杂场景的实时更新、事务支持能力。现在基于华为云FusionInsight MRS的Hudi可以构建分钟级数据处理方案,实现较大数据量的复杂计算实时处理能力,大大提升数据时效性,让数据价值近在眼前。
原文:华为云社区 https://bbs.huaweicloud.com/blogs/290866
作者:数海扬帆
推荐阅读
Apache Hudi实时入湖之DeltaStreamer最佳实践
恭喜!Apache Hudi社区新晋多名顶级互联网公司Committer
[快手基于Apache Hudi的实践](
基于Apache Hudi构建数据湖的典型应用场景介绍的更多相关文章
- KLOOK客路旅行基于Apache Hudi的数据湖实践
1. 业务背景介绍 客路旅行(KLOOK)是一家专注于境外目的地旅游资源整合的在线旅行平台,提供景点门票.一日游.特色体验.当地交通与美食预订服务.覆盖全球100个国家及地区,支持12种语言和41种货 ...
- Uber基于Apache Hudi构建PB级数据湖实践
1. 引言 从确保准确预计到达时间到预测最佳交通路线,在Uber平台上提供安全.无缝的运输和交付体验需要可靠.高性能的大规模数据存储和分析.2016年,Uber开发了增量处理框架Apache Hudi ...
- 基于Apache Hudi构建分析型数据湖
为了有机地发展业务,每个组织都在迅速采用分析. 在分析过程的帮助下,产品团队正在接收来自用户的反馈,并能够以更快的速度交付新功能. 通过分析提供的对用户的更深入了解,营销团队能够调整他们的活动以针对特 ...
- 字节跳动基于Apache Hudi构建EB级数据湖实践
来自字节跳动的管梓越同学一篇关于Apache Hudi在字节跳动推荐系统中EB级数据量实践的分享. 接下来将分为场景需求.设计选型.功能支持.性能调优.未来展望五部分介绍Hudi在字节跳动推荐系统中的 ...
- 基于 Apache Hudi 构建增量和无限回放事件流的 OLAP 平台
1. 摘要 在本博客中,我们将讨论在构建流数据平台时如何利用 Hudi 的两个最令人难以置信的能力. 增量消费--每 30 分钟处理一次数据,并在我们的组织内构建每小时级别的OLAP平台 事件流的无限 ...
- 基于Apache Hudi 的CDC数据入湖
作者:李少锋 文章目录: 一.CDC背景介绍 二.CDC数据入湖 三.Hudi核心设计 四.Hudi未来规划 1. CDC背景介绍 首先我们介绍什么是CDC?CDC的全称是Change data Ca ...
- 基于Apache Hudi在Google云构建数据湖平台
自从计算机出现以来,我们一直在尝试寻找计算机存储一些信息的方法,存储在计算机上的信息(也称为数据)有多种形式,数据变得如此重要,以至于信息现在已成为触手可及的商品.多年来数据以多种方式存储在计算机中, ...
- 使用Apache Hudi构建大规模、事务性数据湖
一个近期由Hudi PMC & Uber Senior Engineering Manager Nishith Agarwal分享的Talk 关于Nishith Agarwal更详细的介绍,主 ...
- 使用Apache Hudi + Amazon S3 + Amazon EMR + AWS DMS构建数据湖
1. 引入 数据湖使组织能够在更短的时间内利用多个源的数据,而不同角色用户可以以不同的方式协作和分析数据,从而实现更好.更快的决策.Amazon Simple Storage Service(amaz ...
随机推荐
- python cv2获取视频第一帧,并转码
安装Python库 sudo pip install opencv-python 或者sudo pip install opencv-python -i https://pypi.douban.com ...
- Java和C#语法对比(转)
Java C# 访问修饰符 public 修饰类.接口.变量.方法. 对所有类可见. 修饰类.接口.变量.方法. 对所有类可见. internal 无. 修饰类.接口.变量.方法. 类,接 ...
- LVGL|lvgl中文手册(lvgl中文文档教程)
lvgl官方的教程是英文的,这个是我在做项目时根据lvgl官方文档做出来的lvgl中文文档(持续更新维护),不仅仅只是生硬照搬lvgl官方文档的翻译,同时总结了我们在实际开发中遇到的各种细节,让这个文 ...
- CDN相关知识及CDN绕过
#什么是CDN? 内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络.CDN应用广泛,支持多种行业 ...
- OSPF的基本工作原理
OSPF的基本工作原理 1.定义 2.特点 3.基本概念 4.OSPF五种分组类型 5.DR/BDR 6.区域 1.定义 开放最短路径优先OSPF,是为了克服RIP的缺点在1989年开发出来的. &q ...
- DIV+css排版问题技巧总结---v客学院技术分享
DIV+css排版问题技巧总结 一.排版思路 1.从上到下,从左到右,从大到小. 2.首先确定排版分区,排除色块分布,然后再从简单的部分开始. 3.在某一块内将HTML部分写好 ...
- POJ1944
poj1944 一道我不会做的贪心题. (思维才是OI的重点) 但是if您也不会,那就来听我瞎扯吧. 首先,这个图是一个圈,只能连接邻点,使所有求的点联通. 我们先不考虑环,那么就可以想出一个假的做法 ...
- C++第三十七篇 -- 调试驱动程序
上一篇写的KMDF程序是通过串口进行配置的,那么我们在VS中Attach to process外,可以直接用Winbdg进行调试,winbdg.exe所在路径为C:\Program Files (x8 ...
- Linux Shell 学习笔记 00
1.Bash = Bourne Again SHell 2.终端提示符: #普通用户 username@hostname$ #管理员用户 root@hostname# 3.shell脚本通常是一个以s ...
- header.mapper 用法
const header= [xxxx,xxxx] 基本用法是 const obj = header.map( item=>{ obj= item+'123'; return obj }) c ...