Airflow 動手玩:(五)Airflow 設定檔


上一篇我們大致看過了 Airflow 的架構,這篇會帶大家暸解,如果要調整架構設定時,可以到哪裡調整。

設定檔

Airflow 的設定檔相當的繁雜,以 airflow initdb 創造出來的設定檔就高達 990 行,所以這篇只會帶大家看一些比較常見的設定。

首先打開設定檔,會發現設定檔分成了幾個部分,像是 core, debug, webserver, smtp 等等,這些在 airflow.cfg 裡面會被標示成像下面的格式,接下來我們就分區塊看吧。

[core]
[debug]
[webserver]
[smtp]
...

core

core 是 Airflow 設定參數的核心,也是每個 Component 都會去讀取的值,所以會記錄像是 Metadata Database, DAG 資料夾位置、Plugins 資料夾位置等每個 Component 都需要知道的設定。

  • dags_folder: 存放 DAG 的資料夾,在 local 一般會是 ~/airflow/dags 對應的絕對路徑,不過現在部署幾乎都會用 Docker,所以要記得改成 Docker 內的絕對路徑。
  • plugins_folder: 存放 Operator 的資料夾,與 dags_folder 類似,不過在 local 一般會是 ~/airflow/plugins 對應的絕對路徑,到了 Docker 一樣要記得改變路徑。
  • sql_alchemy_conn: Database 的連線位置,如果沒有動過設定檔的話,應該會是用 SQLite 連到 ~/airflow/airflow.db 的位置,SQLite 在 Airflow 裡一般只用於開發,到了線上環境要記得換成其他 Database。
  • base_log_folder: 存放 log 的資料夾,一樣要是絕對路徑。
  • Remote Logging
    • remote_logging: 是否開啟遠端紀錄 Log,目前支援 AWS S3, Google Cloud Storage 或是 Elastic Search。
    • remote_log_conn_id: 如果要開啟的話,要記得先到 Connections 頁面創建一個 conn_id,以 s3 為例,可以在 Connections 設定一個 conn_id 為 s3_conn,對應的值如下:
      • Conn Id: s3_conn
      • Conn Type: S3
      • Extra: {"aws_access_key_id":"your_aws_key_id", "aws_secret_access_key": "your_aws_secret_key"}
    • remote_base_log_folder: 與 base_log_folder 類似,也就是在遠端 log 要存放的相對位置。
  • executor: 預設的 Executor 是 SequentialExecutor,如上一篇架構裡的 Executor 所說明的,我們可以換成我們想要的 Executor,像是 LocalExecutor, CeleryExecutor 或是 KubernetesExecutor
  • load_examples: 在線上環境,如果不想看到 Airflow 預設的 Example DAG,可以透過這個參數關掉。

cli

在 local 如果我們想透過 cli 跟線上環境溝通要怎麼做呢?可以改變 cli 的設定值。

  • api_client: 有兩種,airflow.api.client.local_clientairflow.api.client.json_client,如果選擇 local_client,Airflow 會直接跟設定檔裡設定的 Database 溝通;如果選 json_client,Airflow 會跟 endpoint_url 所設定的 WebServer 溝通。
  • endpoint_url: Airflow WebServer 的 url。

debug

debug 只有一個設定值 fail_fast,如果要啟用的話,記得把 executor 改成 DebugExecutor,這個設定值會讓 DAG 裡面只要有一個 Task 狀態是 failed,整個 DAG 的狀態也會變成 failed。

webserver

  • base_url: base_url 雖然放在 webserver,但其實跟 email 比較有關係,第二篇實作 DAG 時,有提到 Default Args 裡面的 email_on_failure 可以在 Task 失敗時自動寄信,Airflow 信中的內容會包括 WebServer 的位置,而這個位置就是 base_url
  • SSL: 可以透過 web_server_ssl_certweb_server_ssl_key 設定 SSL 憑證。
  • secret_key: 如果在線上環境,也要記得指定 secret_key,因為 Airflow 的 WebServer 是使用 Flask 實現的,Flask 會透過 secret_key 來對 cookies 簽名。

smtp

可以在 smtp 裡面設定 Airflow 寄信的相關設定。

使用環境變數更改設定檔

有了 Airflow 設定檔分成幾個部分的認識之後,我們可以來看看 Airflow 如何透過環境變數取代設定檔裡面的值,畢竟我們不太可能直接用明文把一些密碼寫在 Airflow,所以 Airflow 提供了透過環境變數傳遞設定值的做法,格式上會像 AIRFLOW__{which part}__{which key},開頭是 AIRFLOW,接下來兩條底線,中間代表是設定檔的哪個部分,再兩條底線,最後是設定值的 Key,如果要設定 core 裡面的 sql_alchemy_conn,就會像是:

export AIRFLOW__CORE__SQL_ALCHEMY_CONN=your database

總結

這次只介紹幾個 Airflow 中比較常會碰到的設定,但 Airflow 還有很多其他設定,像是上線後可能需要使用者登入才能進去 Airflow 的頁面,這部分 Airflow 就提供了內建的 Authenticate、LDAP 或者甚至是自己的 Authentication 後台,另外像是 Executor 其實也有很多設定,明天我們將 Airflow 部署在 Kubernetes 時,會在看 KubernetesExecutor 相關的設定。

#Airflow #Data Pipeline #Data Cleaning #ETL





Airflow 動手玩
Airflow 是由 Airbnb 開源的 Data Pipeline 軟體,在 2019 年成為了 Apache 軟體基金會 Top-Level 的專案,這個系列文會介紹從如何用 Airflow 管理我們 Data Pipeline 到如何部署在 Kubernetes 上。

留言討論