airflow 1.10+安裝
本次安裝airflow版本為1.10+,其需要依賴python和db,本次選擇的db為mysql。
本次安裝元件及版本如下:airflow == 1.10.0
python == 3.6.5
mysql == 5.7
整體流程
建表
安裝
配置
運作
配置任務
庫名為airflow
'create database airflow;'
建使用者
使用者名為airflow,并且設定所有ip均可以通路。
create user 'airflow'@'%' identified by 'airflow';
create user 'airflow'@'localhost' identified by 'airflow';
使用者授權
這裡為建立的airflow使用者授予airflow庫的所有權限
這裡通過 virtualenv 進行安裝。
----- 通過virtualenv安裝
$ mkdir /usr/local/virtual_env && cd /usr/local/virtual_env # 建立目錄
$ virtualenv --no-site-packages airflow --python=python # 建立虛拟環境
$ source /usr/local/virtual_env/airflow/bin/activate # 激活虛拟環境
----- 安裝指定版本或者預設
$ pip install apache-airflow -i https://pypi.douban.com/simple
在安裝完一堆的依賴後,就需要配置 airflow_home 環境變量,後續的 dag 和 plugin 都将以該目錄作為根目錄查找,如上,可以直接設定為 /tmp/project 。
報錯
error: flask 1.1.1 has requirement jinja2>=2.10.1, but you'll have jinja2 2.10 which is incompatible.
error: flask 1.1.1 has requirement werkzeug>=0.15, but you'll have werkzeug 0.14.1 which is incompatible.
執行:pip3 install -u flask1.0.4
執行:pip3 install -u pika0.13.1
重新執行 :pip install apache-airflow -i https://pypi.douban.com/simple
----- 設定環境變量
(airflow) $ export airflow_home=/tmp/airflow
----- 檢視其版本資訊
(airflow) $ airflow version
____ |( )_______ / /________ __
____ /| |_ /__ / / __ / __ _ | /| / /
___ ___ | / _ / _ / _ / / // / |/ |/ /
// |// // // // _/____/|__/
v1.8.0
執行了上述的指令後,會生成 airflow.cfg 和 unittests.cfg 兩個檔案,其中前者是一個配置檔案 。
----- 修改airflow db配置
pip install "apache-airflow[mysql]"
這裡可以簡單說下,airflow依賴的其他元件均可以此方式安裝。在之後安裝password元件同樣是通過此方式。
修改airflow db配置
修改${airflow_home}/airflow.cfg
sql_alchemy_conn = mysql+mysqldb://airflow:airflow@localhost:3306/airflow
參數的格式為mysql://帳号:密碼@ip:port/db
初始化db
建立airflow依賴的表。
本文采用的使用者認證方式為password方式,其他方式如ldap同樣支援但是本文不會介紹。筆者在安裝時實驗過ldap方式但是未成功過。
此配置設定的是dag的task失敗或者重試時發送郵件的發送者。配置如下:
設定executor
修改:airflow.cfg
在 airflow 中,每個節點都是一個任務,可以是一條指令行 (bashoperator),可以是一段 python 腳本 (pythonoperator) 等等,然後這些節點根據依賴關系構成了一條流程,一個圖,稱為一個 dag 。
預設會到 ${airflow_home}/dags 目錄下查找,可以直接在該目錄下建立相應的檔案。
如下是一個簡單的示例。
該檔案建立一個簡單的 dag,隻有三個運算符,兩個 baseoperator ,也就是執行 bash 指令分别列印日期以及休眠 5 秒;另一個為 pythonoperator 在執行任務時調用 print_hello() 函數。
檔案建立好後,放置到 ${airflow_home}/dags,airflow 自動讀取該dag。
----- 測試是否正常,如果無報錯那麼就說明正常
$ python /tmp/project/dags/hello_world.py