環境
ubuntu 16.04
python3.5 && python3.6
apt-get install python3-pip
pip3 install pipenv
pipenv install flask==1.0
1.需要的 python 模塊
import ssl
import sqlite3
2.安裝 airflow
網上的 pip install apache-airflow[all] 勿用太重
pipenv install apache-airflow==1.9 (現在 1.10 了)
but 你需要額外安裝
pipenv install apache-airflow[crypto]
pipenv install apache-airflow[mysql]
if mysql-config error
sudo apt-get install libmysqlclient-dev python3-dev
3.if gcc error
根據python 環境安裝 dev
apt-get install python3.5-dev (請根據自己的 python 版本安裝 dev)
4.添加 airflow 到環境變量
echo "export AIRFLOW_HOME=~/airflow" >> ~/.bashrc
source ~/.bashrc
5.mysql 數據庫配置
mysql -u{user_name} -p{pwd}
create database airflowdb;
6.if pip3 install pymssql ERROR
pip install setuptools_git
pip download pymssql
tar -zxvf pymssql-2.1.3.tar.gz
cd pymssql-2.1.3
export PYMSSQL_BUILD_WITH_BUNDLED_FREETDS=1
python setup.py install
7.配置airflow 連接 mysql.airflowdb
vim ~/airflow/airflow.cfg
executor = LocalExecutor
sql_alchemy_conn = mysql://root:admin@localhost:3306/airflowdb
8.在 airflow webserver 發現進程號重複,請
kill -9 PID
9.刪除dag
mysql
databases庫 airflowdb
tables表 dag
10.添加用戶, 開啓登錄頁面
在 webserver 下面的第一行添加認證, 加在authenticate 的默認位置下面無效
authenticate = True
auth_backend = airflow.contrib.auth.backends.password_auth
cd ~/airflow
pipenv shell
python3
>>> mport airflow
>>> from airflow import models, settings
>>> from airflow.contrib.auth.backends.password_auth import PasswordUser
>>> user = PasswordUser(models.User()) user.username = 'username'
>>> user.email = 'email'
>>> user.password = 'pwd'
>>> session = settings.Session()
>>> session.add(user)
>>> session.commit()
>>> session.close()
>>> exit()
pipenv shell
pipenv install apache-airflow[mysql]
airflow initdb
11.全部安裝成功請依次運行命令
airflow initdb
airflow scheduler
airflow webserver
12.airflow 修改時區
1.在airflow家目錄下修改airflow.cfg,設置時區爲上海
default_timezone = Asia/Shanghai
2.找到虛擬環境下的 airflow 文件, pipenv 和 mkvirtualenv 安裝的虛擬環境都在.virtualenv 中
進入airflow包的安裝位置,也就是site-packages的位置,以下修改文件均爲相對位置
cd /root/.virtualenvs/af/lib/python3.5/site-packages/
3.修改 airflow/utils/timezone.py
from airflow import configuration as conf
try:
tz = conf.get("core", "default_timezone")
if tz == "system":
utc = pendulum.local_timezone()
else:
utc = pendulum.timezone(tz)
except Exception:
pass
4.修改utcnow()函數 (在第69行)
原代碼 d = dt.datetime.utcnow()
修改爲 d = dt.datetime.now()
5.修改airflow/utils/sqlalchemy.py
from airflow import configuration as conf
try:
tz = conf.get("core", "default_timezone")
if tz == "system":
utc = pendulum.local_timezone()
else:
utc = pendulum.timezone(tz)
except Exception:
pass
6.airflow/www/templates/admin/master.html(第31行)
把代碼 var UTCseconds = (x.getTime() + x.getTimezoneOffset()*60*1000);
改爲 var UTCseconds = x.getTime();
把代碼 "timeFormat":"H:i:s %UTC%",
改爲 "timeFormat":"H:i:s",
直觀的界面