1 安装
准备个服务器,先安装个miniconda
,然后可以提前配置环境变量export AIRFLOW_HOME=~/airflow
,默认安装到当前用户主目录:
pip install apache-airflow
接下来进行配置:
cd ~/airflow
vim airflow.cfg
配置下工作目录,注意工作目录比如dags
应该需要手动创建。
然后改下时区default_timezone = Asia/Shanghai
。
如果已经安装了MySQL
,可以改下连接:
sql_alchemy_conn = mysql+mysqldb://username:password@192.168.1.2:3306/airflow # 需要pip install mysqlclient
sql_alchemy_conn = mysql+mysqlconnector://username:password@192.168.1.2:3306/airflow # 推荐 pip install mysql-connector-python
如果不改的话,就是存在本地的sqlite
里。
webserver
也改下时区default_ui_timezone = Asia/Shanghai
。
其他host
、port
什么的自行修改。
接下来重要的core
下面的executor
可以改成LocalExecutor
,这样就可以用到本地的多线程来执行任务,并且网页上也不再Warning:生产环境不要使用SequentialExecutor
,注意sqlite
无法使用LocalExecutor
。
2 启动
airflow db init # 默认 sqlite:////Users/username/airflow/airflow.db
# 以下参数一个不能少,也是醉了
airflow users create \
--username admin \
--firstname Peter \
--lastname Parker \
--role Admin \
--email spiderman@superhero.org
会提示输入密码,当然也可以用--password
引入。
接下里开两个终端分别运行:
airflow webserver --port 8080 # -D后台
airflow scheduler # -D后台
然后服务器安全组设置好,就能访问http://my.ecs.ip:8080/home
了。
怎么关服务呢?下面的脚本可以,因为airflow
是启动了多个worker
的。
ps -ef | egrep 'scheduler|airflow-webserver' | grep -v grep | awk '{print $2}' | xargs kill -15
3 使用MySQL
首先docker
安装,比较方便:
docker container run -d --name mysql-container-name -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my_airflow_pwd mysql:5.7
进入容器,初始化:
docker exec -it <mysql container id> bash
然后创建数据库:
CREATE DATABASE airflow_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
然后在工作目录编辑连接信息:
vim airflow.cfg
找到连接信息,更改一下:
mysql+mysqlconnector://root:my_airflow_pwd@localhost:3306/airflow_db
记得安装包:
pip install mysql-connector-python
重新初始化:
airflow db init
如果报错(42000): Invalid default value for 'updated_at'
,那是因为不允许时间为0000-00-00
,参考:
stack overflow
questions/9192027/invalid-default-value-for-create-date-timestamp-field
mysql > SET @@global.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
哪个管用得自己试一试。然后再重新跑一下webserver
和scheduler
等。
暂时够用。