討論 Airflow 前,先問問大家有聽過 Workflow 嗎?可以翻作工作流,在資料領域,也可以稱作 Dataflow (資料流),通常就是一連串的 Data Engineering (資料工程)的行為相互連接。
什麼? Data Engineering 是什麼?好多名詞ㄚㄚㄚㄚ?
其實這些通通都忘記也沒關係,就像是大學修課都會有「xxxx導論/概論」,都只是一些背景知識,忘記也可以,以後一邊實作就會慢慢想起來了。
好的,切回正題,Data Engineering 就是任何與數據有關的行為,可能是收集數據、設計數據架構、儲存數據、分析數據等等,不限任何工具,所以就算一行程式也沒寫,用手寫統計、計算機加總、Excel整理,這些都可以稱作 Data Engineering (資料工程),常常聽到的 ETL ,extract 擷取資料、transform 轉換資料、load 載入資料,都是 Data Engineering 其中一部份。那 Workflow 勒,Workflow 工作流就是把剛剛提到的各種和資料處理的行為串在一起。
讓資料~流動起來~
Airflow 就是一個可以用程式創建 Workflow 的開源 (open-source) 平台工具,可以創建、排程、監控多個不同的 Workflow,並在 Airflow 的網頁工具 (Web UI) 查看,方便處理複雜的工作流程,除此之外,Airflow 還有以下優點:
Ref: airflow 官方文件
像是這個 Airflow 官網的範例,我們可以設定各項任務之間的順序,先執行 run_this_first
再執行 branching
,接著排程分開完成 branch_a
和 branch_b
,最後 branch_a
再結合 branching
的資料,一起執行 join
的任務,每個任務之間的相依性都可以自己設定。
全名是 Directed Acyclic Graph,中文翻作有向無環圖,白話文就是有方向(Directed)不會有循環(Acyclic)的圖,簡稱為 DAG,就像上方的圖一樣,用途是決定每個任務節點之間的順序和關係,並設計工作流程如何運作。
DAG 每次執行都會實例化(Instantiate)出一個 DAG run,其中包含 DAG 的基礎設定,例如遇到錯誤要重試幾次,每次間距要多久等等
每個 DAG 裡面都有無數個 Tasks(工作任務),每個任務可以想成是完成一件事,就像是上面圖的當中的run_this_first
、branching
的節點,對應到 Python 的程式就是一個個的 Function。
在 airflow 當中,Operators 又是更小的單位,一個 Tasks 當中可能有多個 Operators,Operators 通常會負責很特定的任務,所有的 Operators 都是繼承 BashOperator 所設計出來的類別,舉例一些特定的工作就很好理解了:
通常 Operator 可以分成三種主要類型:
其實還有 Hooks 和 Relationship 要談,另外 Scheduler、Webserver、Executor 也都還沒講,所以只能默默將食用攻略再多一天了,看來只能等到後天才能做出第一個 DAG 了。