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