二、Apache Airflow 基本介紹

Airflow 的基礎名詞:DAG、Tasks、Operators、Hooks、Relationship。Airflow 的四大組成元件(components):Webserver、Scheduler、Executor、Metadata database

二、Apache Airflow 基本介紹
Photo by Helio Dilolwa / Unsplash
這系列的文章源自我 2023/9/16-2023/10/15  參加的 iT 鐵人賽:
2023 鐵人賽系列文章:Airflow 是什麼? 能吃嗎 ? 數據水管工的超級蘑菇

Airflow 的基礎名詞

DAG:有向無環圖

全名是 Directed Acyclic Graph,中文翻作有向無環圖,白話文就是有方向(Directed)不會有循環(Acyclic)的圖,簡稱為 DAG,就像上方的圖一樣,用途是決定每個任務節點之間的順序和關係,並設計工作流程如何運作。

DAG 每次執行都會實例化(Instantiate)出一個 DAG run,其中包含 DAG 的基礎設定,例如遇到錯誤要重試幾次,每次間距要多久等等

Tasks:工作任務

每個 DAG 裡面都有無數個 Tasks(工作任務),每個任務可以想成是完成一件事,就像是上面圖的當中的run_this_firstbranching的節點,對應到 Python 的程式就是一個個的 Function。

Operators:操作員 / 操作符

在 airflow 當中,Operators 又是更小的單位,一個 Tasks 當中可能有多個 Operators,Operators 通常會負責很特定的任務,所有的 Operators 都是繼承 BashOperator 所設計出來的類別,舉例一些特定的工作就很好理解了:

  • BashOperator: 執行 bash 指令
  • PythonOperator:呼叫 Python 的函數
  • EmailOperator:傳送 Email 的通知
  • MySqlOperator:操作與連接 MySQL
  • BigQueryOperator:執行 BigQuery 的 SQL 指令

通常 Operator 可以分成三種主要類型:

  1. 運行直到滿足特定條件
  2. 使用不同軟體或系統的功能
  3. 傳遞資料

Hooks:鉤子/ 接口

Hooks 可以和第三方系統互動,第三方系統是什麼?就是非官方和運營方開發的系統,例如我們要把 Airflow 和 MySQL 溝通,就必須要用到 Hooks 幫助我們傳遞資料進到 Airflow,最後出去也需要 Hooks 才能送出。

和平常我們常常聽到的 webhook 不太一樣, webhook 比較像監聽的機制,如果xx事情發生記得通知我,像是「按讚、訂閱、開啟小鈴鐺」的小鈴鐺,就是youtuber發片的時候可以收到通知,如果對於 webhook 還是有點模糊,推薦看這篇文章 卡米狗:認識 Webhook

Relationship:節點關係

在任務之間,我們可以定義前後順序和相互關係,甚至將多個任務包再一起成為 task_group,定義上有多種不同方式,像這樣:

task1 >> task2 >> task3
task3(task2(task1))
task1.set_downstream(task2)
task3.set_upstream(task2)
  • 這三種都是代表先做 task1,接著 task2,再來 task3

task_group 會像這樣

[task1 ,task2] >> task3
  • 代表要先做完 task1、task2,接著才會做 task3
  • 而且 task1、task2 的執行是同時發生的
  • task_group 當中也可能會有更複雜有順序相依性的行為

Airflow 的四大組成元件(components)

Webserver:網頁伺服器 / 使用者介面

Airflow 的使用者介面,就是我們前幾天安裝完開啟的網頁 (http://localhost:8080) ,可以在上面讀取各項紀錄檔。

Scheduler:排程調度器

監控所有 DAGs 和相關的任務,調度目前該哪一個 task 執行,接下來又換哪一個。

Executor:執行器

專注在執行任務,有多種不同類型,例如:LocalExecutor、CeleryExecutor 和 KubernetsExecutor。

之後有機會再詳細介紹,這部分我也只熟悉 Local 和 Celery。

Metadata database:描述檔資料庫

Metadata before Metadata database

我們先來認識 metadata,這個詞也會常常看到,通常翻作「詮釋資料」或「後設資料」,意思就是「描述xx資料」的「資料」,好繞口,就像是一本書的序,就是描述文字的文字,這樣有類比到嗎(臨時想的XD),反正通常網頁的 header 裡面有 meta tag,就是描述網頁的 summary,專門給搜尋引擎(google)看的,這樣就可以加快搜尋引擎認識你的網站,所以你看到各種 dataset (資料集),常常會看到 metadata,就是在介紹這個資料集的資料。

所以這裡的 Metadata database 是什麼,就是當你在運行 Airflow 時,Airflow 當中的預設值,和你接下來的所有行為都會被記錄在個資料庫,所以他並不是你實際在處理的資料庫,而是紀錄你是如何處理資料的資料庫,哈哈,也是好繞口,在這裡會儲存所有元件的互動方式和目前的狀態,每次開始運行 Airflow,也是從這邊讀取過去的運行資料出去。

其他類似 Airflow 的工具