多数据源一站式入湖
簡介:?通過一站式入湖,將不同數據源的數據統一歸并到以OSS對象存儲為基礎架構的集中式數據湖存儲中,解決了企業面臨的數據孤島問題,為統一的數據分析打好了基礎.
背景
數據湖作為一個集中化的數據存儲倉庫,支持的數據類型具有多樣性,包括結構化、半結構化以及非結構化的數據,數據來源上包含數據庫數據、binglog增量數據、日志數據以及已有數倉上的存量數據等.數據湖能夠將這些不同來源、不同格式的數據集中存儲管理在高性價比的存儲如OSS等對象存儲中,并對外提供統一的數據分析方式,有效解決了企業中面臨的數據孤島問題,同時大大降低了企業存儲和使用數據的成本.
由于數據湖數據來源的多樣性,如何簡單高效的將這些異構數據源的數據遷移到中心化的數據湖存儲中,是數據湖構建過程面臨的問題.為此,我們需要提供完善的一站式入湖的能力,解決我們面臨的問題,主要包括以下幾點:
- 支持異構數據源統一的入湖方式
提供一個簡單統一的入湖方式,用戶可以通過簡單的頁面配置實現異構數據源的入湖操作.
- 滿足數據入湖的時效性
對于日志、binglog等類型的數據源,需要實現分鐘級延遲的數據入湖能力,滿足實時交互式 分析場景對時效性的要求.
- 支持數據源的實時變更
對于數據庫、TableStore Tunnel等類型的數據源,源頭數據會經常發生變更,比如數據層面的update,delete等操作,甚至schema層面的字段結構變更. 需要利用更好的數據格式來支持這類變更行為.
為此,阿里云新推出了數據湖構建(Data Lake Formation,DLF)服務,提供了完整的一站式入湖解決方案。
整體方案
數據湖構建的入湖技術方案如下圖所示:
數據入湖整體上分為入湖模板、入湖引擎、文件格式以及數據湖存儲四個部分:
入湖模板
入湖模板定義了常見的數據源入湖方式,目前主要包括RDS全量模板、DTS增量模板、TableStore模板、SLS模板以及文件格式轉換5種模板.
用戶根據不同的數據源選擇相應的入湖模板,然后填寫源頭相關參數信息,即可完成入湖模板的創建,并提交給入湖引擎運行.
入湖引擎
入湖引擎使用了阿里云EMR團隊自研的Spark Streaming SQL以及EMR Spark引擎,Streaming SQL基于Spark Structured Streaming,提供了相對完善的Streaming SQL語法,極大簡化了實時計算的開發成本。對于實時增量模板,上層入湖模板部分將入湖模板翻譯成Streaming SQL,然后提交Spark集群運行。我們在Streaming SQL里面擴展了Merge Into語法來支持update、delete操作。對于RDS等全量模板,則直接翻譯成Spark SQL運行。
文件格式
DLF支持的文件格式包括Delta Lake、Parquet、json等,更多文件格式比如Hudi也在接入中。Delta Lake和Hudi等文件格式能很好的支持update、delete等操作,同時支持schema merge功能。可以很好的解決數據源實時變更問題。
數據湖存儲
數據湖數據統一放在OSS對象存儲中,OSS提供了海量數據存儲的能力,同時在可靠性,價格等方面更具優勢.
一站式入湖方案在很好的解決了前面提的幾個問題:
- 支持異構數據源統一的入湖方式
通過模板配置,實現了統一簡單的數據入湖方式.
- 滿足數據入湖的時效性
通過自研Streaming SQL實現了分鐘級延遲的數據實時入湖,滿足了時效性要求.
- 支持數據源的實時變更
通過引進Delta Lake等更優的文件格式,實現了對update、delete等數據實時變更要求.
實時入湖
隨著大數據的不斷發展,用戶對數據時效性的要求越來越高,實時入湖也是我們重點關注的場景,目前我們已經支持了DTS、TableStore以及SLS的實時入湖能力.
DTS增量數據實時入湖
DTS是阿里云提供了高可靠的數據傳輸服務,支持不同類型數據庫增量數據的訂閱和消費。我們實現了DTS實時訂閱數據的入湖,支持用戶已有訂閱通道入湖和自動創建訂閱通道入湖兩種方式,減少用戶配置成本。
在技術上,支持增量數據對歷史數據的update、delete變更操作,實現分鐘級延遲的數據變更感知能力。技術實現上在Streaming SQL中擴展了merge into語法來對接底層文件格式Delta Lake的相關接口.
MERGE INTO delta_tbl AS target USING (select recordType, pk, ...from {{binlog_parser_subquery}} ) AS source ON target.pk = source.pk WHEN MATCHED AND source.recordType='UPDATE' THEN UPDATE SET * WHEN MATCHED AND source.recordType='DELETE' THEN DELETE WHEN NOT MATCHED THEN INSERT *和傳統數倉的binlog入倉相比,基于數據湖的方案具有更大的優勢. 在傳統數倉中,為了實現數據庫等變更數據的入倉,通常需要維護兩張表,一張增量表用于存放每天新增的數據庫變更明細數據,另外一張全量表,存放歷史所有的merge數據,全量表每天和增量表更據主鍵做merge操作. 顯然,基于數據湖方案在實現的簡單性和時效性上都更優.
TableStore實時入湖
TableStore是阿里云提供的是阿里云自研的NoSQL多模型數據庫,提供海量結構化數據存儲以及快速的查詢和分析服務.它同時支持了通道功能,支持變更數據的實時消費。我們支持TableStore全量通道、增量通道以及全量加增量通道的實現入湖.其中全量通道包含歷史全量數據,增量通道包含增量變化的數據,全量加增量通道則包含了歷史全量和增量變化的數據.
SLS日志實時入湖
SLS是阿里云提供的針對日志類數據的一站式服務,主要存放用戶日志數據。將SLS中的日志數據實時歸檔到數據湖中,進行分析處理可以充分挖掘數據中的價值。目前通過SLS入湖模板,填寫project、logstore等少量信息,即可完成日志實時入湖的能力。
總結展望
一站式入湖功能極大的降低了異構數據源入湖的成本,滿足了SLS、DTS等數據源入湖的時效性要求,同時也支持了數據源實時變更的能力。通過一站式入湖,將不同數據源的數據統一歸并到以OSS對象存儲為基礎架構的集中式數據湖存儲中,解決了企業面臨的數據孤島問題,為統一的數據分析打好了基礎.
后續一站式入湖一方面將繼續完善功能,支持更多類型的數據源,入湖模板方面開放更多能力給用戶,支持自定義ETL的功能,提高靈活性。另一方面,將會在性能優化方面不斷投入,提供更好的時效性和穩定性。
?
原文鏈接
本文為阿里云原創內容,未經允許不得轉載。
總結
- 上一篇: 基础组件完善的今天,如何通过业务组件提效
- 下一篇: 【详谈 Delta Lake 】系列技术