首页 > 编程知识 正文

Airflow详细搭建过程亲测 总结,嵌入式系统软件平台搭建过程

时间:2023-05-05 00:48:50 阅读:261050 作者:2359

Airflow详细搭建过程(亲测+总结)

官网: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 needs a home, ~/airflow is the default,# but you can lay foundation somewhere else if you prefer# (optional)export AIRFLOW_HOME=~/airflow# install from pypi using pippip install apache-airflow# initialize the databaseairflow initdb# start the web server, default port is 8080# airflow webserver -p 8080 这里做个修改,后面加上-D参数让它后台运行airflow webserver -p 8080 -D# start the schedulerairflow scheduler# visit localhost:8080 in the browser and enable the example dag in the home page

经过上述的步骤的话,可以在浏览器中打开这个页面:

搭建到这里,可以看到一个基础的样子,但是从目前而言,我能发现的有以下几个问题:

airflow的元数据存储信息默认是使用sqlite进行存储。页面的右上角的时间是比正常的时间晚了8个小时的airflow默认是用单线程调度任务的,如下图(之后就知道了)

现在问题已经暴露了,那么就开始处理吧。 airflow的元数据存储默认用sqlite,现在切换为mysql

sqlite不支持多线程,所以我打算切换成mysql,mysql的安装可以参考:Linux centos安装mysql
airflow中可选很多其它的选项,那么在airflow里面我们可以选择一些所需的组件,例如现在需要利用mysql存储airflow的相关信息,可选的功能列表在此处airlfow的其它选项
就需要pip install 'apache-airflow[mysql]'
这里,我就不挑了,直接来全套插件,这样就会遇到更多的坑:

yum install mysql-devel gcc gcc-devel python-devel krb5-devel.x86_64 cyrus-sasl-devel -ypip install 'apache-airflow[all]' -i https://pypi.tuna.tsinghua.edu.cn/simple/

这个时候可能会遇到很多的错误,例如下面的:

这里面的错误要有点耐心去处理一下,在这里面一般都是版本上的错误,将红字里面出现的版本卸载掉,重新指定版本号安装就好了。

配置airflow 配置mysql作为airflow的元数据信息的存储: vim /etc/my.cnf 在[mysqld]下面添加explicit_defaults_for_timestamp=1systemctl restart mysqld重启mysql在mysql中创建一个数据库,我这边的数据库的名字叫做airflow
进入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的任务脚本。现在的水平还只是简单的任务脚本的编写,还需要多多努力。
最后,如果大佬看完之后,发现这个文档里面有什么问题,或是有什么更好的建议,请在下方留言。谢谢!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。