1. 程式人生 > 其它 >基於Delta lake、Hudi格式的湖倉一體方案

基於Delta lake、Hudi格式的湖倉一體方案

簡介:Delta Lake 和 Hudi 是流行的開放格式的儲存層,為資料湖同時提供流式和批處理的操作,這允許我們在資料湖上直接執行 BI 等應用,讓資料分析師可以即時查詢新的實時資料,從而對您的業務產生即時的洞察。MaxCompute 在湖倉一體架構中,通過支援 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資料入湖

填寫 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 元資料:
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;

在1分鐘之內,在 MaxCompute 中檢視資料已更新:

原文連結
本文為阿里雲原創內容,未經允許不得轉載。