2024 領航計畫已開放報名,請點擊後查看報名資訊
前往 Medium 閱讀好讀版

講者:曾晴,資料科學工程師 @ 國泰金控數位數據暨科技發展中心

如何讓程式自動跑起來

運用 Airflow 讓 Python 開發的工作流自動化

活動主辦單位: Taiwan Data Science Meetup 台灣資料科學社群

摘要

在程式上線後,資料科學家會遇到很多自動化和維運的問題,因此國泰的資料工程師分享了可能遇到的幾個痛點,以及如何使用 Airflow 找到相應的解決辦法,了解自動排程工作,並學會如何處理數據的工作流,完成數據專案自動化。

大綱

  1. 程式上線後的需求
  2. 自動化的痛點
  3. 什麼是 Airflow
  4. 如何將 Airflow 應用在數據專案中
  5. 問題和討論

講者介紹

講者曾晴為國泰的數據工程師,專精於資料處理,與自動化工程的開發和專案設計。

講者介紹

專案上線後的需求

大部分的專案在部署上線後,重心就會放在自動化和維運,確保程式正常運行。像是,如果公司在每個月的月初會產生一張新的資料報表,就會需要確保程式也會在每個月的某個日期同時做更新。

專案流程圖

但在自動化和維運的過程中卻可能出現很多問題,以下分為四個痛點做說明。

自動化的痛點

  1. 程式沒有被執行:有時程式發生錯誤沒有被執行,都要等到下游的使用者發現異常後,才發現出現異常。
  2. 不知道程式出的 Bug 在哪裏:如果專案複雜,結合眾多程式,工程師要花很多時間查 log ,找出真正出問題的地方,花大量時間考古。
  3. 來源表眾多:有些專案需要數百張表,執行失敗的時候,卻要一張張看到底是哪張表沒有到位
  4. 出問題後,所有程式都被迫停止:傳統的 Cron Job 會定期執行程式,但可能會因為連線不到而停止,造成整個專案系統停滯。

因此 Airflow 變成資料科學家常使用的工具,幫助監控自動化的程式。

什麼是 Airflow?

Airflow 是一個從 Airbnb 誕生並開源,以 Python 寫成的工作流程管理系統(Workflow Management System),被用來建構可靠的 ETL 以及定期處理批量資料。

在 Airflow Web UI 首頁,會顯示所有的工作流程的狀況,全名稱作有向無環圖(DAG)。「有向」代表它會由上游開始執行每個工作,「無環」代表上游工作做完會到下游,但下游做完不會回上游。簡言之,我們可以把 DAG 想成專案流程圖,描述不同任務間上下游的關係和啟動順序。而以下的燈號就代表了每個工作的運行狀態。

  • 綠燈:正常執行
  • 淺綠:正在執行
  • 紅燈:曾有錯誤

Airflow 介面

如果把 DAG 改成圖表示圖(Graph View),就可以看到工作們視覺化後的流程圖。只要把 Python 的檔案部署到 Airflow 就會產生以下流程圖,和每個工作的狀態。

  • 綠匡:成功執行
  • 紅匡:出現問題

Airflow 圖表圖示圖(Graph View)

我們也可以看跨時間看 DAG 樹狀圖(Tree View),了解每天執行的情況,如果看到紅燈,可以點進去查找任務產生的 log。

Airflow 樹狀圖(Tree View)& Log

另外,Airflow 也可以寄發工作執行成功、失敗的通知信,用 html 做設計。

Airflow 自動化通知信

範例程式

以下是設定 DAG 的範例程式。我們可以看到工作流程為,先執行 t1,執行完後執行 t2 和 t3。

  • 左半邊程式碼:導入模組,設定所有參數,像是多久跑一次
  • 右半邊程式碼:定義 t1 , t2 , t3 ,要做的事情,以及在最後定義上下游的關係。

Airflow 範例程式

解決自動化的痛點

  1. 程式沒有被執行:有時程式發生錯誤沒有被執行,都要等到下游的使用者發現異常後,才發現出現異常。
    😊 ️Airflow 可以透過 Email 通知工作的成功或失敗,及早處理。
  2. 不知道程式出的 Bug 在哪裏:如果專案複雜,結合眾多程式,工程師要花很多時間查 log ,找出真正出問題的地方,花大量時間考古。
    😊 Airflow 的介面可以快速查找異常的地方,點進去查 log,不用到控制台裡大海撈針。此外,圖表示圖(Graph View)可以顯示工作之間的關係,管理有相依性的程式。
  3. 來源表眾多:有些專案需要數百張表,執行失敗的時候,卻要一張張看到底是哪張表沒有到位。
    😊 Airflow 的介面可以看哪張表沒有到位,以簡明的視覺畫呈現。
  4. 出問題後,所有程式都被迫停止:傳統的 Cron Job 會定期執行程式,但可能會因為連線不到而停止,造成整個專案系統停滯。
    😊 Airflow 的 Retry 可以重跑程式,也可以只從異常的地方開始重跑,把程式拆階段來執行,不會需要全部從頭開始。

如何將 Airflow 應用在數據專案中 — 國泰的應用

國泰的使用

他們有 70–80 張來源表進行運算,讓所有功能全自動執行,像是可以用 Airflow 判斷-資料來源有沒有問題。金融業規定嚴格,不一定能讓工程師隨時進去系統查找問題,因此 Airflow 降低了維運的成本。

Airflow 案例應用

此外,Airflow 適合有步驟性或是執行邏輯複雜的專案,完成具有相依性的工作。譬如要完成 E 就得先完成 B 和 C,想完成 F 則是要完成 D 。

工作流程圖範例

使用 Airflow 的注意事項

  1. 開發 DAG 前需要了解程式的邏輯,設計正確的 trigger rules。
  2. 開發完成一定要先測試,確認正確。
  3. 設計時要設計可以重新執行的程式。像是 SQL 的 INSERT 要給成 UPSERT,每次重表時資料量才會相同,不然資料量會越來越大。
  4. 注意通知信的發送頻率,不然可能過度干擾。
  5. Airflow 有許多第三方整合好的套件可以運用
  6. Airflow 的 log 偏肥,因此可以用些開源套件定期刪除 log
  7. 建議選擇版本 2.1.0

問題和討論

Q1:在架設 Airflow 的過程有遇到哪些問題? 是否評估過使用其他自動化工具?

  • 有想過用 Apache NiFi 或是其他的付費軟體,但是因為 Airflow 全部都是用 Python ,直接寫好把檔案推上去比較直覺,最後還是選擇了 Airflow。

Q2:使用 Airflow 和團隊人數有關嗎?有沒有特別適合的團隊大小?

  • Airflow 適合的是有步驟性、和工作邏輯複雜的專案,因此團隊大小沒有什麼關係。

Q3:要怎麼開始使用 Airflow 呢?

筆手:Esther Yang
👉 歡迎加入台灣資料科學社群,有豐富的新知分享以及最新活動資訊喔!

資料科學協會

資料科學協會

社群分享筆記 更新紀錄

Copyright 2020-2024 資料科學協會 All Rights Reserved.

本網站由 資料科學協會 維護