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