初識Airflow任務調度平臺

1.分佈式和集羣

  • 集羣和分佈式對比
集羣 分佈式
一個物理形態 一種工做方式
只要是一堆機器,就能夠稱爲集羣,至於它們是否協做幹活,這個誰也不知道 一個程序或者系統,只要運行在不一樣的機器上,就能夠叫分佈式(固然,C/S架構也能夠叫分佈式)
通常是物理集中、統一管理的 不強調物理集中、統一管理
  • 小結

集羣可能運行着一個或多個分佈式系統,也可能根本沒有運行分佈式系統;web

分佈式系統可能運行在一個集羣上,也可能運行在不屬於一個集羣的多臺(2臺也算是多臺)機器上。sql

2.Airflow介紹

Airflow是Airbnb開源的一個用Python編寫的調度工具。架構

2.1 Airflow中的做業和任務

  • DAG分佈式

    • 概要:DAG(Directed Acyclic Graph)是有向無環圖,也稱爲有向無循環圖。在Airflow中,一個DAG定義了一個完整的做業。同一個DAG中的全部Task擁有相同的調度時間。
    • 參數:
      • dag_id: 惟一識別DAG,方便往後管理
      • default_args: 默認參數,若是當前DAG實例的做業沒有配置相應參數,則採用DAG實例的default_args中的相應參數
      • schedule_interval: 配置DAG的執行週期,可採用crontab語法
  • Task工具

    • 概要:Task爲DAG中具體的做業任務,依賴於DAG,也就是必須存在於某個DAG中。Task在DAG中能夠配置依賴關係(固然也能夠配置跨DAG依賴,可是並不推薦。跨DAG依賴會致使DAG圖的直觀性下降,並給依賴管理帶來麻煩)。
    • 參數:
      • dag: 傳遞一個DAG實例,以使當前做業屬於相應DAG
      • task_id: 給任務一個標識符(名字),方便往後管理
      • owner: 任務的擁有者,方便往後管理
      • start_date: 任務的開始時間,即任務將在這個時間點以後開始調度

2.2 Airflow的調度時間

  • start_date

在配置中,它是做業開始調度時間。而在談論執行情況時,它是調度開始時間。日誌

  • schedule_interval

調度執行週期。code

  • execution_date

執行時間。在Airflow中稱爲執行時間,但其實它並非真實的執行時間。cdn


[敲黑板,劃重點]server

因此,第一次調度時間:在做業中配置的start_date,且知足schedule_interval的時間點。記錄的execution_date爲做業中配置的start_date的第一個知足schedule_interval的時間。blog

[舉個例子]

假設咱們配置了一個做業的start_date爲2019年6月2日,配置的schedule_interval爲* 00 12 * * *,那麼第一次執行的時間將是2019年6月3日 12點。所以execution_date並非如期字面說的表示執行時間,真正的執行時間是execution_date所顯示的時間的下一個知足schedule_interval的時間點。


2.3 Airflow的調度方式

  • 調度方式
    • SequentialExecutor: 順序調度
    • LocalExecutor: 多進程調度
    • CeleryExecutor: 分佈式調度

可是有時候僅僅靠配置做業依賴和調度執行週期並不能知足一些複雜的需求

  • other任務調度方式
      1. 跳過非最新DAG Run(做業中出現故障,一段時間後恢復)
      1. 當存在正在執行的DAG Run時,跳過當前DAG Run(做業執行時間過長,長到下一次做業開始)
    • 3)Sensor的替代方案(Airflow中有一類Operator被稱爲Sensor,Sensor能夠感應預先設定的條件是否知足,當知足條件後Sensor做業變爲Success使得下游的做業能夠執行。弊端是,若是上游做業執行3個小時,那麼會佔用worker三個小時不釋放,資源浪費。

2.4 Airflow的服務構成

  • webserver

Airflow 提供了一個可視化的 Web 界面。啓動 WebServer 後,就能夠在 Web 界面上查看定義好的 DAG 並監控及改變運行情況。也能夠在 Web 界面中對一些變量進行配置。

  • worker

通常來講咱們用 Celery Worker 來執行具體的做業。Worker 能夠部署在多臺機器上,並能夠分別設置接收的隊列。當接收的隊列中有做業任務時,Worker 就會接收這個做業任務,並開始執行。Airflow 會自動在每一個部署 Worker 的機器上同時部署一個 Serve Logs 服務,這樣咱們就能夠在 Web 界面上方便的瀏覽分散在不一樣機器上的做業日誌了。

  • scheduler

整個 Airflow 的調度由 Scheduler 負責發起,每隔一段時間 Scheduler 就會檢查全部定義完成的 DAG 和定義在其中的做業,若是有符合運行條件的做業,Scheduler 就會發起相應的做業任務以供 Worker 接收。

  • flower

Flower 提供了一個可視化界面以監控全部 Celery Worker 的運行情況。這個服務並非必要的。

2.5 Airflow的原始架構

airflow-origin-structure

3.基於Docker的Airflow分佈式搭建

3.1 部署結點

  • Scheduler、WebServer、Flower: 10.21.0.192

  • Worker: 10.21.0.190、10.21.0.19一、10.21.0.193

  • RabbitMQ(Celry broker ): 10.21.0.192

  • Mysql(backend): 10.21.0.235

3.2 Docker文件目錄

airflow-origin-structure

3.3 架構圖

airflow-origin-structure
相關文章
相關標籤/搜索