一、先介紹一下 Airflow
Airflow是一個可編程,調(diào)度和監(jiān)控的工作流平臺,基于有向無環(huán)圖(DAG),airflow可以定義一組有依賴的任務,按照依賴依次執(zhí)行。airflow提供了豐富的命令行工具用于系統(tǒng)管控,而其web管理界面同樣也可以方便的管控調(diào)度任務,并且對任務運行狀態(tài)進行實時監(jiān)控,方便了系統(tǒng)的運維和管理。
雖然Airflow的主要功能宗旨是數(shù)據(jù)工程和數(shù)據(jù)科學領域,但也可以根據(jù)需要將其擴展到業(yè)務流程審批等其他應用場景中。如:可以創(chuàng)建一個DAG(有向無環(huán)圖),并將每個節(jié)點定義為審批步驟。當遞交一個待審批的請求時,Airflow會按照您預先定義的順序、時間間隔或其他條件來觸發(fā)每個節(jié)點。該過程中,可以在Web UI上查看每個節(jié)點的狀態(tài),并發(fā)送電子郵件或其他通知來提醒相關用戶進行審批或操作。另外,通過插件或自定義代碼,還可以將Airflow與其他系統(tǒng)集成,從而實現(xiàn)更復雜的流程,例如自動化生成文件或自動化處理其它系統(tǒng)的數(shù)據(jù)。
二、主要功能包括以下方面:
1、DAG:通過python腳本描述任務依賴關系,形成有向無環(huán)圖(DAG),將任務和依賴關系組織起來。您可以使用Airflow內(nèi)置的Python庫或者自己編寫Python代碼來創(chuàng)建DAG定義。
2、運行器(Executor):根據(jù)任務的類型和復雜程度,您可以選擇不同的運行器來執(zhí)行。Airflow提供了四種運行器:Sequential(順序)、Local(本地)、Celery和Dask。這些運行器可以擴展至超過10萬個任務,同時保持良好的性能表現(xiàn)。
3、任務調(diào)度:Airflow使用第三方插件-Beat Scheduler來安排和執(zhí)行任務。該插件允許預定、執(zhí)行、監(jiān)控和重新執(zhí)行DAG組成的工作流中的任務。
4、連接器(Connections):Airflow支持許多第三方連接器,可用于與各種數(shù)據(jù)源進行交互,例如AWS S3、Azure Blob Storage、Postgres、MySQL、Redis等等。您可以輕松地將連接器配置到Airflow系統(tǒng)中,并通過Python代碼來操作外部系統(tǒng),以便在Airflow中基于數(shù)據(jù)流建立一個工作流。
5、觸發(fā)器(Triggers): Airflow包含一組強大的觸發(fā)器機制,可以允許您設置依賴放寬的級別。例如,如果您希望等待另一個DAG完成或在特定條件下才啟動任務,Airflow可以提供靈活的觸發(fā)器工具。
6、任務狀態(tài)監(jiān)控:Airflow捕獲運行時日志記錄,并將其存儲到關系數(shù)據(jù)庫中。您可以使用命令行界面或Web UI來輕松查看日志和監(jiān)控進度,以及重新啟動失敗的任務或重新安排錯過的任務。
7、擴展功能:Airflow擁有豐富的API接口,您可以使用REST API進行管理、監(jiān)視和調(diào)用任務。還有許多擴展插件可用于實現(xiàn)更高級的功能,例如Jupyter Notebooks支持等。
8、Airflow的主要功能是幫助數(shù)據(jù)工程師和數(shù)據(jù)科學家通過代碼來組織復雜的數(shù)據(jù)管道,以及管理和監(jiān)控這些管道中的任務和依賴項
三、安裝步驟:
1、更新包列表
sudo apt update
2、更新已安裝的包
sudo apt upgrade
3、python設定
安裝python3.8
sudo apt-get install python3.8
sudo apt-get install python3-pip python3-venv
刪除原來python依賴
sudo rm /usr/bin/python3
更換默認python3 的版本為3.8
sudo ln -s /usr/bin/python3.8 /usr/bin/python3
4、安裝 python 虛擬環(huán)境
mkdir /opt/airflow_venv
sudo chown -R ubuntu.ubuntu /opt/airflow_venv
python3 -m venv airflow_venv
如果一直無法創(chuàng)建虛擬環(huán)境需要安裝python3.8-venv
sudo apt-get install python3.8-venv
激活虛擬環(huán)境
source /opt/airflow_venv/bin/activate
5、為了確保Airflow能夠找到必要的文件和依賴項,請運行以下命令以設置AIRFLOW_HOME環(huán)境變量:
export AIRFLOW_HOME=/opt/airflow
同時最好能將其添加到 ~/.bashrc 文件中,以便永久保存這些設置。
sudo pico ~/.bashrc
在空行或者末尾添加
export AIRFLOW_HOME=/opt/airflow
然后保存退出
確認環(huán)境變量是否已成功設置。需要關閉當前窗口再打開運行以下命令:
echo $AIRFLOW_HOME
6、安裝airflow
pip3 install apache-airflow -i https://pypi.tuna.tsinghua.edu.cn/simple
通過pip安裝的可以,通過pip show apache-airflow來查看安裝路徑
7、初始化數(shù)據(jù)庫【如果不更換數(shù)據(jù)庫,就可以直接初始化】
airflow db init
8、官方建議更換數(shù)據(jù)庫,現(xiàn)改為mysql
8.1、安裝
sudo apt-get update #更新包
sudo apt install mysql-server-5.7
查看mysql的版本:mysql -V
8.2、設置mysql密碼
mysql -u root -p
剛安裝后是沒有密碼的,可直接回車進入
CREATE USER 'airflow'@'%' IDENTIFIED BY 'qw****21';
需要對用戶進行授權
GRANT all ON *.* TO 'airflow'@'%';
退出sql,使密碼生效
sudo mysql_secure_installation
同時為了能遠程訪問,需要修改
打開MySQL配置文件my.cnf,并找到bind-address選項。這通常位于/etc/mysql/mysql.conf.d/mysqld.cnf文件中
#bind-address = 127.0.0.1
bind-address = 0.0.0.0
8.3、重啟mysql
sudo service mysql restart
8.4、安裝mysql驅(qū)動
sudo apt install -y mysql-client
sudo apt-get install libmysqlclient-dev
sudo apt install libssl-dev
sudo apt install libcrypto -dev
sudo apt install libmysqlclient-dev
pip install mysqlclient
一直報#include "Python.h" ^~~~~~~~~~ compilation terminated. error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1,發(fā)現(xiàn)安裝了sudo apt-get install python3-dev,安裝了python3.8-dev才能解決
sudo apt-get install python3.8-dev
pip3 install 'apache-airflow[mysql]'
修改airflow的數(shù)據(jù)連接
pico /opt/airflow/airflow.cfg
找到以下位置,把原來的sql_alchemy_conn注釋,然后添加新連接
[database]
#sql_alchemy_conn = sqlite:////opt/airflow/airflow.db
sql_alchemy_conn=mysql://username:mypassword@localhost/airflow_db
8.5、初始化數(shù)據(jù)庫
airflow db init
8.6、創(chuàng)建用戶
airflow users create –username 賬號 –firstname 姓 –lastname 名字 –role Admin –email asd@xxx.com
9、啟動airflow
source /opt/airflow_venv/bin/activate
airflow webserver -p 8080 -D
10、啟動調(diào)度程序
airflow scheduler -D
加參數(shù)D,是守護進程運行,不占用窗體
版權聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。