python做流程管理平台_[译] Airflow: 一个工作流程管理平台
Airflow: 一個(gè)工作流程管理平臺(tái)
Airbnb 是一個(gè)快速增長(zhǎng)的、數(shù)據(jù)啟示型的公司。我們的數(shù)據(jù)團(tuán)隊(duì)和數(shù)據(jù)量都在快速地增長(zhǎng),同時(shí)我們所面臨的挑戰(zhàn)的復(fù)雜性也在同步增長(zhǎng)。我們正在擴(kuò)張的數(shù)據(jù)工程師、數(shù)據(jù)科學(xué)家和分析師團(tuán)隊(duì)在使用 Airflow,它是我們搭建的一個(gè)可以快速推進(jìn)工作,保持發(fā)展優(yōu)勢(shì)的平臺(tái),因?yàn)槲覀兛梢宰约壕庉?、監(jiān)控和改寫(xiě) 數(shù)據(jù)管道。
今天,我們非常自豪地宣布我們要 開(kāi)源 和 共享 我們的工作流程管理平臺(tái):Airflow。
有向無(wú)環(huán)圖(DAGs)呈綻放之勢(shì)
當(dāng)與數(shù)據(jù)打交道的工作人員開(kāi)始將他們的流程自動(dòng)化,那么寫(xiě)批處理作業(yè)是不可避免的。這些作業(yè)必須按照一個(gè)給定的時(shí)間安排執(zhí)行,它們通常依賴(lài)于一組已有的數(shù)據(jù)集,并且其它的作業(yè)也會(huì)依賴(lài)于它們。即使你讓好幾個(gè)數(shù)據(jù)工作節(jié)點(diǎn)在一起工作很短的一段時(shí)間,用于計(jì)算的批處理作業(yè)也會(huì)很快地?cái)U(kuò)大成一個(gè)復(fù)雜的圖?,F(xiàn)在,如果有一個(gè)工作節(jié)奏快、中型規(guī)模的數(shù)據(jù)團(tuán)隊(duì),而且他們?cè)趲啄曛畠?nèi)要面臨不斷改進(jìn)的數(shù)據(jù)基礎(chǔ)設(shè)施,并且手頭上還有大量復(fù)雜的計(jì)算作業(yè)網(wǎng)絡(luò)。那這個(gè)復(fù)雜性就成為數(shù)據(jù)團(tuán)隊(duì)需要處理,甚至深入了解的一個(gè)重要負(fù)擔(dān)。
這些作業(yè)網(wǎng)絡(luò)通常就是 有向無(wú)環(huán)圖(DAGs),它們具有以下屬性:已排程: 每個(gè)作業(yè)應(yīng)該按計(jì)劃好的時(shí)間間隔運(yùn)行
關(guān)鍵任務(wù): 如果一些作業(yè)沒(méi)有運(yùn)行,那我們就有麻煩了
演進(jìn): 隨著公司和數(shù)據(jù)團(tuán)隊(duì)的成熟,數(shù)據(jù)處理也會(huì)變得成熟
異質(zhì)性: 現(xiàn)代化的分析技術(shù)棧正在快速發(fā)生著改變,而且大多數(shù)公司都運(yùn)行著好幾個(gè)需要被粘合在一起的系統(tǒng)
每個(gè)公司都有一個(gè)(或者多個(gè))
工作流程管理 已經(jīng)成為一個(gè)常見(jiàn)的需求,因?yàn)榇蠖鄶?shù)公司內(nèi)部有多種創(chuàng)建和調(diào)度作業(yè)的方式。你總是可以從古老的 cron 調(diào)度器開(kāi)始,并且很多供應(yīng)商的開(kāi)發(fā)包都自帶調(diào)度功能。下一步就是創(chuàng)建腳本來(lái)調(diào)用其它的腳本,這在短期時(shí)間內(nèi)是可以工作的。最終,一些為了解決作業(yè)狀態(tài)存儲(chǔ)和依賴(lài)的簡(jiǎn)單框架就涌現(xiàn)了。
通常,這些解決方案都是 被動(dòng)增長(zhǎng) 的,它們都是為了響應(yīng)特定作業(yè)調(diào)度需求的增長(zhǎng),而這通常也是因?yàn)楝F(xiàn)有的這種系統(tǒng)的變種連簡(jiǎn)單的擴(kuò)展都做不到。同時(shí)也請(qǐng)注意,那些編寫(xiě)數(shù)據(jù)管道的人通常不是軟件工程師,并且他們的任務(wù)和競(jìng)爭(zhēng)力都是圍繞著處理和分析數(shù)據(jù)的,而不是搭建工作流程管理系統(tǒng)。
鑒于公司內(nèi)部工作流程管理系統(tǒng)的成長(zhǎng)總是比公司的需求落后至少一代,作業(yè)的編輯、調(diào)度和錯(cuò)誤排查之間的 摩擦 制造了大量低效且令人沮喪的事情,這使得數(shù)據(jù)工作者和他們的高產(chǎn)出路線背道而馳。
Airflow
在評(píng)審?fù)觊_(kāi)源解決方案,同時(shí)聽(tīng)取 Airbnb 的員工對(duì)他們過(guò)去使用的系統(tǒng)的見(jiàn)解后,我們得出的結(jié)論是市場(chǎng)上沒(méi)有任何可以滿足我們當(dāng)前和未來(lái)需求的方案。我們決定搭建一個(gè)嶄新的系統(tǒng)來(lái)正確地解決這個(gè)問(wèn)題。隨著這個(gè)項(xiàng)目的開(kāi)發(fā)進(jìn)展,我們意識(shí)到我們有一個(gè)極好的機(jī)會(huì)去回饋我們也極度依賴(lài)的開(kāi)源社區(qū)。因此,我們決定依照 Apache 的許可開(kāi)源這個(gè)項(xiàng)目。
這里是 Airbnb 的一些靠 Airflow 推動(dòng)的處理工序:數(shù)據(jù)倉(cāng)儲(chǔ): 清洗、組織規(guī)劃、數(shù)據(jù)質(zhì)量檢測(cè)并且將數(shù)據(jù)發(fā)布到我們持續(xù)增長(zhǎng)的數(shù)據(jù)倉(cāng)庫(kù)中去
增長(zhǎng)分析: 計(jì)算關(guān)于住客和房主參與度的指標(biāo)以及增長(zhǎng)審計(jì)
試驗(yàn): 計(jì)算我們 A/B 測(cè)試試驗(yàn)框架的邏輯并進(jìn)行合計(jì)
定向電子郵件: 對(duì)目標(biāo)使用規(guī)則并且通過(guò)群發(fā)郵件來(lái)吸引用戶
會(huì)話(Sessionization): 計(jì)算點(diǎn)擊流和停留時(shí)間的數(shù)據(jù)集
搜索: 計(jì)算搜索排名相關(guān)的指標(biāo)
數(shù)據(jù)基礎(chǔ)架構(gòu)維護(hù): 數(shù)據(jù)庫(kù)抓取、文件夾清理以及應(yīng)用數(shù)據(jù)留存策略...
架構(gòu)
就像英語(yǔ)是商務(wù)活動(dòng)經(jīng)常使用的語(yǔ)言一樣,Python 已經(jīng)穩(wěn)固地將自己樹(shù)立為數(shù)據(jù)工作的語(yǔ)言。Airflow 從創(chuàng)建之初就是用 Python 編寫(xiě)的。代碼庫(kù)可擴(kuò)展、文檔齊全、風(fēng)格一致、語(yǔ)法過(guò)檢并且有很高的單元測(cè)試覆蓋率。
管道的編寫(xiě)也是用 Python 完成的,這意味著通過(guò)配置文件或者其他元數(shù)據(jù)進(jìn)行動(dòng)態(tài)管道生成是與生俱來(lái)的。“配置即代碼” 是我們?yōu)榱诉_(dá)到這個(gè)目的而堅(jiān)守的準(zhǔn)則。雖然基于 yaml 或者 json 的作業(yè)配置方式可以讓我們用任何語(yǔ)言來(lái)生成 Airflow 數(shù)據(jù)管道,但是我們感覺(jué)到轉(zhuǎn)化過(guò)程中的一些流動(dòng)性喪失了。能夠內(nèi)省代碼(ipython!和集成開(kāi)發(fā)工具)子類(lèi)和元程序并且使用導(dǎo)入的庫(kù)來(lái)幫助編寫(xiě)數(shù)據(jù)管道為 Airflow 增加了巨大的價(jià)值。注意,只要你能寫(xiě) Python 代碼來(lái)解釋配置,你還是可以用任何編程語(yǔ)言或者標(biāo)記語(yǔ)言來(lái)編輯作業(yè)。
你僅需幾行命令就可以讓 Airflow 運(yùn)行起來(lái),但是它的完整架構(gòu)包含有下面這么多組件:作業(yè)定義,包含在源代碼控制中。
一個(gè)豐富的 命令行工具 (命令行接口) 用來(lái)測(cè)試、運(yùn)行、回填、描述和清理你的有向無(wú)環(huán)圖的組成部件。
一個(gè) web 應(yīng)用程序,用來(lái)瀏覽有向無(wú)環(huán)圖的定義、依賴(lài)項(xiàng)、進(jìn)度、元數(shù)據(jù)和日志。web 服務(wù)器打包在 Airflow 里面并且是基于 Python web 框架 Flask 構(gòu)建的。
一個(gè) 元數(shù)據(jù)倉(cāng)庫(kù),通常是一個(gè) MySQL 或者 Postgres 數(shù)據(jù)庫(kù),Airflow 可以用它來(lái)記錄任務(wù)作業(yè)狀態(tài)和其它持久化的信息。
一組 工作節(jié)點(diǎn),以分布式的方式運(yùn)行作業(yè)的任務(wù)實(shí)例。
調(diào)度 程序,觸發(fā)準(zhǔn)備運(yùn)行的任務(wù)實(shí)例。
可擴(kuò)展性
Airflow 自帶各種與 Hive、Presto、MySQL、HDFS、Postgres 和 S3 這些常用系統(tǒng)交互的方法,并且允許你觸發(fā)任意的腳本,基礎(chǔ)模塊也被設(shè)計(jì)得非常容易進(jìn)行擴(kuò)展。
Hooks 被定義成外部系統(tǒng)的抽象并且共享同樣的接口。Hooks 使用中心化的 vault 數(shù)據(jù)庫(kù)將主機(jī)/端口/登錄名/密碼信息進(jìn)行抽象并且提供了可供調(diào)用的方法來(lái)跟這些系統(tǒng)進(jìn)行交互。
操作符 利用 hooks 生成特定的任務(wù),這些任務(wù)在實(shí)例化后就變成了數(shù)據(jù)流程中的節(jié)點(diǎn)。所有的操作符都派生自 BaseOperator 并且繼承了一組豐富的屬性和方法。三種主流的操作符分別是:執(zhí)行 動(dòng)作 的操作符, 或者通知其它系統(tǒng)去執(zhí)行一個(gè)動(dòng)作
轉(zhuǎn)移 操作符將數(shù)據(jù)從一個(gè)系統(tǒng)移動(dòng)到另一個(gè)系統(tǒng)
傳感器 是一類(lèi)特定的操作符,它們會(huì)一直運(yùn)行直到滿足了特定的條件
執(zhí)行器(Executors) 實(shí)現(xiàn)了一個(gè)接口,它可以讓 Airflow 組件(命令行接口、調(diào)度器和 web 服務(wù)器)可以遠(yuǎn)程執(zhí)行作業(yè)。目前,Airflow 自帶一個(gè) SequentialExecutor(用來(lái)做測(cè)試)、一個(gè)多線程的 LocalExecutor、一個(gè)使用了 Celery 的 CeleryExecutor 和一個(gè)超棒的基于分布式消息傳遞的異步任務(wù)隊(duì)列。我們也計(jì)劃在不久后開(kāi)源 YarnExecutor。
一個(gè)絢麗的用戶界面
雖然 Airflow 提供了一個(gè)豐富的命令行接口,但是最好的工作流監(jiān)控和交互辦法還是使用 web 用戶接口。你可以容易地圖形化顯示管道依賴(lài)項(xiàng)、查看進(jìn)度、輕松獲取日志、查閱相關(guān)代碼、觸發(fā)任務(wù)、修正 false positives/negatives 以及分析任務(wù)消耗的時(shí)間,同時(shí)你也能得到一個(gè)任務(wù)通常在每天什么時(shí)候結(jié)束的全面視圖。用戶界面也提供了一些管理功能:管理連接、池和暫停有向無(wú)環(huán)圖的進(jìn)程。
錦上添花的是,用戶界面有一個(gè) Data Profiling 區(qū),可以讓用戶在注冊(cè)好的連接上進(jìn)行 SQL 查詢(xún)、瀏覽結(jié)果集,同時(shí)也提供了創(chuàng)建和分享一些簡(jiǎn)單圖表的方法。這個(gè)制圖應(yīng)用是由 Highcharts、Flask Admin 的增刪改查接口以及 Airflow 的 hooks 和 宏庫(kù)混搭而成的。URL 參數(shù)可以傳遞給你圖表中使用的 SQL,Airflow 的宏是通過(guò) Jinja templating 的方式工作的。有了這些特性和查詢(xún)功能,Airflow 用戶可以很容易的創(chuàng)建和分享結(jié)果集和圖表。
一種催化劑
使用 Airflow 之后,Airbnb 的員工進(jìn)行數(shù)據(jù)工作的生產(chǎn)率和熱情提高了好幾倍。管道的編寫(xiě)也加速了,監(jiān)控和錯(cuò)誤排查所花費(fèi)的時(shí)間也顯著減少了。更重要的是,這個(gè)平臺(tái)允許人們從一個(gè)更高級(jí)別的抽象中去創(chuàng)建可重用的模塊、計(jì)算框架以及服務(wù)。
說(shuō)得夠多的了!
我們已經(jīng)通過(guò)一個(gè)啟發(fā)式的教程把試用 Airflow 變得極其簡(jiǎn)單。想看到示例結(jié)果也只需要執(zhí)行幾個(gè) shell 命令。看一看 Airflow 文檔 的快速上手和教程部分,你可以在幾分鐘之內(nèi)就讓你的 Airflow web 程序以及它自帶的交互式實(shí)例跑起來(lái)!
在 airbnb.io 上查看我們所有的開(kāi)源項(xiàng)目并 在 Twitter 上關(guān)注我們:@AirbnbEng + @AirbnbData如果發(fā)現(xiàn)譯文存在錯(cuò)誤或其他需要改進(jìn)的地方,歡迎到 掘金翻譯計(jì)劃 對(duì)譯文進(jìn)行修改并 PR,也可獲得相應(yīng)獎(jiǎng)勵(lì)積分。文章開(kāi)頭的 本文永久鏈接 即為本文在 GitHub 上的 MarkDown 鏈接。掘金翻譯計(jì)劃 是一個(gè)翻譯優(yōu)質(zhì)互聯(lián)網(wǎng)技術(shù)文章的社區(qū),文章來(lái)源為 掘金 上的英文分享文章。內(nèi)容覆蓋 Android、iOS、前端、后端、區(qū)塊鏈、產(chǎn)品、設(shè)計(jì)、人工智能等領(lǐng)域,想要查看更多優(yōu)質(zhì)譯文請(qǐng)持續(xù)關(guān)注 掘金翻譯計(jì)劃、官方微博、知乎專(zhuān)欄。
總結(jié)
以上是生活随笔為你收集整理的python做流程管理平台_[译] Airflow: 一个工作流程管理平台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在 Spyder 中使用包和环境
- 下一篇: stm32倒计时秒表proteus_单片