Column
Dec 23, 2021 04:55 PM
Column 1
Description
Apache Airflow 是一個由 Airbnb 開源的工作流程管理平台,普遍被使用於 ETL (extract, transform, load ) 或 data cleaning 等數據處理 pipeline
Field
Data engineer
Status
Done

簡介
What's Airflow
Apache Airflow 是一個由 Airbnb 開源的工作流程管理平台,普遍被使用於 ETL (extract, transform, load ) 或 data cleaning 等數據處理 pipeline

組成
在 Airflow 每個工作流程被定義為一個 有向無循環圖 Directed Acyclic Graph(以下簡稱為 DAG),每個 DAG 包含了各種工作的集合,而 DAG 定義了工作和工作之間的關係、執行順序等

優點 (相對於其他排程器)
- Backfilling:可針對特定區間做資料回補
- 模組化:Task 可以被重複使用,也可以組合成不同的工作流程
- 支援單個任務重跑:一個工作流程會包含很多不同的任務,有些流程如果失敗了不需要整個重啟,只需執行特定任務即可,測試起來也較為方便
- Web UI:直觀的UI可以操作、監控執行狀態和 logs 等資訊
架構
接下來可以看一下 Airflow 的架構圖,主要分成四個部分 WebServer, Scheduler, Executor 以及 Worker,我們分別來看看這四個 Components。

接下來可以看一下 Airflow 的架構圖,主要分成四個部分 WebServer, Scheduler, Executor 以及 Worker,我們分別來看看這四個 Components。
WebServer
WebServer 顧名思義,就是提供網頁功能的伺服器,WebServer 是可以單獨運作的,所以可以被分開部署,但如果只有 WebServer 而沒有下面三個 Components,也就只能查看 DAG、Task 及 Connections 等一些資訊而已。
Scheduler
Scheduler 負責排程,這裡的排程並不是直接指定哪個 Task 給哪個 Worker 運行,而是從 Metadata Database 中找尋 DAG 跟 Task 的狀態,並判斷是否將哪些 Task 傳送給 Executor 安排執行。
Executor
Executor 是一個 Queue Process,從 Scheduler 接收要執行的 Task,並將這些資訊存進 Queue,並從 Queue 中取出 Task 安排給閒置的 Worker 執行。
Worker
Worker 負責實際執行Task。
配合 Task 狀態來看
- No status: 當我們手動 Trigger DAG 或是 Scheduler 排程 DAG 後,這時 DAG 的 Task 會先被創造成 Task Instance 並寫進 Database ,這時 Task 的狀態就是 no status。
- Scheduled: 當 Scheduler 確認某個 Task 需要被執行時,這時 Task 的狀態就會變成 Scheduled,像是當我們使用
BranchPythonOperator,執行結束後,Scheduler 會就依照執行的結果決定下一個 Task,這時那個 Task 的狀態就會是 Scheduled。
- Queued: 當 Scheduler 把確定要執行的 Task 發送給 Executor 時,相當於把 Task 放入 Queue 裡,所以 Task 的狀態會變成 Queued。
- Running: 當 Executor 把 Task 發送給閒置的 Worker 時,Task 的狀態就會變成 Running。
- Success/ Failed: 最後依據 Workere 執行的結果,Executor 會把 Task 標示成 Success 或是 Failed。
