從早期 Lambda 架構的資料複製與不一致性問題,到 Medallion 架構的多層次資料處理模式,Lakehouse 架構的演進解決了許多資料管理挑戰。Medallion 架構透過 Bronze、Silver 和 Gold 三層結構,實作了資料的逐步精煉和最佳化,提升了資料品質和可用性。Databricks Lakehouse 平臺則結合了 Delta Lake、Photon 引擎和 Unity Catalog 等技術,進一步提升了資料處理效能和資料治理能力。Delta Lake 提供了 ACID 事務處理和高效能資料儲存,Photon 引擎最佳化了資料處理速度,而 Unity Catalog 則實作了集中式的資料目錄管理。這些技術的整合簡化了資料架構,並支援批次和串流資料的統一處理,讓資料團隊能更有效率地進行資料分析和應用。
資料湖倉(Lakehouse)架構的演進與挑戰
資料串流的興起與Lambda架構的侷限性
在2010年代初期,資料串流開始在資料產業中扮演重要角色。許多企業需要同時支援批次ETL處理和僅追加的資料串流。然而,具有多個平行ETL流程的資料架構經常遇到寫入衝突失敗,導致資料損壞甚至資料遺失。為瞭解決這些問題,早期的資料架構通常採用雙管齊下的Lambda架構,以在批次和串流程之間提供隔離層。
Lambda架構的運作機制
Lambda架構透過分離批次處理層和串流處理層來運作。批次處理層負責處理大量的歷史資料,而串流處理層則專注於近乎即時的新資料變更。這種架構使得下游流程(如BI報表或機器學習模型訓練)可以在資料快照上執行計算,同時串流程可以隔離地應用近乎即時的資料變更。
Lambda架構的挑戰
然而,Lambda架構存在多個挑戰:
- 資料複製與不一致性:Lambda架構需要複製資料以支援平行批次和串流工作負載,導致資料變更的不一致性。
- 複雜的資料協調:需要在每個營業日結束時協調批次和串流資料變更,增加了操作的複雜性。
- 維護困難:維護兩個獨立的處理層(批次和串流)需要不同的技能和資源,增加了系統的維護成本。
引入獎章(Medallion)架構
為了克服Lambda架構的侷限性,業界引入了獎章(Medallion)架構。該架構旨在簡化資料處理流程,提供高效的資料管理,並滿足現代ETL處理的高需求。
Medallion架構的核心概念
Medallion架構透過將資料處理流程劃分為多個層次來運作,每個層次代表資料的不同處理階段:
- Bronze層:原始資料層,儲存從各種來源收集的原始資料。
- Silver層:清理和轉換後的資料層,對Bronze層的資料進行清理、轉換和最佳化。
- Gold層:高度匯總和最佳化的資料層,為特定的業務需求提供高效的查詢效能。
Medallion架構的優勢
- 簡化資料處理:透過分層處理資料,簡化了資料處理流程,提高了資料品質。
- 高效的資料管理:提供了良好的資料稽核和強大的資料隔離能力,確保資料的安全性和可靠性。
- 可擴充套件性:能夠擴充套件以處理每天TB甚至PB級的資料,滿足大規模資料處理的需求。
實作Medallion架構的技術
在Databricks Lakehouse平臺上,可以使用Delta Live Tables(DLT)來實作Medallion架構。DLT提供了一種簡單而強大的方式來構建和管理資料管道,支援串流和批次資料處理。
-- 建立Bronze層表格
CREATE STREAMING TABLE raw_data_bronze
AS SELECT * FROM read_files(
'path/to/input/data',
format => 'json'
);
-- 建立Silver層表格
CREATE STREAMING TABLE clean_data_silver
AS SELECT
data._id as id,
data.name as name,
data.value as value
FROM raw_data_bronze;
-- 建立Gold層表格
CREATE STREAMING TABLE aggregated_data_gold
AS SELECT
id,
AVG(value) as average_value
FROM clean_data_silver
GROUP BY id;
內容解密:
上述SQL程式碼展示瞭如何使用Delta Live Tables(DLT)建立Medallion架構中的不同層次。
- Bronze層:
raw_data_bronze表格儲存原始資料。 - Silver層:
clean_data_silver表格對Bronze層的資料進行清理和轉換。 - Gold層:
aggregated_data_gold表格對Silver層的資料進行匯總,提供高效的查詢效能。
Lakehouse獎章架構的設計理念與實踐
Lakehouse架構中的獎章模式是一種常見的資料處理設計模式,主要透過一系列的資料跳躍(Data Hops)來實施業務級的資料轉換,以此來提高資料的物理隔離性和資料品質。這種模式在Lakehouse的資料組織設計中佔有重要地位,為資料的處理和管理提供了一種結構化的解決方案。
獎章架構的三層結構解析
獎章架構通常包含三個主要資料層:銅層(Bronze Layer)、銀層(Silver Layer)和金層(Gold Layer)。每一層都有其特定的功能和作用,共同構成了Lakehouse資料組織的核心。
銅層:原始資料的著陸區
銅層是資料進入Lakehouse的第一站,主要用於儲存原始的、未經處理的資料。這些資料通常直接來自於資料來源,沒有經過任何的清理或轉換。這一層的主要功能是提供一個暫存區域,讓資料可以在後續的處理流程中被進一步加工。
銀層:資料的清理與增強
銀層儲存的是經過過濾、清理和增強的資料。這些資料已經具有了定義好的結構,並且實施了嚴格的Schema驗證。銀層的資料是經過初步處理的,具有更高的品質和可用性,為後續的資料分析和處理提供了基礎。
金層:業務級別的資料聚合
金層是資料處理的最後一環,主要提供精煉的、業務級別的資料聚合。這些資料已經被充分處理和整合,可以直接被下游的BI(商業智慧)和ML(機器學習)系統使用。金層的資料是高度最佳化的,能夠支援複雜的分析和決策需求。
圖表翻譯:
此圖示展示了資料在Lakehouse獎章架構中的流轉過程。資料首先進入銅層,接著經過處理後進入銀層,再進一步被精煉成金層,最後被下游的BI和ML系統使用。這個流程清晰地展示了資料從原始狀態到可用狀態的轉變過程,以及各個層級之間的資料流動關係。
Databricks Lakehouse的核心優勢
Databricks Lakehouse結合了高效能的Photon Engine處理引擎和Apache Spark的增強功能,為資料處理和分析提供了強大的支援。透過使用開放資料格式進行資料儲存,Databricks Lakehouse能夠支援多種資料型別,包括結構化、半結構化和非結構化資料。這種架構設計使得資料處理變得更加靈活和高效。
統一批次和串流處理
Databricks Lakehouse的一個重要特點是能夠統一批次和串流處理工作負載。透過使用單一的API(Spark DataFrame API),資料團隊可以簡化資料架構,避免了傳統上批次和串流處理之間的複雜性和差異性。
資料治理和安全
Databricks Lakehouse在設計時充分考慮了資料治理和資料安全的需求。組織可以集中定義資料存取模式,並在整個業務中一致地應用這些模式,從而確保資料的安全性和合規性。
Databricks Lakehouse的核心功能詳解
Databricks Lakehouse的成功依賴於三個主要功能:Delta Lake格式、Photon引擎和Unity目錄(Unity Catalog)。這些功能共同構成了Databricks Lakehouse的核心能力。
Delta Lake格式
Delta Lake是一種高效的資料儲存格式,能夠支援批次和串流資料操作。透過使用Delta Lake,資料團隊可以實作資料的ACID事務處理,並且能夠高效地管理和查詢大量資料。
# 使用Delta Lake格式儲存資料的範例
from delta.tables import *
# 建立Delta Lake表格
delta_table = DeltaTable.forPath(spark, "/data/delta_table")
# 查詢Delta Lake表格資料
delta_table.toDF().show()
內容解密:
此程式碼範例展示瞭如何使用Delta Lake格式儲存和查詢資料。首先,我們匯入了必要的Delta Lake模組,然後建立了一個Delta Lake表格。接著,我們使用toDF()方法將Delta Lake表格轉換為DataFrame,並顯示其內容。這個範例體現了Delta Lake在資料儲存和查詢方面的便捷性和高效性。
Photon引擎
Photon引擎是Databricks Lakehouse中的高效能處理引擎,能夠提供卓越的效能和可擴充套件性。Photon引擎的最佳化使得資料處理和分析變得更加快速和高效。
Unity目錄(Unity Catalog)
Unity目錄是Databricks Lakehouse中的資料治理工具,能夠提供集中式的資料目錄管理功能。透過Unity目錄,組織可以更好地管理和控制資料的存取和使用。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Lakehouse架構演進與Databricks實踐
package "AWS 雲端架構" {
package "網路層" {
component [VPC] as vpc
component [Subnet] as subnet
component [Security Group] as sg
component [Route Table] as rt
}
package "運算層" {
component [EC2] as ec2
component [Lambda] as lambda
component [ECS/EKS] as container
}
package "儲存層" {
database [RDS] as rds
database [DynamoDB] as dynamo
storage [S3] as s3
}
package "服務層" {
component [API Gateway] as apigw
component [ALB/NLB] as lb
queue [SQS] as sqs
}
}
apigw --> lambda
apigw --> lb
lb --> ec2
lb --> container
lambda --> dynamo
lambda --> s3
ec2 --> rds
container --> rds
vpc --> subnet
subnet --> sg
sg --> rt
@enduml
圖表翻譯:
此圖示展示了Databricks Lakehouse中資料處理和管理的流程。資料首先被儲存在Delta Lake中,接著由Photon引擎進行處理,最後由Unity目錄進行管理。這個流程體現了Databricks Lakehouse在資料處理、治理和查詢方面的綜合能力。
總而言之,Lakehouse獎章架構和Databricks Lakehouse為現代資料管理和分析提供了強大的解決方案。透過結合高效能的處理引擎、開放資料格式和集中式的資料治理,組織可以更好地管理和利用其資料資產,以支援業務決策和創新。