官网:Apache airflow
Airflow是社区创建的一个平台,用于以编程方式编写,安排和监视工作流。
半个月前搭了一次,现在做一个记录,不逼逼,开始搭建了,全程多图:
系统: cent os 7
conda版本: 4.8.2
airflow版本 1.10.11
我这边会用一个conda创建一个apache airflow的环境:
conda create -n airflow_env python=3.7切换到当前的这个环境:
conda activate airflow_env 搭建airflow搭建airflow的话,官网有一套详细的文档Airflow 搭建
接下来就按照这个方式来
经过上述的步骤的话,可以在浏览器中打开这个页面:
搭建到这里,可以看到一个基础的样子,但是从目前而言,我能发现的有以下几个问题:
现在问题已经暴露了,那么就开始处理吧。 airflow的元数据存储默认用sqlite,现在切换为mysql
sqlite不支持多线程,所以我打算切换成mysql,mysql的安装可以参考:Linux centos安装mysql
airflow中可选很多其它的选项,那么在airflow里面我们可以选择一些所需的组件,例如现在需要利用mysql存储airflow的相关信息,可选的功能列表在此处airlfow的其它选项
就需要pip install 'apache-airflow[mysql]'
这里,我就不挑了,直接来全套插件,这样就会遇到更多的坑:
这个时候可能会遇到很多的错误,例如下面的:
这里面的错误要有点耐心去处理一下,在这里面一般都是版本上的错误,将红字里面出现的版本卸载掉,重新指定版本号安装就好了。
进入airflow的文件夹下,修改airflow.cfg。
解决airflow一次只能执行一个任务的问题:
相关的依据请参考airflow 执行者解决airflow时间晚了八个小时的问题
修改airflow.cfg的内容:
这部分的内容就要参考airflow 修改源码
具体的内容如下:#找到airflow的安装位置find / -name airflow 修改/root/anaconda3/envs/airflow_env/lib/python3.7/site-packages/airflow/utils/timezone.py
在第27行下面添加:
from airflow import configuration as conftry:tz = conf.get("core", "default_timezone")if tz == "system":utc = pendulum.local_timezone()else:utc = pendulum.timezone(tz)except Exception:pass 修改 utcnow() 函数:
修改/root/anaconda3/envs/airflow_env/lib/python3.7/site-packages/airflow/utils/sqlalchemy.py
在第38行下面添加: utc = pendulum.timezone('UTC') from airflow import configuration as conftry:tz = conf.get("core", "default_timezone")if tz == "system":utc = pendulum.local_timezone()else:utc = pendulum.timezone(tz)except Exception:pass
注释掉这个:
3. 修改/root/anaconda3/envs/airflow_env/lib/python3.7/site-packages/airflow/www/templates/admin/master.html
修改下箭头所指的行,修改的内容在注释的下面
此时修改完毕了,这个时候重启一下 airflow就好了。修改源码的操作参考:airflow 修改中国时区(改airflow源码)
使用了mysql作为元数据信息的存储,在mysql里面可以看到:
登录airflow的时候:
这个airflow作为一个调度工具,这次只是提到了如何去安装搭建,以后有空的时候,我想补充一篇如何编写airlfow的任务脚本。现在的水平还只是简单的任务脚本的编写,还需要多多努力。
最后,如果大佬看完之后,发现这个文档里面有什么问题,或是有什么更好的建议,请在下方留言。谢谢!