airflow 進行後端大資料中ETL處理(草稿)

羅倫斯發表於2018-08-26

情境說明:

公司接了外部的資料來源,要把資料同步到gcp雲端來,資料表很多 ,我們使用了多種方式把資料寫入到我們公司位於gcp上的bigquery 資料表

問題

資料表很多樣,不同的資料表有不同的ETL處理方式,例如「訂單」資料表是append only的,我們要從gcs上讀取檔案,轉化後寫到bigquery資料表。

而「優惠卷」資料表則必須從bigquery上某一個資料表(如下圖)進行撈取的動作,然後跟據新增或修改、刪除型別的資料,對另一個也是在bigquery上的資料表進行維護的動作。

airflow 進行後端大資料中ETL處理(草稿)

思考

把所有各式各樣的ETL作業都寫在同一個程式進行處理很顯然是不合理的,第一,沒辦法分工。第二,當出現問題時,很難除錯。

另一個問題隨著思考的深入也開始浮現出來。某一些工作必須在另一個工作做完之後接著做。若上游的工作失敗了,下游的工作就不接著執行。
上述問題如果你是用寫死每天幾點作業的方式,除了上下游工作有空檔,浪費等待時間之外,下游工作是完全沒辦法"感知"上游工作是否真正作業成功的。

airflow完全可以解決這個問題

本文不打算介紹airflow的安裝方式,你可以自已上網找到不少檔案
本文在這邊分享一些經驗

優點

除了airflow安裝十分容易之外,airflow很顯然有以下幾個優點

  1. 工作之間的相依性
  2. 流程以程式的方式被記錄下來,可以進入版控
  3. 圖型化的網頁介面,方便記憶完整流程
  4. 方便查log

工作之間的相依性

如上面所述,如果你用排程設定時間,一兩個工作還好,如果上下游工作有不少個,無謂的等待就太浪費時間了。此外,傳統的方式你也很難在兩個工作之間傳送訊息。而用了airflow之後,除了沒有等待時間之外,每個工作執行完都可以馬上通知下一個工作進行處理。而且還可以透過xcom在兩個工作之間傳送訊息,十分方便。

流程以程式碼的方式被記錄下來,可以進入版控

如下圖,我們看到最後一行,extract1 >> update,代表extract1完後接著updatte,只要簡單將這個py檔放到版控處理,不管中間經過幾位工程師之手,若發生失敗,你都可以透過版控查詢失敗的程式碼,來進行相應的處理(例如回復成上一版)

airflow 進行後端大資料中ETL處理(草稿)

bigquery operator

airflow對gcp 十分友善,你可以透過bigquery operator,直接一行程式碼就將bigquery 上的查詢寫入到另一個bq資料表

bash operator

bash operator的建構式有一個選項,若設為true,就會直接把最後一個輸出的結果寫入到xcom供下一個task使用,這非常實用 請看以下連結init的引數中xcom_push引數 airflow.apache.org/_modules/ba…

圖型化的網頁介面,方便管理,而且容易記憶完整流程

圖型顯示各個工作流之間的關係,除了方便管理,查工作執行的情況之外,而且容易記憶完整工作流,大資料的資料處理又多且雜,隨著時日久遠,有可能到最後演變到相關工程師都搞不清楚問題出在哪裡。
有了圖型化介面,我們可以快速的檢視工作在每一天的執行情況,而且上下游關係也一目瞭然。這真的太美好了

相關文章