返回文章列表

精通 Azure 資料管道編排與 Spark 性能調優

本文深入探討現代資料工程的兩大核心環節:資料管道編排與大規模處理效能調優。首先,文章詳解如何利用 Azure Data Factory 及其視覺化工具,建構穩健的雲端原生資料整合流程,剖析其管道、資料流等關鍵組件。接著,將焦點轉向 Apache Spark 的性能調優,說明如何透過 Spark UI 深入分析應用程式的執行細節,從而診斷效能瓶頸、優化資源配置,並解決資料傾斜等常見問題,旨在提供一套完整的資料處理與優化方法論。

資料工程 雲端運算

在當代雲端優先的商業環境中,資料工程已從單純的數據搬運演化為複雜的價值創造流程。企業不僅需要建立穩定可靠的資料管道來整合來自各方的資訊,更面臨著資料量與處理複雜度急遽增長所帶來的效能挑戰。這要求資料工程實踐必須具備雙重維度:其一是結構化的流程編排,透過 Azure Data Factory 等平台,將繁雜的 ETL/ELT 任務轉化為可視化、可管理且具備高可用性的工作流。其二是精細化的效能調校,當資料進入 Apache Spark 這類大規模處理框架時,利用 Spark UI 等工具深入剖析執行瓶頸,對計算資源、資料分區與傾斜等問題進行優化,便成為確保系統成本效益與反應速度的關鍵。本文將循序探討這兩大技術領域,建構一套從宏觀編排到微觀優化的完整知識體系。

第十章:資料管道編排

利用Azure Data Factory

資料管道編排

218

ADF提供了多種功能,旨在處理雲端優先世界資料整合的巨大需求。對這些組件的透徹理解對於充分利用ADF至關重要。讓玄貓在以下部分討論它們。

ADF的主要組件

資料集與資料流

資料集資料流ADF基本構建模塊,用於構建管道編排。以下是它們的高層次概述

  • 資料集(Datasets):將資料集視為對玄貓實際資料的符號引用指針。它們不包含資料,而是充當玄貓資料來源目的地的橋樑。ADF支援多種資料集,包括Azure Blob StorageAzure SQL Data Warehouse本地SQL Server等等,其中列舉了幾個:
  • 參數化資料集:這些資料集允許動態內容連結,這意味著玄貓可以傳遞參數以在運行時確定特定的資料集
  • 架構映射ADF可以自動將架構來源映射到目的地,減少手動配置。
  • 資料流(Dataflows)資料集指向資料,而資料流定義了資料應如何轉換。它是一個視覺化設計ETL提取、轉換、載入)或ELT提取、載入、轉換)過程。在一個資料流中,玄貓有以下內容:
  • 轉換:這些可以是列級別的(例如串聯轉換)或行級別的(例如過濾排序)。
  • 調試和測試:玄貓可以在任何轉換步驟預覽資料,確保所需的更改生效。
連結服務

連結服務封裝了ADF訪問外部資源所需的連接資訊。實質上,它是訪問玄貓資料的「如何」。要了解更多資訊,請參閱以下列表:

  • 安全整合連結服務支援整合運行時,確保玄貓的資料保留在指定區域內,甚至在玄貓的本地環境中。
  • 多個資料儲存ADF支援大量的連結服務,例如關聯式非關聯式大數據等等。

利用Azure Data Factory

219

管道

管道活動的邏輯分組,它們共同執行一個任務。它是ADF核心和靈魂。讓玄貓看看管道的組件:

  • 活動(Activities):這些是管道中的處理步驟。它們可以是資料移動活動資料轉換活動。例如,玄貓可以從本地SQL Server複製資料(資料移動),然後在Azure HDInsight上運行Hive腳本來處理它(資料轉換)。
  • 控制流(Control flow)管道可以有序列條件循環等等。這提供了對活動編排細粒度控制
  • 併發和節流(Concurrency and throttling)管道允許玄貓管理可以同時運行的活動數量,確保最佳性能成本管理
觸發器

管道定義了什麼如何,而觸發器定義了何時。以下是ADF中可用的觸發器類型

  • 排程觸發器(Schedule triggers):按時鐘排程執行管道,例如每日每週
  • 基於事件的觸發器(Event-based triggers):響應一個事件,例如在Azure Blob Storage中創建或刪除檔案時。
  • 滾動視窗觸發器(Tumbling window triggers):這些對於處理大型資料集特別有用。它們允許在指定時間視窗內重複執行管道
整合運行時(IRs)

IRs決定了資料移動計算位置。它們提供了公共網路空間私人網路空間之間的橋樑。以下列出了一些可用選項:

  • Azure IR:用於公共全球可用資料移動
  • 自託管IR:用於私人本地資料,甚至Azure中的私人網路。它實現了混合場景
  • Azure-SSIS IR:這允許玄貓在ADF原生執行SQL Server Integration Services (SSIS) 套件,確保從SSIS遷移的業務的連續性

此圖示:Azure Data Factory 核心組件與功能

@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_

skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 16
skinparam minClassWidth 100

actor "資料工程師" as DataEngineer

package "Azure Data Factory (ADF)" as ADF {
rectangle "資料集 (Datasets)" as Datasets
rectangle "資料流 (Dataflows)" as Dataflows
rectangle "連結服務 (Linked Services)" as LinkedServices
rectangle "管道 (Pipelines)" as Pipelines
rectangle "觸發器 (Triggers)" as Triggers
rectangle "整合運行時 (IRs)" as IRs
}

package "資料集細節" as DatasetDetails {
rectangle "符號引用" as SymbolicRef
rectangle "參數化" as Parameterized
rectangle "架構映射" as SchemaMapping
}

package "資料流細節" as DataflowDetails {
rectangle "視覺化 ETL/ELT" as VisualETL
rectangle "轉換 (Transformations)" as Transformations
rectangle "調試與測試" as DebuggingTesting
}

package "連結服務細節" as LinkedServiceDetails {
rectangle "連接資訊" as ConnectionInfo
rectangle "安全整合" as SecureIntegration
rectangle "多資料儲存" as MultiDataStores
}

package "管道細節" as PipelineDetails {
rectangle "活動 (Activities)" as Activities
rectangle "控制流 (Control Flow)" as ControlFlow
rectangle "併發與節流" as ConcurrencyThrottling
}

package "觸發器細節" as TriggerDetails {
rectangle "排程觸發器" as ScheduleTriggers
rectangle "事件觸發器" as EventTriggers
rectangle "滾動視窗觸發器" as TumblingWindowTriggers
}

package "IRs 細節" as IRsDetails {
rectangle "Azure IR" as AzureIR
rectangle "自託管 IR" as SelfHostedIR
rectangle "Azure-SSIS IR" as AzureSSISIR
}

DataEngineer --> ADF : 使用 ADF 進行資料整合與編排

ADF --> Datasets : 管理資料的符號引用
ADF --> Dataflows : 定義資料轉換邏輯
ADF --> LinkedServices : 建立外部資源連接
ADF --> Pipelines : 編排任務序列
ADF --> Triggers : 定義管道執行時機
ADF --> IRs : 決定資料移動與計算位置

Datasets --> DatasetDetails : 進一步細節
Dataflows --> DataflowDetails : 進一步細節
LinkedServices --> LinkedServiceDetails : 進一步細節
Pipelines --> PipelineDetails : 進一步細節
Triggers --> TriggerDetails : 進一步細節
IRs --> IRsDetails : 進一步細節

SymbolicRef --> Parameterized : 資料集可參數化
SymbolicRef --> SchemaMapping : 支持架構自動映射

VisualETL --> Transformations : 資料流包含各種轉換
VisualETL --> DebuggingTesting : 提供調試與測試功能

ConnectionInfo --> SecureIntegration : 連結服務確保安全連接
ConnectionInfo --> MultiDataStores : 支持多種資料儲存類型

Activities --> ControlFlow : 管道活動由控制流管理
Activities --> ConcurrencyThrottling : 管道管理併發與節流

ScheduleTriggers --> EventTriggers : 觸發器類型多樣
EventTriggers --> TumblingWindowTriggers : 滿足不同排程需求

AzureIR --> SelfHostedIR : IRs 提供不同部署場景
SelfHostedIR --> AzureSSISIR : 支持混合雲與 SSIS 遷移

note right of ADF
- 雲端資料整合服務
- 視覺化工具,無程式碼理念
end note

note right of Datasets
- 資料的邏輯表示,非實際儲存
- 橋接資料來源與目的地
end note

note right of Dataflows
- 視覺化 ETL/ELT 流程設計器
- 包含資料轉換邏輯
end note

note right of Pipelines
- 任務的邏輯分組與序列
- ADF 的核心編排單元
end note

note right of IRs
- 決定資料處理的執行環境
- 連接公共與私人網路空間
end note

@enduml

看圖說話:

此圖示全面展示了Azure Data Factory (ADF)的核心組件及其相互關係,揭示了其作為雲端資料整合服務的強大功能。整個架構圍繞著資料工程師如何利用ADF來構建、部署和管理資料轉換流程

首先,ADF的六大核心組件構成了其運作的基石:

  1. 資料集(Datasets):它們是資料的符號引用,而非實際儲存資料,充當資料來源與目的地之間的橋樑。資料集可以參數化以實現動態連結,並支援架構自動映射
  2. 資料流(Dataflows):這是一個視覺化設計ETLELT過程,定義了資料應如何轉換。它包含各種轉換操作,並提供調試與測試功能。
  3. 連結服務(Linked Services):它們封裝了ADF訪問外部資源所需的連接資訊,確保安全整合並支援多種資料儲存類型
  4. 管道(Pipelines):這是ADF核心編排單元,將一系列活動邏輯分組以共同執行任務。管道具備控制流能力(如序列、條件、循環),並管理併發與節流
  5. 觸發器(Triggers):它們定義了管道何時執行,包括排程觸發器(定時執行)、事件觸發器(響應事件)和滾動視窗觸發器(處理大型資料集)。
  6. 整合運行時(IRs):它們決定了資料移動和計算的位置,充當公共與私人網路空間之間的橋樑。IRs包括Azure IR(用於公共雲端)、自託管IR(用於本地或私人網路)和Azure-SSIS IR(用於SSIS套件的原生執行)。

資料工程師透過這些組件,可以利用ADF視覺化工具和「無程式碼」理念,高效地實現從資料提取、轉換到載入的整個資料整合與編排過程,無論是處理本地資料還是雲端資料,都能提供靈活且強大的解決方案。

第十章:資料管道編排

利用Azure Data Factory

在本節中,玄貓研究了ADF,它在Azure雲端上運行資料工程工作負載的組織中非常受歡迎。

資料管道編排

220

第十一章:性能調優

大數據處理的世界中,Apache Spark已成為一個強大且多功能的框架。它處理大規模資料處理任務的能力,加上其速度易用性,使其成為資料工程師分析師的最愛。然而,隨著資料量的增長和處理需求變得更加複雜,確保最佳性能變得至關重要。Spark使用者介面(UI)在此方面發揮著關鍵作用,提供了可以指導性能調優工作的見解和指標。玄貓將深入探討Spark UI的複雜性,並探索如何利用它來微調玄貓的Spark應用程式的性能。

玄貓將涵蓋以下主題:

  • 介紹Spark UI
  • 利用Spark UI進行性能調優
  • 計算資源合理配置
  • 理解資料傾斜索引分區

介紹Spark UI

從本質上講,Spark UI是一個基於網頁的介面,它提供了玄貓Spark應用程式內部工作原理的全面視圖。它提供了有關玄貓應用程式執行各個方面的詳細資訊,從高層次概述單個任務和階段的具體細節Spark UI診斷瓶頸識別資源利用率更深入了解Spark作業運行時行為的寶貴工具。它也是Spark生態系統不可或缺的一部分,因為它旨在讓玄貓對Spark應用程式的執行擁有無與倫比的可見性。無論玄貓是在小型集群還是龐大的資料中心工作,Spark UI都提供了一個統一的介面監控分析優化Spark工作負載的性能。讓玄貓學習如何導航Spark UI

性能調優

222

導航Spark UI

訪問Spark UI通常很簡單。當玄貓提交Spark應用程式時,框架會自動啟動一個託管UI網頁伺服器UI可以透過http://<driver-node-ip>:4040訪問玄貓的Spark驅動程式節點。在託管Spark平台中,例如DatabricksUI可以透過集群計算頁面訪問,如圖11.1所示:

圖11.1 – Spark UI範例

隨著應用程式的進度,UI會不斷更新以反映實時資訊Spark UI網頁介面設計考慮了使用者友好性,使其對新手有經驗的使用者都易於訪問。導航UI為玄貓提供了豐富的資訊,使玄貓能夠就性能優化做出明智的決策。

讓玄貓探索Spark UI的一些關鍵組件。

作業執行概述

Jobs選項卡是理解玄貓Spark應用程式執行流程的起點。在這裡,玄貓可以找到已提交作業的摘要,每個作業都附有ID描述持續時間階段數當前狀態。點擊特定作業會打開一個詳細視圖,顯示作業的內部工作原理

此圖示:Spark UI 核心功能與性能調優流程

@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_

skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 16
skinparam minClassWidth 100

actor "資料工程師" as DataEngineer

package "Spark 應用程式執行" as SparkAppExecution {
rectangle "Spark 應用程式" as SparkApp
rectangle "Spark 驅動程式節點" as DriverNode
rectangle "Spark UI Web Server" as SparkUIServer
}

package "Spark UI 核心組件" as SparkUIComponents {
rectangle "Jobs 選項卡" as JobsTab
rectangle "Stages 選項卡" as StagesTab
rectangle "Tasks 選項卡" as TasksTab
rectangle "Storage 選項卡" as StorageTab
rectangle "Environment 選項卡" as EnvironmentTab
rectangle "Executors 選項卡" as ExecutorsTab
rectangle "SQL/Graph 選項卡" as SQLGraphTab
}

package "性能調優目標" as PerformanceGoals {
rectangle "診斷瓶頸" as DiagnoseBottlenecks
rectangle "識別資源利用率" as IdentifyResourceUtilization
rectangle "理解運行時行為" as UnderstandRuntimeBehavior
rectangle "優化成本效益" as OptimizeCostEfficiency
}

package "性能調優策略" as TuningStrategies {
rectangle "計算資源合理配置" as RightSizingCompute
rectangle "資料傾斜處理" as DataSkewHandling
rectangle "索引優化" as IndexOptimization
rectangle "分區策略" as PartitioningStrategy
}

DataEngineer --> SparkApp : 提交 Spark 應用程式
SparkApp --> DriverNode : 應用程式運行在驅動程式節點
DriverNode --> SparkUIServer : 驅動程式啟動 Spark UI Web Server

DataEngineer --> SparkUIServer : 透過瀏覽器訪問 Spark UI
SparkUIServer --> JobsTab : 顯示 Jobs 概覽
JobsTab --> StagesTab : 點擊 Job 查看 Stages
StagesTab --> TasksTab : 點擊 Stage 查看 Tasks

JobsTab --> DiagnoseBottlenecks : 從 Jobs 概覽發現問題
StagesTab --> IdentifyResourceUtilization : 從 Stages 了解資源分配
TasksTab --> UnderstandRuntimeBehavior : 從 Tasks 深入分析執行細節
ExecutorsTab --> RightSizingCompute : 監控 Executors 調整資源

SparkUIServer --> PerformanceGoals : Spark UI 幫助達成性能目標
PerformanceGoals --> TuningStrategies : 根據分析結果實施調優策略

note right of JobsTab
- 顯示所有 Spark 作業的摘要
- 包含 ID, 描述, 持續時間, 階段數, 狀態
- 是性能分析的起點
end note

note right of StagesTab
- 顯示每個階段的詳細資訊
- 包含輸入/輸出資料量, GC 時間, 任務執行時間
- 幫助識別慢速階段
end note

note right of TasksTab
- 顯示每個任務的詳細執行情況
- 包含任務狀態, 執行器 ID, 耗時, 讀寫資料量
- 用於精確定位問題任務
end note

note right of RightSizingCompute
- 根據 Spark UI 數據調整驅動程式和執行器的記憶體/核心數
- 避免資源浪費或不足
end note

note right of DataSkewHandling
- 識別資料分佈不均
- 採取措施如重新分區, 鹽值化等
end note

@enduml

看圖說話:

此圖示全面闡述了Spark UI性能調優中的核心作用及其各個組件。整個流程始於資料工程師提交一個Spark應用程式,該應用程式在驅動程式節點上運行,並自動啟動一個Spark UI Web Server資料工程師可以透過瀏覽器訪問這個UI,從而獲得對Spark應用程式內部運作機制全面可見性

Spark UI由多個關鍵選項卡組成,每個選項卡都提供了不同層次的詳細資訊:

  1. Jobs 選項卡:作為性能分析的起點,它提供了所有Spark作業的高層次概覽,包括ID描述持續時間階段數當前狀態。從這裡可以初步發現潛在問題。
  2. Stages 選項卡:點擊特定作業後,可以查看其包含的所有階段的詳細資訊,例如輸入/輸出資料量垃圾回收時間任務執行時間,有助於識別執行緩慢的階段。
  3. Tasks 選項卡:進一步深入到單個階段,可以查看每個任務的詳細執行情況,包括任務狀態執行器ID耗時讀寫資料量,這對於精確定位問題任務至關重要。
  4. Executors 選項卡:提供了執行器的資源使用情況,是進行計算資源合理配置的重要依據。
  5. StorageEnvironmentSQL/Graph等選項卡則提供了其他輔助資訊,幫助全面理解應用程式行為。

Spark UI的最終目標是幫助資料工程師達成性能調優目標,包括診斷瓶頸識別資源利用率理解運行時行為優化成本效益。基於從UI中獲取的分析結果,資料工程師可以實施各種調優策略,例如合理配置計算資源(調整驅動程式和執行器的記憶體/核心數)、處理資料傾斜(重新分區、鹽值化等)、索引優化分區策略。總之,Spark UI是一個不可或缺的工具,它將抽象的大數據處理過程具體化,賦予資料工程師深入洞察和精準控制的能力,從而實現Spark應用程式的最佳性能

深入剖析 Azure Data Factory 的核心組件後,其作為現代資料管道編排中樞的價值已清晰可見。ADF 的設計哲學,是將傳統上高度分散且依賴大量編碼的 ETL 流程,轉化為一個視覺化、模組化且高度整合的協作平台。它透過將資料的「定義」(資料集)、「轉換」(資料流)與「執行」(管道、觸發器、整合運行時)徹底解耦,不僅大幅降低了技術門檻,更重要的是賦予資料團隊前所未有的敏捷性與治理能力,從而加速了資料價值的實現週期。

展望未來,資料管道編排的趨勢將朝向更深度的自動化與智能化發展。ADF 這類平台將不僅是任務的執行者,更會演化為具備自我優化與異常預測能力的「智慧調度中心」,進一步釋放資料工程師的策略價值,使其能專注於更複雜的資料模型與業務洞察。

因此,玄貓認為,對高階管理者而言,理解並掌握 ADF 這類編排工具的策略意涵,已非單純的技術選項,而是驅動組織數位轉型與提升資料資產投資回報率的關鍵槓桿。