在快速啟動部分中設(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_url
和celery_result_backend
可以作為命令獲取。這背后的想法是不要將密碼存儲在純文本文件的框中。優(yōu)先級的順序如下:
- 環(huán)境變量
- airflow.cfg中的配置
- airflow.cfg中的命令
- 默認
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”。
默認情況下,Airflow將在元數(shù)據(jù)庫中以純文本形式保存連接的密碼。在安裝過程中強烈推薦使用密碼包crypto
。crypto
密碼包確實要求您的操作系統(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_HOME
或AIRFLOW_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 on
和stop on
以使其適用于其他upstart系統(tǒng)。 script / upstart / README
中列出了一些可能的選項。
根據(jù)需要修改* .conf
文件并復(fù)制到/ etc / init
目錄。 假設(shè)airflow將在airflow:airflow
下運行。 如果您使用其他用戶/組,請在* .conf
文件中更改setuid
和setgid
您可以使用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
。