2. airflow配置

在快速啟動部分中設(shè)置很簡單,構(gòu)建生產(chǎn)級環(huán)境需要更多的工作,下面來了解一下。

1. 設(shè)置配置選項

第一次運行Airflow時,它將在$AIRFLOW_HOME目錄(默認情況下是~/airflow)中創(chuàng)建一個名為airflow.cfg的文件。此文件包含Airflow的配置,您可以編輯它以更改任何設(shè)置。還可以使用以下格式設(shè)置環(huán)境變量選項:$AIRFLOW__{SECTION}__{KEY}(注意雙下劃線)。

例如,元數(shù)據(jù)數(shù)據(jù)庫連接可以在airflow.cfg中設(shè)置如下:

[core]
sql_alchemy_conn = my_conn_string

或者通過創(chuàng)建相應(yīng)的環(huán)境變量:

AIRFLOW__CORE__SQL_ALCHEMY_CONN=my_conn_string

還可以在運行時將連接字符串_cmd附加到鍵中,如下所示:

[core]
sql_alchemy_conn_cmd = bash_command_to_run

但是只有三個這樣的配置元素sql_alchemy_conn,broker_urlcelery_result_backend可以作為命令獲取。這背后的想法是不要將密碼存儲在純文本文件的框中。優(yōu)先級的順序如下:

  1. 環(huán)境變量
  2. airflow.cfg中的配置
  3. airflow.cfg中的命令
  4. 默認

2. 設(shè)置后端

如果您想要對airflow進行真正的測試,您應(yīng)該考慮建立一個真正的數(shù)據(jù)庫后端并切換到LocalExecutor。

airflow內(nèi)置數(shù)據(jù)庫是SqlAlchemy庫,與其元數(shù)據(jù)交互時,您應(yīng)該能夠使用任何類似SqlAlchemy的數(shù)據(jù)庫作為后端支持的數(shù)據(jù)庫。我們建議使用MySQL或Postgres。

一旦你為Airflow安裝了數(shù)據(jù)庫,就需要修改配置文件$AIRFLOW_HOME/airflow.cfg中的SqlAlchemy連接字符串。然后,您還應(yīng)該將“ executor”設(shè)置更改為使用“LocalExecutor”,這是一個可以在本地并行任務(wù)實例的執(zhí)行器。

# initialize the database 初始化數(shù)據(jù)庫
airflow initdb

3. 連接

Airflow需要知道如何連接到你的環(huán)境。主機名、端口、登錄ID和密碼等信息在UI的Admin->Connection部分中處理。你創(chuàng)建的工作流代碼將引用連接對象的“conn_id”。

image.png

默認情況下,Airflow將在元數(shù)據(jù)庫中以純文本形式保存連接的密碼。在安裝過程中強烈推薦使用密碼包cryptocrypto密碼包確實要求您的操作系統(tǒng)安裝libffi-dev。

如果最初沒有安裝密碼包crypto,則仍然可以通過以下步驟啟用連接的加密:
(1). 安裝密碼軟件包pip install apache-airflow[crypto]
(2). 使用下面的代碼段生成fernet_key。fernet_key必須是base 64編碼的32字節(jié)密鑰。

from cryptography.fernet import Fernet
fernet_key= Fernet.generate_key()
print(fernet_key) # your fernet_key, keep it in secured place!

(3). 將airflow.cfg中fernet_key的值替換為步驟2中的值。或者,您可以將您的fernet_key存儲在OS的環(huán)境變量中。在這種情況下,您不需要更改airflow.cfg,因為AirFlow 會優(yōu)先使用環(huán)境變量,而不是在airflow.cfg中的值:

# Note the double underscores
EXPORT AIRFLOW__CORE__FERNET_KEY = your_fernet_key

(4). 重新啟動AirFlow網(wǎng)絡(luò)服務(wù)器。
(5). 對于現(xiàn)有的連接(在安裝airflow[crypto]和創(chuàng)建Fernet Key之前定義的連接),您需要在連接管理UI中打開每個連接,重新鍵入密碼并保存它。

可以使用環(huán)境變量創(chuàng)建AirFlow工作流中的連接。為了正確地使用連接,環(huán)境變量需要有一個前綴‘AIRFLOW_CONN_’代表是AirFlow的環(huán)境變量,其值為URI格式。有關(guān)環(huán)境變量和連接的更多信息,請參見概念文檔

4. 用Celery擴大規(guī)模

CeleryExecutor是您擴展worker的數(shù)量的方法之一。 為此,您需要設(shè)置Celery后端(RabbitMQ,Redis,...)并更改airflow.cfg以將執(zhí)行程序參數(shù)指向CeleryExecutor并提供相關(guān)的Celery設(shè)置。

有關(guān)設(shè)置Celery代理的更多信息,請參閱有關(guān)該主題的詳盡Celery文檔.

以下是您的workers的一些必要要求:

  • 需要安裝airflow,CLI需要在路徑中
  • 整個群集中的airflow配置設(shè)置應(yīng)該是同構(gòu)的
  • 在worker上執(zhí)行的操作符需要在該上下文中滿足其依賴項。 例如,如果您使用HiveOperator,則需要在該box上安裝hive CLI,或者如果您使用MySqlOperator,則必須以某種方式在PYTHONPATH中提供所需的Python庫
  • worker需要訪問其DAGS_FOLDER,您需要通過自己的方式同步文件系統(tǒng)。 常見的設(shè)置是將DAGS_FOLDER存儲在Git存儲庫中,并使用Chef,Puppet,Ansible或用于配置環(huán)境中的計算機的任何內(nèi)容在計算機之間進行同步。 如果您的所有boxes都有一個共同的掛載點,那么共享您的工作流文件也應(yīng)該可以正常工作

要啟動worker,您需要設(shè)置Airflow并啟動worker子命令:

airflow worker

worker一旦被刪除, 就應(yīng)該立即收起任務(wù)。(我真心翻譯不來了

請注意,您還可以運行“Celery Flower”,這是一個建立在Celery之上的Web UI,用于監(jiān)控您的worker。 您可以使用快捷命令airflow flower啟動Flower Web服務(wù)器。

5. 用Dask擴大規(guī)模

DaskExecutor允許您在Dask分布式群集中運行Airflow任務(wù)。

Dask集群可以在單個機器上運行,也可以在遠程網(wǎng)絡(luò)上運行。 有關(guān)完整詳細信息,請參閱分布式文檔.

要創(chuàng)建集群,首先啟動調(diào)度程序:

# default settings for a local cluster
DASK_HOST=127.0.0.1
DASK_PORT=8786

dask-scheduler --host $DASK_HOST --port $DASK_PORT

接下來,在任何可以連接到主機的計算機上啟動至少一個Worker:

dask-worker $DASK_HOST:$DASK_PORT

Edit your airflow.cfg to set your executor to DaskExecutor and provide the Dask Scheduler address in the [dask] section.

編輯airflow.cfg以將執(zhí)行程序設(shè)置為DaskExecutor,并在[dask]部分中提供Dask Scheduler地址。

請注意:

  • 每個Dask worker 必須能夠?qū)階irflow和需要的任何依賴項。
  • Dask不支持隊列。 如果使用隊列創(chuàng)建了Airflow任務(wù),則會引發(fā)警告,但該任務(wù)將提交給集群。

6. 日志

用戶可以在airflow.cfg中指定日志文件夾。 默認情況下,它位于AIRFLOW_HOME目錄中。

此外,用戶可以提供遠程位置,以便在云存儲中存儲日志和日志備份。 目前,支持Amazon S3和Google Cloud Storage。 要啟用此功能,必須按照此示例配置airflow.cfg

[core]
# Airflow can store logs remotely in AWS S3 or Google Cloud Storage. Users
# must supply a remote location URL (starting with either 's3://...' or
# 'gs://...') and an Airflow connection id that provides access to the storage
# location.
remote_base_log_folder = s3://my-bucket/path/to/logs
remote_log_conn_id = MyS3Conn
# Use server-side encryption for logs stored in S3
encrypt_s3_logs = False

遠程日志記錄使用現(xiàn)有的Airflow連接來讀取/寫入日志。 如果沒有正確設(shè)置連接,則會失敗。 在上面的例子中,Airflow將嘗試使用S3Hook('MyS3Conn')。

在Airflow Web UI中,本地日志優(yōu)先于遠程日志。 如果找不到或訪問本地日志,將顯示遠程日志。 請注意,只有在任務(wù)完成(包括失敗)后才會將日志發(fā)送到遠程存儲。 換句話說,運行任務(wù)的遠程日志不可用。 日志作為{dag_id} / {task_id} / {execution_date} / {try_number} .log存儲在日志文件夾中。

7. 擴展Mesos(社區(qū)貢獻)

MesosExecutor允許您在Mesos群集上安排Airflow任務(wù)。 為此,您需要一個正在運行的mesos集群,并且必須執(zhí)行以下步驟 :
(1). 在一個運行Web服務(wù)器和調(diào)度程序的計算機上安裝Airflow,我們將其稱為“Airflow server”。
(2). 在Airflow服務(wù)器上,從mesos下載安裝mesos python eggs。
(3). 在Airflow服務(wù)器上,使用可以從mesos slave機器訪問的數(shù)據(jù)庫(例如mysql)并在airflow.cfg中添加配置。
(4). 將airflow.cfg更改為指向MesosExecutor的point executor參數(shù),并提供相關(guān)的Mesos設(shè)置。
(5). 在所有mesos slaves上,安裝airflow。 從Airflow服務(wù)器復(fù)制airflow.cfg(以便它使用相同的sql連接)。
(6). 在所有mesos slave服務(wù)器上,運行以下服務(wù)日志:

airflow serve_logs

(7). 在Airflow服務(wù)器上,要開始在mesos上處理/調(diào)度DAG,請運行:

airflow scheduler -p

注意:我們需要-p參數(shù)來挑選DAGs。

您現(xiàn)在可以在mesos UI中查看Airflow框架和相應(yīng)的任務(wù)。 氣流任務(wù)的日志可以像往常一樣在Airflow UI中查看。

有關(guān)mesos的更多信息,請參閱mesos文檔。 有關(guān)MesosExecutor的任何疑問/錯誤,請聯(lián)系@ kapil-malik

8. 與systemd集成

Airflow可以與基于系統(tǒng)的系統(tǒng)集成。 這使得觀察您的守護進程變得容易,因為systemd可以在失敗時重新啟動守護進程。 在scripts / systemd目錄中,您可以找到已在基于Redhat的系統(tǒng)上測試過的單元文件。 您可以將它們復(fù)制到/ usr / lib / systemd / system。 假設(shè)Airflow將在airflow:airflow下運行。 如果不是(或者如果您在非基于Redhat的系統(tǒng)上運行),則可能需要調(diào)整單元文件。

/ etc / sysconfig / airflow中獲取環(huán)境配置。 提供了一個示例文件。 運行調(diào)度程序時,請確保在此文件中指定SCHEDULER_RUNS變量。 您也可以在此處定義,例如AIRFLOW_HOMEAIRFLOW_CONFIG

9. 與upstart集成

Airflow可以與基于upstart的系統(tǒng)集成。 Upstart會在系統(tǒng)啟動時自動啟動/ etc / init中具有相應(yīng)* .conf文件的所有Airflow服務(wù)。 失敗時,upstart會自動重啟進程(直到達到* .conf文件中設(shè)置的重新生成限制)。

您可以在scripts / upstart目錄中找到示例upstart作業(yè)文件。 這些文件已在Ubuntu 14.04 LTS上測試過。 您可能需要調(diào)整start onstop on以使其適用于其他upstart系統(tǒng)。 script / upstart / README中列出了一些可能的選項。

根據(jù)需要修改* .conf文件并復(fù)制到/ etc / init目錄。 假設(shè)airflow將在airflow:airflow下運行。 如果您使用其他用戶/組,請在* .conf文件中更改setuidsetgid

您可以使用initctl手動啟動,停止,查看已與upstart集成的airflow進程的狀態(tài)

initctl airflow-webserver status

10. 測試模式

Airflow具有一組固定的“測試模式”配置選項。 您可以隨時通過調(diào)用airflow.configuration.load_test_config()來加載它們(注意此操作不可逆!)。 但是,在您有機會調(diào)用load_test_config()之前,會加載一些選項(如DAG_FOLDER)。 為了快速加載測試配置,請在airflow.cfg中設(shè)置test_mode:

[tests]
unit_test_mode = True

由于Airflow的自動環(huán)境變量擴展(請參閱設(shè)置配置選項),您還可以設(shè)置env var AIRFLOW__CORE__UNIT_TEST_MODE以臨時覆蓋airflow.cfg

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容