Hudi 場景 | 基于 Apache Hudi 構(gòu)建數(shù)據(jù)湖的典型應(yīng)用場景
1. 傳統(tǒng)數(shù)據(jù)湖存在的問題與挑戰(zhàn)
傳統(tǒng)數(shù)據(jù)湖解決方案中,常用Hive來構(gòu)建T+1級別的數(shù)據(jù)倉庫,通過HDFS存儲實(shí)現(xiàn)海量數(shù)據(jù)的存儲與水平擴(kuò)容,通過Hive實(shí)現(xiàn)元數(shù)據(jù)的管理以及數(shù)據(jù)操作的SQL化。雖然能夠在海量批處理場景中取得不錯(cuò)的效果,但依然存在如下現(xiàn)狀問題:
問題一:不支持事務(wù)
由于傳統(tǒng)大數(shù)據(jù)方案不支持事務(wù),有可能會讀到未寫完成的數(shù)據(jù),造成數(shù)據(jù)統(tǒng)計(jì)錯(cuò)誤。為了規(guī)避該問題,通??刂谱x寫任務(wù)順序調(diào)用,在保證寫任務(wù)完成后才能啟動讀任務(wù)。但并不是所有讀任務(wù)都能夠被調(diào)度系統(tǒng)約束住,在讀取時(shí)仍存在該問題。
問題二:數(shù)據(jù)更新效率低
業(yè)務(wù)系統(tǒng)庫的數(shù)據(jù),除流水表類的數(shù)據(jù)都是新增數(shù)據(jù)外,還有很多狀態(tài)類數(shù)據(jù)表需要更新操作(例如:賬戶余額表,客戶狀態(tài)表,設(shè)備狀態(tài)表等),而傳統(tǒng)大數(shù)據(jù)方案無法滿足增量更新,常采用拉鏈方式,先進(jìn)行join操作再進(jìn)行insert overwrite操作,通過覆蓋寫的方式完成更新操作,該操作往往需要T+1的批處理模式 ,從而導(dǎo)致端到端數(shù)據(jù)時(shí)延T+1,存在效率低、成本高等問題。
問題三:無法及時(shí)應(yīng)對業(yè)務(wù)表變化
上游業(yè)務(wù)系統(tǒng)對數(shù)據(jù)schema發(fā)生變更后,會導(dǎo)致數(shù)據(jù)無法入湖,需要數(shù)據(jù)湖的表schema進(jìn)行同步調(diào)整。從技術(shù)實(shí)現(xiàn)上采用數(shù)據(jù)表重建的方式來滿足該場景,導(dǎo)致數(shù)據(jù)湖的數(shù)據(jù)表的管理與維護(hù)方案復(fù)雜,實(shí)現(xiàn)成本高。另外該種場景通常需要業(yè)務(wù)部門與數(shù)據(jù)團(tuán)隊(duì)相配合,通過管理流程來實(shí)現(xiàn)表結(jié)構(gòu)的同步。
問題四:歷史快照表數(shù)據(jù)冗余
傳統(tǒng)數(shù)據(jù)湖方案需要對歷史的快照表進(jìn)行存儲,采用全量歷史存儲的方式實(shí)現(xiàn),例如:天級歷史快照表,每天都會全量存儲全表數(shù)據(jù)。這樣就造成了大量的數(shù)據(jù)存儲冗余,占用大量的存儲資源。
問題五:小批量增量數(shù)據(jù)處理成本高
傳統(tǒng)數(shù)據(jù)湖為了實(shí)現(xiàn)增量ETL,通常將增量數(shù)據(jù)按照分區(qū)的方式進(jìn)行存儲,若為了實(shí)現(xiàn)T+0的數(shù)據(jù)處理,增量數(shù)據(jù)需要按照小時(shí)級或者分鐘級的分區(qū)粒度。該種實(shí)現(xiàn)形式會導(dǎo)致小文件問題,大量分區(qū)也會導(dǎo)致元數(shù)據(jù)服務(wù)壓力增大。
基于以上問題,華為FunsionInsight MRS集成Apache Hudi組件,希望通過Hudi組件來改善傳統(tǒng)數(shù)據(jù)湖存在的問題。
2. MRS云原生數(shù)據(jù)湖Hudi的關(guān)鍵特性
Apache Hudi是數(shù)據(jù)湖的文件組織層,對Parquet等格式文件進(jìn)行管理提供數(shù)據(jù)湖能力,支持多種計(jì)算引擎,提供IUD接口,在 HDFS/OBS的數(shù)據(jù)集上提供了插入更新和增量拉取的流原語,具有如下特點(diǎn):
?支持ACID?支持SnapShot數(shù)據(jù)隔離,保證數(shù)據(jù)讀取完整性,實(shí)現(xiàn)讀寫并發(fā)能力?數(shù)據(jù)commit,數(shù)據(jù)入湖秒級可見?快速Upsert能力?支持可插拔索引進(jìn)制實(shí)現(xiàn)新增更新數(shù)據(jù)快速入湖?擴(kuò)展Merge操作,實(shí)現(xiàn)新增、更新、刪除混合數(shù)據(jù)同時(shí)入湖?支持寫入同步小文件合并能力,寫入數(shù)據(jù)自動按照預(yù)設(shè)文件大小進(jìn)行文件合并?Schema Evolution?支持湖內(nèi)數(shù)據(jù)schema的同步演進(jìn)?支持多種常見schema變更操作?多種視圖讀取接口?支持實(shí)時(shí)快照數(shù)據(jù)讀取方式?支持歷史快照數(shù)據(jù)讀取方式?支持當(dāng)前增量和歷史增量數(shù)據(jù)讀取方式?支持快速數(shù)據(jù)探索分析?多版本?數(shù)據(jù)按照提交版本存儲,保留歷史操作記錄,方便數(shù)據(jù)回溯?數(shù)據(jù)回退操作簡單,速度快
3. MRS-Hudi的典型應(yīng)用場景
3.1 基于MRS-CDL組件實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)入湖

場景說明:
?可以從業(yè)務(wù)數(shù)據(jù)庫中直接抽取數(shù)據(jù)?數(shù)據(jù)入湖需要高實(shí)時(shí)性,秒級延遲?數(shù)據(jù)表變更需要與數(shù)據(jù)湖表結(jié)構(gòu)實(shí)時(shí)同步
方案介紹:
該方案基于MRS-CDL組件構(gòu)建,由CDL組件實(shí)現(xiàn)業(yè)務(wù)庫的操作事件捕獲并寫入的基于MRS-Hudi的數(shù)據(jù)湖存儲。
MRS-CDL是FusionInsight MRS推出的一種數(shù)據(jù)實(shí)時(shí)同步服務(wù),旨在將傳統(tǒng)OLTP數(shù)據(jù)庫中的事件信息捕捉并實(shí)時(shí)推送到數(shù)據(jù)湖中去。該方案有以下特性支持:
?MRS-CDL支持捕獲業(yè)務(wù)系統(tǒng)庫的DDL和DML事件。?支持將MRS-Hudi作為數(shù)據(jù)目標(biāo)端。?可視化操作,采集任務(wù)、入湖任務(wù)以及任務(wù)管理都是可視化操作。?入湖任務(wù)支持多租戶,保證數(shù)據(jù)權(quán)限與湖內(nèi)權(quán)限保持一致。?全程任務(wù)開發(fā)零代碼,節(jié)省開發(fā)成本。
方案收益:
?入湖操作簡單,全程零代碼開發(fā)。?入湖時(shí)效快,從業(yè)務(wù)系統(tǒng)數(shù)據(jù)調(diào)整到入湖,可在分鐘內(nèi)完成。
3.2 基于Flink SQL入湖

場景說明:
?無需直接對接數(shù)據(jù)庫,數(shù)據(jù)由已有采集工具發(fā)送到Kafka或者由業(yè)務(wù)系統(tǒng)直接發(fā)送到Kafka。?不需要實(shí)時(shí)同步DDL操作事件。
方案說明:
MRS的FlinkSQL入湖鏈路是基于Flink+Hudi成的。MRS-Flink以下特性支持該方案:
?增加了Flink引擎與Hudi的對接能力。支持了對Hudi中COW表以及MOR表的讀寫操作。?FlinkServer(Flink開發(fā)平臺)增加了對Hudi的流量表支持。?作業(yè)開發(fā)與作業(yè)維護(hù)可視化操作。
方案收益:
?入湖代碼開發(fā)簡單。?通過FlinkSQL實(shí)現(xiàn)入湖的語句如下:
Insert into table_hudi select * from table_kafka;
入湖時(shí)效快,最快可達(dá)秒級數(shù)據(jù)入湖。
3.3 湖內(nèi)數(shù)據(jù)快速ETL

場景說明:
湖內(nèi)數(shù)據(jù)通常會采用數(shù)倉分層存儲,例如:貼源層(SDI)、匯總層(DWS)、集市層(DW),各家企業(yè)也會有不同的分層標(biāo)準(zhǔn)。數(shù)據(jù)在各層直接流轉(zhuǎn)也會有相應(yīng)的規(guī)范。傳統(tǒng)數(shù)據(jù)湖通常采用天級全量數(shù)據(jù)ETL處理以實(shí)現(xiàn)各層之間數(shù)據(jù)流轉(zhuǎn)。
現(xiàn)在Hudi支持ACID特性、Upsert特性和增量數(shù)據(jù)查詢特性,可以實(shí)現(xiàn)增量的ETL,在不同層之間快速的流轉(zhuǎn)。
增量ETL作業(yè)與傳統(tǒng)ETL作業(yè)業(yè)務(wù)邏輯完全一樣,涉及到的增量表讀取采用commit_time來獲取增量數(shù)據(jù),在作業(yè)邏輯中的多表關(guān)聯(lián)可以使Hudi表與Hudi表關(guān)聯(lián),也可以是Hudi表與存量Hive表的關(guān)聯(lián)。ETL作業(yè)開發(fā)可以基于SparkSQL、FlinkSQL開發(fā)。基于增量視圖的ETL語句樣例如下:Upsert table_dws select * from table_SDI where commit_time > “2021-07-07 12:12:12”。
由于采用了增量ETL方式,每次所處理的數(shù)據(jù)量也會下降,具體下降多少有賴于業(yè)務(wù)實(shí)際流量情況和增量的周期粒度。例如:物聯(lián)網(wǎng)的業(yè)務(wù)數(shù)據(jù),全天24小時(shí)流量穩(wěn)定,采用10分鐘級別的增量ETL,那么所處理的數(shù)量將全天數(shù)據(jù)量的1/(24*60/10)。因此在處理數(shù)據(jù)量大幅下降情況下,所需的計(jì)算資源也有相應(yīng)的下降。
方案收益:
?單個(gè)ETL作業(yè)處理時(shí)延降低,端到端時(shí)間縮短。?消耗資源下降,單位ETL作業(yè)所處理數(shù)據(jù)量大幅下降,所需計(jì)算資源也會相應(yīng)下降。?原有湖內(nèi)存儲的模型無需調(diào)整。
3.4 支持交互式分析場景

場景說明:
數(shù)據(jù)湖存儲的數(shù)據(jù)具有數(shù)據(jù)種類全、維度多、歷史周期長的特點(diǎn),業(yè)務(wù)所需數(shù)據(jù)在數(shù)據(jù)湖中基本都是存在的,因此直接交互式分析引擎直接對接數(shù)據(jù)湖可以滿足業(yè)務(wù)各類需求數(shù)據(jù)需求。
在數(shù)據(jù)探索、BI分析、報(bào)表展示等業(yè)務(wù)場景需要具備針對海量數(shù)據(jù)查詢秒級返回的能力,同時(shí)要求分析接口簡單SQL化。
方案說明:
在該場景中可以采用MRS-HetuEngine來實(shí)現(xiàn)該方案,MRS-HetuEngine是分布式高性能的交互式分析引擎,主要用于數(shù)據(jù)的快速實(shí)時(shí)查詢場景。MRS-HetuEngine具備以下特性可以很好的支撐該場景:
?MRS-HetuEngine引擎已經(jīng)完成與MRS-Hudi的對接,能夠快速讀取Hudi存儲的數(shù)據(jù)。?支持讀取快照查詢,查詢當(dāng)前最新快照數(shù)據(jù)和歷史快照數(shù)據(jù)。?支持增量查詢,根據(jù)commit_time,查詢?nèi)我粫r(shí)間段內(nèi)的增量數(shù)據(jù)。?針對MOR存儲模型,尤其在數(shù)據(jù)探索場景可以通過讀優(yōu)化查詢接口,快速分析MOR模型的Hudi表數(shù)據(jù)。?支持多源異構(gòu)協(xié)同,具備跨Hudi與其他DB的聯(lián)合分析能力,例如:維度數(shù)據(jù)存在TP庫中,可以實(shí)現(xiàn)數(shù)據(jù)湖的事實(shí)表與TP維度表的關(guān)聯(lián)分析。?查詢語句SQL化,支持JDBC接口。
方案收益:
?結(jié)合MRS-CDL數(shù)據(jù)入湖,業(yè)務(wù)系統(tǒng)庫數(shù)據(jù)變更可在分鐘內(nèi)實(shí)現(xiàn)在數(shù)據(jù)湖內(nèi)可見。?對TB級到PB的數(shù)據(jù)量的交互式查詢可達(dá)到秒級結(jié)果返回。?可對湖內(nèi)各層數(shù)據(jù)進(jìn)行分析。
3.5 基于Hudi構(gòu)建批流一體

場景說明:
傳統(tǒng)處理架構(gòu)中采用Lambda或者Kappa架構(gòu)。Lambda使用比較靈活,也可以解決業(yè)務(wù)場景,但是在該架構(gòu)中需要兩套系統(tǒng)來完成,維護(hù)比較復(fù)雜。數(shù)據(jù)分流以后也很難再關(guān)聯(lián)應(yīng)用。例如:流處理場景使用批處理的結(jié)果。Kappa架構(gòu)是為實(shí)時(shí)處理的架構(gòu),該架構(gòu)缺少了批處理的能力。
方案說明:
在很多實(shí)時(shí)場景中,對時(shí)延要求可以是分鐘級的,這樣可以通過MRS-Hudi和實(shí)時(shí)計(jì)算引擎Flink和Spark-Streaming進(jìn)行增量計(jì)算實(shí)現(xiàn)數(shù)據(jù)的快速處理,端到端實(shí)現(xiàn)分鐘級延遲。另外MRS-Hudi本身就是湖存儲,可以存儲海量數(shù)據(jù),因此也可以支持批量計(jì)算,常用的批處理引擎可以采用Hive和Spark。
方案價(jià)值:
?數(shù)據(jù)統(tǒng)一存儲,實(shí)時(shí)數(shù)據(jù)與批量數(shù)據(jù)共用相同的存儲。?同時(shí)支持實(shí)時(shí)計(jì)算與批量計(jì)算。相同業(yè)務(wù)邏輯的處理結(jié)果復(fù)用。?滿足分鐘級延時(shí)的實(shí)時(shí)處理能力和海量的批量處理。
5. 總結(jié)
傳統(tǒng)大數(shù)據(jù)由于不支持事務(wù)等痛點(diǎn)問題,造成T+1時(shí)延,雖然能夠基于Flink流式計(jì)算實(shí)現(xiàn)少量數(shù)據(jù)在簡單場景的秒級數(shù)據(jù)處理能力,但依然缺乏海量復(fù)雜場景的實(shí)時(shí)更新、事務(wù)支持能力?,F(xiàn)在基于華為云FusionInsight MRS的Hudi可以構(gòu)建分鐘級數(shù)據(jù)處理方案,實(shí)現(xiàn)較大數(shù)據(jù)量的復(fù)雜計(jì)算實(shí)時(shí)處理能力,大大提升數(shù)據(jù)時(shí)效性,讓數(shù)據(jù)價(jià)值近在眼前。
原文:華為云社區(qū) https://bbs.huaweicloud.com/blogs/290866
作者:數(shù)海揚(yáng)帆
推薦閱讀
Apache Hudi:新一代流式數(shù)據(jù)湖平臺
Apache Hudi實(shí)時(shí)入湖之DeltaStreamer最佳實(shí)踐
數(shù)據(jù)湖正當(dāng)時(shí)!華為云MRS重磅集成Apache Hudi
恭喜!Apache Hudi社區(qū)新晉多名頂級互聯(lián)網(wǎng)公司Committer
