基于Delta lake、Hudi格式的湖仓一体方案
本文作者 孟碩 阿里云智能 產品專家
直播視頻請點擊 直播觀看
一、最佳實踐背景
整個最佳實踐是基于MaxCompute的湖倉一體架構,模擬公司使用場景。比如公司 A 使用云上關系型數據庫 RDS 作為自己的業務庫,同時使用阿里云 EMR 系統做日志數據采集。將數據匯集到云上對象存儲 OSS 上,引入了數據湖常會用的存儲機制 Delta Lake 和 Hudi 為數據湖提供流處理、批處理能力。通過 MaxCompute 查詢到實時數據,即時洞察業務數據變化。 整個場景demo的架構是,云上EMR產生的實時變化的數據,包括在線數據庫RDS,通過數據入湖,然后實時的把數據變化體現在歸檔的OSS 上。同時MaxCompute跟其他引擎一起分析OSS上的數據。
湖倉一體架構:異構數據平臺融合
因為企業內部會有很多業務線,不同的部門,因為本身業務的需求及員工的技術棧幾個方面的原因,導致采用的數據架構不一樣,數據平臺也不一樣。技術架構有Hadoop技術體系,也有云上全托管架構,所以造成不同的部門對技術架構,使用的技術平臺不一樣,也造成了數據割裂的情況。湖倉一體就是幫助企業把異構數據平臺做一個打通,底層數據可以相互訪問,中間元數據層也可以做到互相透視,數據可以做到自由流動。數據湖部分不只是支持EMR,也支持ESC Hadoop和云下IDC Hadoop。其中MaxCompute數據倉庫也可以和數據湖EMR做一個數據打通,在用MaxCompute跟聯播數據源做一個聯播查詢,這樣可以把所有的數據在MaxCompute中做一個匯總。比如有三張表,在RDS和Hive中,同事MaxCompute里有大量事實表,如果需求是對這個三個表做一個聯合查詢,通過這個架構,可以很方便的做到這一點。
更快的業務洞察
- DataWorks 自助開通湖倉一體:5分鐘打通異構數據平臺(Hadoop/ DLF+OSS )
更廣泛的生態對接
- 支持對接阿里云云原生數據湖構建(DLF)
- 支持查詢 DeltaLake、Hudi 格式
- 支持對接更多外部聯邦數據源 Hologres (RDS、HBaseUpcoming! )
更高的性能
- 智能 Cache 實現 OSS/ HDFS 數據訪問加速
- 湖數據查詢加速
更好的綜合數據開發與治理
- 跨引擎開發和調度
- 統一湖/倉數據開發體驗
- 統一湖/倉全局資產管理
湖倉一體的架構
首先看右側部分,是跟OSS和DLF側的打通,因為在OSS 上我們歸檔大量的半結構化和結構化的數據。有關系型數據庫,有nosql數據庫,可以通過DLF組件把OSS上的元數據爬取出來。相比于在MaxCompute上創建OSS外表訪問OSS數據,現在通過DLF統一自動識別OSS schema,MaxCompute直接映射這種方式,會更方便一些。一些數據的更新,schema的變更,DLF也可以自動識別到。同時DLF里面有用戶權限管理,后續會陸續上線。也就是說對于OSS對接的引擎,統一的數據訪問權限會收斂到DLF里。
左側是對Hadoop生態系統的打通,Hadoop包括阿里云半托管的EMR,開源的on ECS和IDC Hadoop,也包含主流的發行版CDH,也都可以做打通。下方再加上聯邦數據源。通過MaxCompute可以連接到各種各樣的云上數據源,通過上傳DataWorks做統一的開發和管理,以及數據治理。 這樣就有一個全域數據資產視圖,開發工作數據也能聯通,元數據也能投射到DataWorks之上。這就是整個湖倉一體的架構。
二、相關產品介紹
數據湖構建DataLakeForamtion
DLF主要是針對OSS數據,做一個托管,上層對接其他引擎如EMR、Databricks、Datalnsight、PAI、MaxCompute、Hologres。這些引擎可以共享一份元數據在DLF上。后續企業可以根據不同部門,不同業務場景隨意切換引擎。后期我們也會逐漸完善訪問控制,以及一些企業級能力,比如安全,包括數據分層等。
數據入湖
- 支持多種數據源入湖,MySQL、SLS、OTS、Kafka等
- 離線/實時入湖,支持Delta/Hudi等多種數據湖格式
- 數據入湖預處理,支持字段mapping/轉換/自定義udf操作
元數據管理
- 統一元數據管理,解決元數據多引擎一致性問題
- 兼容開源生態API
- 自動生成元數據,降低使用成本
訪問控制
- 集中數據訪問權限控制,多引擎統一集中式賦權
- 數據訪問日志審計,統計數據訪問信息
三、最佳實踐Demo
整體架構
企業構建和應用數據湖一般需要經歷數據入湖、數據湖存儲與管理、數據探索與分析等幾個過程。主要介紹基于阿里云 MaxCompute、數據湖構建(DLF)+ 對象存儲(OSS)構建一站式的數據入湖與分析實戰。其主要數據鏈路如下:
第一步:RDS數據準備
RDS 數據準備,在 RDS 中創建數據庫 academy_db。在賬戶中心創建能夠讀取 employees 數據庫的用戶賬號。通過DMS登錄數據庫,運行一下語句創建 anti_fraud_result 表,及插入少量數據。
CREATE TABLE `anti_fraud_result` ( `transactionid` varchar(32) NOT NULL, `uid` varchar(32) DEFAULT NULL, `card` varchar(32) DEFAULT NULL, `longitude` double(12,8) DEFAULT '12.00000000', `latitude` double(12,8) DEFAULT '12.00000000', PRIMARY KEY (`transactionid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; INSERT INTO `anti_fraud_result` values ("12489571","82005","123123",3.14592040,101.12315432); INSERT INTO `anti_fraud_result` values ("12489572","82005","123123",3.14592040,101.12315432); INSERT INTO `anti_fraud_result` values ("12489573","82005","123123",3.14592040,101.12315432); INSERT INTO `anti_fraud_result` values ("12489574","82005","123123",3.14592040,101.12315432);第二部:DLF數據入湖
- 進入DLF控制臺界面:https://dlf.console.aliyun.com/cn-hangzhou/home,點擊菜單 數據入湖 -> 數據源管理-> 新建數據源。輸入數據庫相關連接信息
填寫 RDS 實例、登錄信息以及網絡和安全組信息后,點擊“連接測試”
- 在 OSS 中新建 Bucket 和目錄,如 bucket: rtcompute,目錄:oss://rtcompute/csvfile/
- 在 DLF 控制臺界面點擊左側菜單“元數據管理”->“元數據庫”,點擊“新建元數據庫”。填寫名稱 covid-19,新建目錄并選擇。
- 創建入湖任務:
a. DLF 控制臺中點擊菜單“數據入湖”->“入戶任務管理”,點擊“新建入湖任務” -> 選擇“關系數據庫實時入湖”,按照下圖的信息填寫數據源、目標數據湖、任務配置等信息。并保存。
如果是 Hudi 格式,在“存儲格式”中可以選擇 Hudi:
b. 下一步輸入任務實例名稱,RAM角色以及最大資源使用量,點擊下一步確認信息
c. 在 DLF 控制臺“入戶任務管理” 界面中,找到剛創建的入湖任務列表,點擊“運行”啟動入湖作業;該數據入湖任務,屬于全量+增量入湖,大約3至5分鐘后,全量數據會完成導入,隨后自動進入實時監聽狀態。如果有數據更新,則會自動更新至 Delta Lake 或 Hudi 數據格式中。
第三步:MaxCompute中查詢數據
開通 DataWorks 與 MaxCompute (快速啟動請參考 文檔),并進入 DataWorks 臨時查詢界面(請參考文檔)
- 創建 MaxCompute 外部 Project 映射 DLF 元數據:
- 查詢數據:
第四部:RDS中新增數據
INSERT INTO `anti_fraud_result` values ("12489575","82005","123123",3.14592040,101.12315432); INSERT INTO `anti_fraud_result` values ("12489576","82005","123123",3.14592040,101.12315432); INSERT INTO `anti_fraud_result` values ("12489577","82005","123123",3.14592040,101.12315432); INSERT INTO `anti_fraud_result` values ("12489578","82005","123123",3.14592040,101.12315432); INSERT INTO `anti_fraud_result` values ("12489579","82005","123123",3.14592040,101.12315432);MaxCompute中校驗數據
set odps.sql.hive.compatible=true; set odps.sql.split.hive.bridge=true; select * from ext_dlf_delta.sh_rds;在1分鐘之內,在 MaxCompute 中查看數據已更新:
原文鏈接:https://developer.aliyun.com/article/792312?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的基于Delta lake、Hudi格式的湖仓一体方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云原生架构下日志服务数据预处理
- 下一篇: 双11特刊 | 全面云原生化,数据库实例