DLA Lakehouse即時入湖方案利用資料湖技術,重構數倉語義;分析資料湖資料,實現數倉的應用。本文以RDS MySQL資料來源為例介紹了RDS MySQL從入湖到分析的操作步驟。
背景資訊
資料湖分析(Data Lake Analytics)是⽬前炙⼿可熱的⽅向,主要是以Object Storage Service系統為核心,構建海量、低成本的結構化、半結構化、⾮結構化對象⽂件的入湖、儲存和分析業務。⽬前各⼤雲⼚商都在積極跟進,布局相關的業務能力,阿⾥雲資料湖分析團隊在這個⽅向也很早就投⼊相關產品的研發。隨著資料湖的應⽤越來越多,⼤家發現依賴資料湖最原始的能力,僅僅做簡單的儲存和分析,往往會遇到很多的問題。比較典型的痛點如下:
- 多源頭資料需要統⼀儲存管理,並需要便捷的融合分析。
- 源頭資料元資訊不確定或變化大,需要⾃動識別和管理;簡單的元資訊發現功能時效性不夠。
- 全量建倉或直連資料庫進行分析對源庫造成的壓⼒較大,需要卸載線上壓⼒規避故障。
- 建倉延遲較⻓(T+1天),需要T+10m的低延遲入湖。
- 更新頻繁致小檔案多,分析效能差,需要Upsert⾃動合并。
- 海量資料在事務庫或傳統數倉中儲存成本高,需要低成本歸檔。
- 源庫⾏儲存格式或非分析型格式,分析能力弱,需要⽀持列式儲存格式。
- ⾃建⼤資料平台營運成本高,需要產品化、雲原生、⼀體化的⽅案。
- 常見數倉的儲存不開放,需要⾃建能力、開源可控。
Lakehouse是一種更先進的範式(Paradigm)和方案,用來解決上述簡單入湖分析遇到的各種痛點問題。在Lakehouse技術中,⾮常關鍵的技術就是多版本的⽂件管理協議,它提供⼊湖和分析過程中的增量資料即時寫⼊、ACID事務和多版本、小⽂件⾃動合并最佳化、元資訊校正和⾃動進化、⾼效的列式分析格式、⾼效的索引最佳化、超⼤分區表格儲存體等能⼒。⽬前開源社區有Hudi、Delta、Iceberg等資料湖方案,阿⾥雲資料湖分析團隊選擇了比較成熟的Hudi作為DLA Lakehouse的湖倉⼀體化格式。關於Lakehouse的更多介紹,請參見Lakehouse介紹。
DLA Lakehouse核心概念和相關約束說明
- Lakehouse(湖倉)有兩重含義:
- 範式:即解決簡單⼊湖分析所遇到的痛點問題的⼀種解決⽅案。
- 儲存空間:⽤來提供⼀個從其他地⽅入湖寫⼊資料的空間,後續所有相關操作都圍繞著這個湖倉來進行。
- 不同的Lakehouse有完全不同的路徑,路徑之間不可以相互有首碼關係(防止資料覆蓋)。
- Lakehouse不能輕易進行修改。
- Workload(⼯作負載)是圍繞湖倉⼀體化而展開的核心工作的編排調度(由DLA Lakehouse統⼀調度),包括如下功能特點:
- 入湖建倉
- 為了將其他源頭的資料,匯總到整個湖倉內構建⼀個統⼀的資料平台,例如有DB類型的⼊湖建倉,也有Kafka的入湖建倉,還有OSS的資料轉換建倉。
- 不同的入湖建倉,涉及到全量、增量等多個階段,會統⼀編排並統⼀協調調度,簡化⽤戶管理成本。
- 查詢最佳化
為了提升分析能力,構建各種查詢最佳化方面的工作負載,比如自動構建索引、自動清理歷史資料、自動構建物化視圖等。
- 管理
- 成本最佳化:⾃動⽣命周期、冷熱階層式存放區等。
- 資料互連:跨域建倉等。
- 資料安全:備份恢複等能力。
- 資料品質:DQC自動校正等。
- 入湖建倉
- Job作業對於Workload的實際作業拆分和執行,以及調度到不同的計算平台上執行,對⽤戶不可見;目前DLA只⽀持調度作業到DLA Serverless Spark上執行。核心單元概念如下:
- 全量作業(從某個Workload中拆分出來)
- 增量作業(從某個Workload中拆分出來)
- Clustering:小檔案彙總
- Indexing:自動索引構建
- Compaction:自動日誌合并
- Tier:自動階層式存放區
- Lifecycle:自動生命週期管理
- MaterializedView:物化視圖
- DB(庫):DLA的庫
- Table(表):DLA的表
- Partition(分區):DLA的分區
- Column(列):DLA的列
DLA Lakehouse方案介紹
DLA Lakehouse即時入湖是分鐘級近即時的資料入湖方案,它能夠構建統一、低成本、海量資料、自動元資訊同步的湖倉平台,並支援高效能的DLA Spark計算和DLA Presto分析。DLA Lakehouse即時入湖方案的儲存與計算完全分離,寫、存、讀完全彈性,它的方案架構如下圖所示:
準備工作
您需要在DLA中進行以下操作:
- 開通雲原生資料湖分析服務
- 建立虛擬叢集說明 DLA基於Spark引擎來運行DLA Lakehouse,因此建立虛擬叢集的時候需要選擇Spark引擎。
您需要在RDS中進行以下操作:
- 快速建立RDS MySQL執行個體說明 由於DLA Lakehouse只支援專用網路,故建立RDS MySQL執行個體時,網路類型請選擇專用網路。
- 建立資料庫和帳號
- 通過DMS登入RDS資料庫
- 在SQLConsole視窗中執行SQL語句建立庫表並插入資料。
您需要在DTS中進行以下操作:
說明 目前DLA中RDS資料來源的入湖分析工作負載,會先利用RDS做資料的全量同步,然後依賴DTS資料訂閱功能做增量同步處理,最終實現完整的RDS資料入湖。
- 建立RDS MySQL資料訂閱通道說明
- 由於DLA Lakehouse只支援專用網路,故訂閱任務的網路類型請選擇專用網路。
- 由於DLA Lakehouse無法自動更新中繼資料資訊,故需要訂閱的資料類型請選擇資料更新和結構更新。
- 新增消費組
- 查看訂閱Topic和消費者ID。後續的建立RDS入湖負載的增量同步處理配置中需要使用這2個參數。
- 在訂閱任務的訂閱配置中可以查看訂閱Topic。
- 在訂閱任務的資料消費中可以查看消費者ID。
確保您的資料流在RDS中部署的地區與DTS、DLA、OSS的地區相同。
操作步驟
- 建立湖倉。
- 登入Data Lake Analytics控制台。
- 在左側導覽列單擊 。
- 在Lakehouse湖倉一體化頁面的湖倉列表頁簽,單擊建立新湖倉。
- 在建立湖倉頁面進行參數配置。參數說明如下表所示:
參數名稱 參數說明 湖倉名稱 DLA Lakehouse的名稱。 描述資訊 湖倉備忘描述,例如湖倉應用情境、應用業務限制等。 儲存類型 DLA Lakehouse資料的儲存介質,當前僅⽀持OSS類型。 儲存路徑 DLA Lakehouse資料在OSS中的儲存路徑。 說明 請謹慎規劃儲存路徑,建立後不允許修改。建議選擇一個空目錄,且不能與之前建立的湖倉目錄有互相內含項目關聯性,防止歷史資料被覆蓋。編碼 儲存資料的編碼類別型,當前僅⽀持⽬標儲存資料編碼為UTF8。 - 參數配置完成後,單擊建立。
湖倉建立成功後,湖倉列表頁簽中將展示建立成功的湖倉任務。 - 建立入湖負載。
- 在Lakehouse湖倉一體化頁面的湖倉列表中,單擊操作列的建立入湖負載。
- 在建立工作負載頁面,進行資料來源的基礎配置、全量同步配置、增量同步處理配置、產生目標資料規則配置。說明 當前僅支援RDS資料來源和PolarDB資料來源。
- 基礎配置的參數說明如下:
參數名稱 參數說明 名稱 工作負載的名稱。 選擇湖倉 工作負載將資料輸出到所選的湖倉儲存空間內。可下拉選擇已經建立的湖倉。 資料存放區格式 資料的儲存格式固定為HUDI。 源端執行個體引擎類型 資料來源的引擎類型。當前僅支援MySQL引擎。 任務執行Spark虛擬叢集 執行Spark作業的虛擬叢集。目前入湖⼯作負載在DLA Spark的虛擬叢集中運行。如果您還未建立虛擬叢集,請進行建立,具體請參見建立虛擬叢集。 說明 請確保您選擇的Spark虛擬叢集處於正常運行狀態,如果您選擇的Spark虛擬叢集處於非正常運行狀態,啟動工作負載時將失敗。 - 全量同步配置的參數說明如下:
參數名稱 參數說明 執行個體名稱 選擇需要入湖的資料來源的執行個體ID名稱。 使用者名稱 需要入湖的資料來源執行個體的訪問使用者名稱。 密碼 需要入湖的資料來源執行個體的訪問密碼。 Spark運行所需私人網路ID DLA Spark利用ENI技術配置該VPC網路來訪問資料來源。關於DLA Spark如何配置資料來源VPC網路,請參見配置資料來源網路。 Spark運行所需交換器ID DLA Spark運行所需VPC網路下的交換器ID。 Spark運行所需安全性群組 DLA Spark訪問資料來源時進行網路安全授權的安全性群組ID。您可以到RDS資料來源執行個體的資料安全性頁面中擷取安全性群組ID,如未設定安全性群組請進行添加,具體操作請參見設定安全性群組。 Spark運行所需CU數 指定執行DLA Spark作業所使用的CU數,建議多保留一些CU數,讓入湖效能更好、作業任務更穩定。 - 增量同步處理配置的參數說明如下:
參數名稱 參數說明 同步方式 增量同步處理的通道類型。當前僅⽀持DTS⽅式。 訂閱配置 增量同步處理所使用的DTS訂閱通道配置,分別選擇訂閱Topic和消費組ID。 DTS使用者名稱 增量同步處理DTS資料訂閱消費組的帳號資訊。 DTS密碼 增量同步處理DTS資料訂閱消費組帳號對應的密碼資訊。 Spark運行所需私人網路ID DLA Spark利用ENI技術配置該VPC網路來訪問資料來源。關於DLA Spark如何配置資料來源VPC網路,請參見配置資料來源網路。Spark運行所需交換器ID DLA Spark運行所需VPC網路下的交換器ID。Spark運行所需安全性群組 DLA Spark訪問資料來源時進行網路安全授權的安全性群組ID。您可以到RDS資料來源執行個體的資料安全性頁面中擷取安全性群組ID,如未設定安全性群組請進行添加,具體操作請參見設定安全性群組。Spark運行所需CU數 指定執行DLA Spark作業所使用的CU數,建議多保留一些CU數,讓入湖效能更好、作業任務更穩定。進階規則配置 - 消費位點:資料消費的時間點。當前取值固定為earliest,表示自動從最開始的時間點擷取資料。
- 每批次消費記錄條數:表示每次通過DTS拉取的資料量。
- 產生目標資料規則配置的參數說明如下:
參數名稱 參數說明 庫名首碼 產生目標庫的資料路徑和元資訊名稱時,會自動添加該首碼。為了避免海量資料和中繼資料在DLA中衝突,請確保輸入的首碼在當前阿里雲帳號下的所有工作負載內都不重複。 首碼應用範圍 設定庫名首碼的應用範圍。包括: - 資料目錄加首碼,中繼資料中庫表名加首碼
- 資料目錄不加首碼,中繼資料中庫表名加首碼
庫表過濾 設定需要同步的庫和表範圍。排除的優先順序高於包含。 目標端主鍵欄位 為指定庫表設定主鍵欄位。例如:庫表選擇輸入 db1.user_*
,主鍵欄位輸入f1,f2
,表示db1
的所有user_
首碼的表都使⽤f1,f2
兩個欄位作為組合主鍵。說明 如果不設定該參數,則系統依次嘗試選擇表中的主鍵或唯一鍵來作為目標端主鍵欄位;如果表中不存在主鍵或唯一鍵,則視為忽略同步。進階配置 目標端分區欄位:為指定庫表設定分區欄位。例如:庫表選擇輸入
db1.user_*
,分區欄位輸入gmt_create
,表示db1
的所有user_
首碼的表都使⽤gmt_create
欄位作為分區欄位。如果不設定該參數,則產生的表預設沒有分區。
- 基礎配置的參數說明如下:
- 上述參數配置完成後,單擊建立。
入湖負載建立成功後,在工作負載列表頁簽中將展示建立成功的工作負載。 - 啟動工作負載。在工作負載列表頁簽中,定位到建立成功的入湖負載,在操作列單擊啟動。工作負載任務啟動成功後,狀態將由NO STATUS(未啟動)變為RUNNING(運行中)。您還可以在操作列停止和校正工作負載任務、查看Spark日誌。具體說明如下:
操作按鈕 含義 詳情 單擊該按鈕,可以查看Spark日誌或者UI,並定位工作負載任務啟動失敗原因。 停止 單擊該按鈕,可以停止工作負載任務。 校正 單擊該按鈕,可以對啟動失敗的工作負載任務進行資料校正。 說明 校正一般使用在庫表變更、欄位格式不一致等情境下。校正過程會重新進行部分存量資料的全量同步,請謹慎填寫庫表篩選條件運算式,建議使用精確匹配運算式篩選,避免校正一些不必要的資料。如果未填寫需要校正的庫表,則校正失敗。工作負載任務啟動成功後,在湖倉列表頁簽單擊儲存路徑下的OSS路徑連結,可以跳轉到OSS控制台查看已經從RDS資料來源同步過來的庫表路徑以及表檔案。- 資料庫路徑
- 資料表路徑
- 資料表檔案
- 進行資料分析。工作負載任務啟動成功後,在頁面中,查看從RDS資料來源同步過來的中繼資料資訊。單擊操作列的查詢資料,在 頁面,查看從RDS資料來源同步過來的全量表資料。如果您在資料來源RDS中變更了未經處理資料,在頁面進行查詢時,資料會同步進行更新。