airflow太坑了啊!!!我搭了一个下午才完成,同时公司的开发机网络也很坑,各种问题。通过这篇文章来记录一下中间的坑!

使用到的版本:

  • python 3.6.5
  • airflow 1.9.0
  • mysql 5.7

数据库准备

建库

create database airflow;

建用户

create user 'airflow'@'%' identified by 'airflow';

create user 'airflow'@'localhost' identified by 'airflow';

用户授权

grant all on airflow.* to 'airflow'@'%';

flush privileges;

exit;

安装airflow

下载airflow

pip install apache-airflow===1.9.0

安装环境变量

export SLUGIFY_USES_TEXT_UNIDECODE=yes

编辑/etc/profile系统环境变量文件:
向其中添加

其中SITE_AIRFLOW_HOME为pip安装到的地方,一般是在${PYTHON_HOME}/lib/python3.6/site-packages/airflow.

配置生效

source /etc/profile

执行airflow生成初始化文件

执行过程可能会报错,暂时不用理会,因为还没装一个模块,生成后的文件如图所示

安装airflow mysql模块

pip install 'apache-airflow[mysql]'

airflow的插件安装方式都遵循这种方式,具体参照airflow插件安装方式

安装时可能会报错

mysql_config not found

解决步骤
1. 查看是否已经存在mysql_config文件

find / -name mysql_config
  1. 若没有,安装mysql-devel
yum install mysql-devel
  1. 再次验证

配置airflow

airflow配置文件中默认使用的是sqlite数据库,我这里使用的是mysql数据库

pip install mysqlclient

修改airflow.cfg文件中的sql_alchemy_conn配置:

# dialect+driver://username:password@host:port/database 
sql_alchemy_conn = mysql://airflow:airflow@localhost:3306/airflow

初始化数据库

以上我们完成了数据库初始化前的所有操作,接下来可以完成初始化工作

airflow initdb

有一个很坑的点

如果你的这个软件的版本是0.19.0会报模块或者属性找不到的错误,根据你的airflow版本会报不同的错,我报的是

AttributeError: module 'sqlalchemy.dialects.postgresql' has no attribute 'MONEY'

通过以下手段解决

pip uninstall marshmallow-sqlalchemy
pip install marshmallow-sqlalchemy==0.17.1

另外初始化数据库的时候,可能会报

Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql

官方文档上有解决方案

我这里直接贴出

mysql --help | grep my.cnf
# 在[mysqld]下面(一定不要写错地方)添加如下配置:
explicit_defaults_for_timestamp=1
systemctl restart mysqld

airflow使用

airflow 组件

  • airflow组件:webserver, scheduler, worker, flower
  • 后台启动各组件命令:airflow xxx -D
  • 查看dag列表:airflow list_dags
  • 查看某个dag的任务列表:airflow list_tasks dag_id
  • 挂起/恢复某个dag:airflow pause/unpause dag_id
  • 测试某个dag任务:airflow test dag_id task_id execution_date

特别坑的点!!

通过命令airflow webserver -p 8080 会报如下错误

Error: 'python:airflow.www.gunicorn_config' doesn‘t exist

通过pip命令安装pip install gunicorn==19.4.0后,这个错误依旧在报
具体解决办法在于,pip本身会装有gunicorn,若没有将新版的gunicorn代替老版,这个错误就不会消失

mv /usr/bin/gunicorn /usr/bin/gunicorn_old
ln -s /usr/local/python3/bin/gunicorn /usr/bin/gunicorn

接下来通过命令在后台启动

airflow webserver -D -p 8080

至此airflow初步搭建完成

版权声明:本文为原创文章,版权归 heroyf 所有。
本文链接: https://www.heroyf.club/2019/09/21/airflow_bushu/


“苹果是给那些为了爱选择死亡的人的奖励”