講者:曾晴,資料科學工程師 @ 國泰金控數位數據暨科技發展中心
運用 Airflow 讓 Python 開發的工作流自動化
活動主辦單位:Taiwan Data Science Meetup 台灣資料科學社群
摘要
在程式上線後,資料科學家會遇到很多自動化和維運的問題,因此國泰的資料工程師分享了可能遇到的幾個痛點,以及如何使用 Airflow 找到相應的解決辦法,了解自動排程工作,並學會如何處理數據的工作流,完成數據專案自動化。
大綱
程式上線後的需求
自動化的痛點
什麼是 Airflow
如何將 Airflow 應用在數據專案中
問題和討論
講者介紹
講者曾晴為國泰的數據工程師,專精於資料處理,與自動化工程的開發和專案設計。
專案上線後的需求
大部分的專案在部署上線後,重心就會放在自動化和維運,確保程式正常運行。像是,如果公司在每個月的月初會產生一張新的資料報表,就會需要確保程式也會在每個月的某個日期同時做更新。
但在自動化和維運的過程中卻可能出現很多問題,以下分為四個痛點做說明。
自動化的痛點
程式沒有被執行:有時程式發生錯誤沒有被執行,都要等到下游的使用者發現異常後,才發現出現異常。
不知道程式出的 Bug 在哪裏:如果專案複雜,結合眾多程式,工程師要花很多時間查 log ,找出真正出問題的地方,花大量時間考古。
來源表眾多:有些專案需要數百張表,執行失敗的時候,卻要一張張看到底是哪張表沒有到位
出問題後,所有程式都被迫停止:傳統的 Cron Job 會定期執行程式,但可能會因為連線不到而停止,造成整個專案系統停滯。
因此 Airflow 變成資料科學家常使用的工具,幫助監控自動化的程式。
什麼是 Airflow?
Airflow 是一個從 Airbnb 誕生並開源,以 Python 寫成的工作流程管理系統(Workflow Management System),被用來建構可靠的 ETL 以及定期處理批量資料。
在 Airflow Web UI 首頁,會顯示所有的工作流程的狀況,全名稱作有向無環圖(DAG)。「有向」代表它會由上游開始執行每個工作,「無環」代表上游工作做完會到下游,但下游做完不會回上游。簡言之,我們可以把 DAG 想成專案流程圖,描述不同任務間上下游的關係和啟動順序。而以下的燈號就代表了每個工作的運行狀態。
綠燈:正常執行
淺綠:正在執行
紅燈:曾有錯誤
如果把 DAG 改成圖表示圖(Graph View),就可以看到工作們視覺化後的流程圖。只要把 Python 的檔案部署到 Airflow 就會產生以下流程圖,和每個工作的狀態。
綠匡:成功執行
紅匡:出現問題
我們也可以看跨時間看 DAG 樹狀圖(Tree View),了解每天執行的情況,如果看到紅燈,可以點進去查找任務產生的 log。
另外,Airflow 也可以寄發工作執行成功、失敗的通知信,用 html 做設計。
範例程式
以下是設定 DAG 的範例程式。我們可以看到工作流程為,先執行 t1,執行完後執行 t2 和 t3。
左半邊程式碼:導入模組,設定所有參數,像是多久跑一次
右半邊程式碼:定義 t1 , t2 , t3 ,要做的事情,以及在最後定義上下游的關係。
解決自動化的痛點
程式沒有被執行:有時程式發生錯誤沒有被執行,都要等到下游的使用者發現異常後,才發現出現異常。
😊 ️Airflow 可以透過 Email 通知工作的成功或失敗,及早處理。不知道程式出的 Bug 在哪裏:如果專案複雜,結合眾多程式,工程師要花很多時間查 log ,找出真正出問題的地方,花大量時間考古。
😊 Airflow 的介面可以快速查找異常的地方,點進去查 log,不用到控制台裡大海撈針。此外,圖表示圖(Graph View)可以顯示工作之間的關係,管理有相依性的程式。來源表眾多:有些專案需要數百張表,執行失敗的時候,卻要一張張看到底是哪張表沒有到位。
😊 Airflow 的介面可以看哪張表沒有到位,以簡明的視覺畫呈現。出問題後,所有程式都被迫停止:傳統的 Cron Job 會定期執行程式,但可能會因為連線不到而停止,造成整個專案系統停滯。
😊 Airflow 的 Retry 可以重跑程式,也可以只從異常的地方開始重跑,把程式拆階段來執行,不會需要全部從頭開始。
如何將 Airflow 應用在數據專案中 — 國泰的應用
國泰的使用
他們有 70–80 張來源表進行運算,讓所有功能全自動執行,像是可以用 Airflow 判斷-資料來源有沒有問題。金融業規定嚴格,不一定能讓工程師隨時進去系統查找問題,因此 Airflow 降低了維運的成本。
此外,Airflow 適合有步驟性或是執行邏輯複雜的專案,完成具有相依性的工作。譬如要完成 E 就得先完成 B 和 C,想完成 F 則是要完成 D 。
使用 Airflow 的注意事項
開發 DAG 前需要了解程式的邏輯,設計正確的 trigger rules。
開發完成一定要先測試,確認正確。
設計時要設計可以重新執行的程式。像是 SQL 的 INSERT 要給成 UPSERT,每次重表時資料量才會相同,不然資料量會越來越大。
注意通知信的發送頻率,不然可能過度干擾。
Airflow 有許多第三方整合好的套件可以運用
Airflow 的 log 偏肥,因此可以用些開源套件定期刪除 log
建議選擇版本 2.1.0
問題和討論
Q1:在架設 Airflow 的過程有遇到哪些問題? 是否評估過使用其他自動化工具?
有想過用 Apache NiFi 或是其他的付費軟體,但是因為 Airflow 全部都是用 Python ,直接寫好把檔案推上去比較直覺,最後還是選擇了 Airflow。
Q2:使用 Airflow 和團隊人數有關嗎?有沒有特別適合的團隊大小?
Airflow 適合的是有步驟性、和工作邏輯複雜的專案,因此團隊大小沒有什麼關係。
Q3:要怎麼開始使用 Airflow 呢?
可以下載 Docker 後,直接使用,以下為學習 Docker 的資源:https://philipzheng.gitbook.io/docker_practice/。
筆手:Esther Yang
👉 歡迎加入台灣資料科學社群,有豐富的新知分享以及最新活動資訊喔!
https://www.facebook.com/groups/datasciencemeetup