溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

任務(wù)調(diào)度神器airflow怎么用呢

發(fā)布時間:2021-12-09 09:21:35 來源:億速云 閱讀:168 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)任務(wù)調(diào)度神器airflow怎么用呢,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。


airflow 是 apache下孵化項(xiàng)目,是純 Python 編寫的一款非常優(yōu)雅的開源調(diào)度平臺。github 上有 8971 個星(貓注:現(xiàn)在是 15.4K),是非常受歡迎的調(diào)度工具。airflow 使用 DAG (有向無環(huán)圖) 來定義工作流,配置作業(yè)依賴關(guān)系非常方便,豪不夸張地說:方便程度簡直甩其他任務(wù)調(diào)度工具一條街。

airflow 有著以下天然優(yōu)勢:

1. 靈活易用,airflow 本身是 Python 編寫的,且工作流的定義也是 Python 編寫,有了 Python 膠水的特性,沒有什么任務(wù)是調(diào)度不了的,有了開源的代碼,沒有什么問題是無法解決的,你完全可以修改源碼來滿足個性化的需求,而且更重要的是代碼都是   —human-readable 。
2. 功能強(qiáng)大,自帶的 Operators 都有15+,也就是說本身已經(jīng)支持 15 種不同類型的作業(yè),而且還是可自定義 Operators,什么 shell 腳本,python,mysql,oracle,hive等等,無論不傳統(tǒng)數(shù)據(jù)庫平臺還是大數(shù)據(jù)平臺,統(tǒng)統(tǒng)不在話下,對官方提供的不滿足,完全可以自己編寫 Operators。
3. 優(yōu)雅,作業(yè)的定義很簡單明了, 基于 jinja 模板引擎很容易做到腳本命令參數(shù)化,web 界面更是也非常   —human-readable ,誰用誰知道。
4. 極易擴(kuò)展,提供各種基類供擴(kuò)展, 還有多種執(zhí)行器可供選擇,其中 CeleryExcutor 使用了消息隊(duì)列來編排多個工作節(jié)點(diǎn)(worker), 可分布式部署多個 worker ,airflow 可以做到無限擴(kuò)展。

5. 豐富的命令工具,你甚至都不用打開瀏覽器,直接在終端敲命令就能完成測試,部署,運(yùn)行,清理,重跑,追數(shù)等任務(wù),想想那些靠著在界面上不知道點(diǎn)擊多少次才能部署一個小小的作業(yè)時,真覺得 airflow 真的太友好了。

airflow 是免費(fèi)的,我們可以將一些常做的巡檢任務(wù),定時腳本(如 crontab ),ETL處理,監(jiān)控等任務(wù)放在 airflow 上集中管理,甚至都不用再寫監(jiān)控腳本,作業(yè)出錯會自動發(fā)送日志到指定人員郵箱,低成本高效率地解決生產(chǎn)問題。但是由于中文文檔太少,大多不夠全全,因此想快速上手并不十分容易。首先要具備一定的 Python 知識,反復(fù)閱讀官方文檔,理解調(diào)度原理。本系列分享由淺入深,逐步細(xì)化,嘗試為你揭開 airflow 的面紗。

組成部分

從一個使用者的角度來看,調(diào)度工作都有以下功能:

1. 系統(tǒng)配置($AIRFLOW_HOME/airflow.cfg)
2. 作業(yè)管理($AIRFLOW_HOME/dags/xxxx.py)
3. 運(yùn)行監(jiān)控(webserver)
4. 報警(郵件或短信)
5. 日志查看(webserver 或 $AIRFLOW_HOME/logs/  *)
6. 跑批耗時分析(webserver)

7. 后臺調(diào)度服務(wù)(scheduler)

除了短信需要自己實(shí)現(xiàn),其他功能 airflow 都有,而且在 airflow 的 webserver 上我們可以直接配置數(shù)據(jù)庫連接來寫 sql 查詢,做更加靈活的統(tǒng)計(jì)分析。

除了以上的組成部分,我們還需要知道一些概念

一些概念:

DAG

Linux 的 crontab 和 windows 的任務(wù)計(jì)劃,他們可以配置定時任務(wù)或間隔任務(wù),但不能配置作業(yè)之前的依賴關(guān)系。airflow 中 DAG 就是管理作業(yè)依賴關(guān)系的。DAG 的英文 directed acyclic graphs 即有向無環(huán)圖,下圖 1 便是一個簡單的 DAG

任務(wù)調(diào)度神器airflow怎么用呢

圖 1:DAG 示例

在 airflow 中這種 DAG 是通過編寫 Python 代碼來實(shí)現(xiàn)的,DAG 的編寫非常簡單,官方提供了很多的例子,在安裝完成后,啟動 webserver 即可看到 DAG 樣例的源碼(其實(shí)定義了 DAG 對象的 python 程序),稍做修改即可成為自己的 DAG 。上圖 1 中 DAG 中的依賴關(guān)系通過下述三行代碼即可完成:

任務(wù)調(diào)度神器airflow怎么用呢

是不是非常簡潔,并且是 —human-readable。

操作符-Operators

DAG 定義一個作業(yè)流,Operators 則定義了實(shí)際需要執(zhí)行的作業(yè)。airflow 提供了許多 Operators 來指定我們需要執(zhí)行的作業(yè):

  • BashOperator - 執(zhí)行 bash 命令或腳本。
  • SSHOperator - 執(zhí)行遠(yuǎn)程 bash 命令或腳本(原理同 paramiko 模塊)。
  • PythonOperator - 執(zhí)行 Python 函數(shù)。
  • EmailOperator - 發(fā)送 Email。
  • HTTPOperator - 發(fā)送一個 HTTP 請求。
  • MySqlOperator, SqliteOperator, PostgresOperator, MsSqlOperator, OracleOperator, JdbcOperator, 等. - 執(zhí)行 SQL 任務(wù)。
  • DockerOperator, HiveOperator, S3FileTransferOperator, PrestoToMysqlOperator, SlackOperator 你懂得。

    除了以上這些 Operators 還可以方便的自定義 Operators 滿足個性化的任務(wù)需求。


    后續(xù)會介紹如何使用這些 Operators 敬請關(guān)注。

時區(qū)-timezone

airflow 1.9 之前的版本使用本地時區(qū)來定義任務(wù)開始日期,scheduler_interval 中 crontab 表達(dá)式中的定時也是依據(jù)本地時區(qū)為準(zhǔn),但 airflow 1.9 及后續(xù)新版本將默認(rèn)使用 UTC 時區(qū)來確保 airflow 調(diào)度的獨(dú)立性,以避免不同機(jī)器使用不同時區(qū)導(dǎo)致運(yùn)行錯亂。如果調(diào)度的任務(wù)集中在一個時區(qū)上,或不同機(jī)器,但使用同一時區(qū)時,需要對任務(wù)的開始時間及 cron 表達(dá)式進(jìn)行時區(qū)轉(zhuǎn)換,或直接使用本地時區(qū)。目前 1.9 的穩(wěn)定版本還不支持時區(qū)配置,后續(xù)版本會加入時區(qū)配置,以滿足使用本地時區(qū)的需求。

web服務(wù)器-webserver

webserver 是 airflow 的界面展示,可顯示 DAG 視圖,控制作業(yè)的啟停,清除作業(yè)狀態(tài)重跑,數(shù)據(jù)統(tǒng)計(jì),查看日志,管理用戶及數(shù)據(jù)連接等。不運(yùn)行 webserver 并不影響 airflow 作業(yè)的調(diào)度。

調(diào)度器-schduler

調(diào)度器 schduler 負(fù)責(zé)讀取 DAG 文件,計(jì)算其調(diào)度時間,當(dāng)滿足觸發(fā)條件時則開啟一個執(zhí)行器的實(shí)例來運(yùn)行相應(yīng)的作業(yè),必須持續(xù)運(yùn)行,不運(yùn)行則作業(yè)不會跑批。

工作節(jié)點(diǎn)-worker

當(dāng)執(zhí)行器為 CeleryExecutor 時,需要開啟一個 worker。

執(zhí)行器-Executor

執(zhí)行器有 SequentialExecutor, LocalExecutor, CeleryExecutor

  1. SequentialExecutor 為順序執(zhí)行器,默認(rèn)使用 sqlite 作為知識庫,由于 sqlite 數(shù)據(jù)庫的原因,任務(wù)之間不支持并發(fā)執(zhí)行,常用于測試環(huán)境,無需要額外配置。
  2. LocalExecutor 為本執(zhí)行器,不能使用 sqlite 作為知識庫,可以使用 mysql,postgress,db2,oracle 等各種主流數(shù)據(jù)庫,任務(wù)之間支持并發(fā)執(zhí)行,常用于生產(chǎn)環(huán)境,需要配置數(shù)據(jù)庫連接 url。
  3. CeleryExecutor 為 Celery 執(zhí)行器,需要安裝 Celery ,Celery 是基于消息隊(duì)列的分布式異步任務(wù)調(diào)度工具。需要額外啟動工作節(jié)點(diǎn)-worker。使用 CeleryExecutor 可將作業(yè)運(yùn)行在遠(yuǎn)程節(jié)點(diǎn)上。

以一張思維導(dǎo)圖總結(jié)今天的內(nèi)容:

任務(wù)調(diào)度神器airflow怎么用呢

以上就是任務(wù)調(diào)度神器airflow怎么用呢,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI