基於Delta lake、Hudi格式的湖倉一體方案
簡介:Delta Lake 和 Hudi 是流行的開放格式的儲存層,為資料湖同時提供流式和批處理的操作,這允許我們在資料湖上直接執行 BI 等應用,讓資料分析師可以即時查詢新的實時資料,從而對您的業務產生即時的洞察。MaxCompute 在湖倉一體架構中,通過支援 Delta Lake 和 Hudi 在資料湖中提供資料倉庫效能。
本文作者 孟碩 阿里雲智慧 產品專家
直播視訊請點選
一、最佳實踐背景
整個最佳實踐是基於
湖倉一體架構:異構資料平臺融合
因為企業內部會有很多業務線,不同的部門,因為本身業務的需求及員工的技術棧幾個方面的原因,導致採用的資料架構不一樣,資料平臺也不一樣。技術架構有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控制檯介面:
- 在 OSS 中新建 Bucket 和目錄,如 bucket: rtcompute,目錄:oss://rtcompute/csvfile/
- 在 DLF 控制檯介面點選左側選單“元資料管理”->“元資料庫”,點選“新建元資料庫”。填寫名稱 covid-19,新建目錄並選擇。
- 建立入湖任務:
a. DLF 控制檯中點選選單“資料入湖”->“入戶任務管理”,點選“新建入湖任務” -> 選擇“關係資料庫實時入湖”,按照下圖的資訊填寫資料來源、目標資料湖、任務配置等資訊。並儲存。
b. 下一步輸入任務例項名稱,RAM角色以及最大資源使用量,點選下一步確認資訊
c. 在 DLF 控制檯“入戶任務管理” 介面中,找到剛建立的入湖任務列表,點選“執行”啟動入湖作業;該資料入湖任務,屬於全量+增量入湖,大約3至5分鐘後,全量資料會完成匯入,隨後自動進入實時監聽狀態。如果有資料更新,則會自動更新至 Delta Lake 或 Hudi 資料格式中。
第三步:MaxCompute中查詢資料
開通 DataWorks 與 MaxCompute (快速啟動請參考
- 建立 MaxCompute 外部 Project 對映 DLF 元資料:
create externalproject -source dlf -name ext_dlf_delta -ref ms_proj1 -comment "DLF" -region "cn-shanghai" -db covid_19 -endpoint "dlf-share.cn-shanghai.aliyuncs.com" -ossEndpoint "oss-cn-shanghai-internal.aliyuncs.com"; -- 顯示對映表資訊 show tables in ext_dlf_delta;
- 查詢資料:
set odps.sql.hive.compatible=true; set odps.sql.split.hive.bridge=true; select * from ext_dlf_delta.sh_rds;
第四部: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;
原文連結
本文為阿里雲原創內容,未經允許不得轉載。