2022年,閑聊 Airflow 2.2
1airflow
Airflow[1]是一個分布式任務調度框架,可以把具有上下級依賴關系的工作流組裝成一個有向無環圖[2]; 有向無環圖長得就如下一般:圖片
說的云里霧里的,那么Airflow究竟是什么呢?簡單說,airflow就是一個平臺,你可以在這個平臺上創建、管理、執行自定義的工作流,這里的工作流就是前面所說的有向無環圖,如上圖所示一樣,有向無環圖是由一系列單獨運行的task組合而成,任務之間的前后排列取決于任務之間處理的關系或者數據的流轉的方向,而這里的工作流有一個很專業的名字叫DAG(Directed Acyclic Graph),我相信看到這里,你心中應該有些許概念了。
既然知道Airflow是什么了,那么它究竟能解決平常工作中的哪些問題呢?下面就需要聊聊具體的使用場景了:
Airflow解決的場景
- 幫助運維追溯服務器中運行的定時任務的執行的結果
- 大數據處理場景下,方便管理觸發導入導出線上數據的各個任務以及這些任務之間的依賴關系
- 實現大規模主機集群中作業統一的調度和管理平臺
- 等等其它場景...
現在你覺得Airflow是不是在工作中還真有點用,有沒有一些共同的痛點呢?既然了解了airflow的作用,那就走進的airflow,熟悉一下airflow的組件架構。
Airflow架構
Airflow架構圖
Worker
見名知意,它就是一線干活的,用來處理DAG中定義的具體任務
Scheduler
是airflow中一個管事的組件,用于周期性輪詢任務的調度計劃,然后將任務分發給執行的程序運行工作流
Webserver
webserver是Airflow中通過flask框架整合管理界面,可以讓你通過http請求與airflow通信來管理airflow,可以通過界面的方式查看正在運行的任務,以及任務的運行狀態、運行日志等等,
通過管理界面創建、觸發、中止任務讓airflow使用變得更加簡單。如下圖所示,當然這也是airflow的一個絕大優勢。
Airflow Dashboard
Metadata Database
airflow的元數據數據庫,供scheduler、worker和webserver用來存儲狀態。
從整體上看Airflow的組件架構不是很復雜,當然這里的我們也進行了一些其他任務編排工具,對比一下
2Airflow類似的編排工具比較
編排工具的受歡迎度
總體而言,Apache Airflow既是最受歡迎的工具,也是功能最廣泛的工具。
Airflow vs Luigi
luigi與airflow都是使用python和dag定義任務和依賴項,但是luigi在架構和使用上相對更加的單一和簡單,同時airflow因為擁有豐富的UI和計劃任務方便顯示更勝一籌,而luigi需要更多的自定義代碼實現的計劃任務的功能
Airflow vs Argo
airflow與argo都可以將任務定義為DAG,但是在Airflow中,您可以使用Python進行此操作,而在Argo中,要使用YAML
Airflow vs Kubeflow
Airflow是一個通用的任務編排平臺,而Kubeflow特別專注于機器學習任務,兩種工具都使用Python定義任務,但是Kubeflow在Kubernetes上運行任務。Kubeflow分為Kubeflow和Kubeflow管道:后一個組件允許您指定DAG,但與常規任務相比,它更側重于部署和監控模型。
Airflow vs MLFlow
Airflow是一個通用的任務編排平臺,而MLFlow是專門為優化機器學習項目而構建的。這意味著MLFlow具有運行和跟蹤實驗,以及訓練和部署機器學習模型的功能,而Airflow適用于更廣泛的用例,您可以使用它來運行任何類型的任務。
Airflow是一組管理和計劃任務的模塊的集合,MLFlow是一個純粹的Python庫,您可以將其導入到現有的機器學習代碼中。
從了解Airflow的概念,到使用場景,已然對airflow這種編排工具有一定的了解,通過拆分了解airflow組件架構,又進一步對airflow的工作流程有一個初步的認識,通過與其他編排工具對比,了解的airflow的優勢以及結合自身的使用場景,更加有助于判斷,對編排工具選型的重要性。下一步,就將在實踐中在深一步走進airflow。