airflow2.1.2离线安装部署--anaconda3+postgresql
基本思路
airflow是python下的一个模块,我们是可以在一台外网机器(必须与内网python的版本相同)上安装好airflow之后,再将python目录下的site-packages目录拷贝到内网python的site-packages目录下的。
主要难点在于,外网安装airflow时由于需要下载安装的其他依赖包过多,导致安装频繁被中断。
有两个技巧:
1、不要直接pip install airflow,推荐使用国内镜像源
2、需要下载的依赖较多,如果失败后检查是哪一个依赖下载安装失败,就直接先安装这个依赖,【反复重试】
安装环境
- centos 7.7
- anaconda3(python3.7)
- postgresql 12.3
安装步骤
准备一台linux内核版本和anaconda版本都与内网相同的虚拟机
在虚拟机中直接安装airflow
1、拷贝压缩【内网】site-packgeage目录
#拷贝压缩【**内网**】site-packgeage目录
cd /home/anaconda3/lib/python3.7/
tar -zcvf site-packages.tar.gz site-packages
2、备份【外网】site-packages目录,并将【内网】拷贝过来的site-package目录进行替换
cd /home/anaconda3/lib/python3.7/
mv site-packages site-packages-bak
#此处的site-packages.tar.gz就是从内网拷贝过来的
tar -zxvf site-packages.tar.gz
3、在外网安装airflow,使用国内源
有多个国内镜像源可选,不过阿里源暂时没有airflow的2.1.2版本,所以我选择了清华源。
# 在外网安装airflow
pip install airflow==2.1.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
其他源也可以尝试一下
阿里云
https://mirrors.aliyun.com/pypi/simple/
中国科技大学
https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban)
http://pypi.douban.com/simple/
清华大学
https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学
http://pypi.mirrors.ustc.edu.cn/simple/
此处可能会有多次失败,由于需要安装的依赖非常多,经常遇到下载超时的情况,建议多次尝试,多个源切换尝试。
有一个小坑: 自动安装airflow时,需要安装apache-beam和pyyaml,自动选择安装apache-beam2.10后,其依赖pyymal和版本和airflow2.1.2依赖的pyymal版本有冲突,最终手动升级apache-beam到2.30,然后PyYAML选择5.1版本。4、将【外网】的site-packages目录打包替换【内网】对应目录,并将【外网】airflow启动脚本拷贝到【内网】
将【外网】的site-packages目录打包替换【内网】对应目录,这一步比较简单,略过不讲
pip install airflow完成后,我们可以查看airflow大概改了哪些目录,然后发现除了在site-packages目录下新建了一个目录外,还在anaconda的bin目录下有个启动脚本(/root/airflow是在初始化之后生成的):
find / -name airflow
我们打开bin下的airflow脚本,
第一行目录位置修改成你自己的anaconda位置
然后将修改后的airflow脚本拷贝到内网的anaconda的bin目录下
并增加执行权限
chmod 777 airflow
基本的依赖我们已经搞完了,接下来需要配置一下数据库和web登录需要的账号密码,这两部都是在内网完成
5、配置postgre数据库
在postgresql数据库中新建一个库,库名airflow
psql -h xxx.xxx.xxx.xxx -U 账号 -d 数据库
create database airflow
初始化airflow,会在当前用户的根目录下生成airflow目录,包含airflow.cfg配合文件等
airflow db init
修改airflow.cfg,配置数据库参数
sql_alchemy_conn = postgresql://用户名:密码@localhost:5432/airflow
再次执行[airflow db init]初始化数据库,可以看到pg的airflow数据库中多了很多表格
6、修改环境变量,启动Airflow
export AIRFLOW_HOME=~/airflow
启动airflow
nohup airflow webserver -p 18080 > webserver.log &
nohup airflow scheduler > scheduler.log &
nohup airflow worker > worker.log &
nohup airflow flower> flower.log &
此时已经可以在浏览器通过端口18080看到airflow的页面了,不过需要用户名和密码,我们暂时还没有,接下来我们新增一下
7、新增用户名和密码
airflow里有两种新增用户名和密码的方法
- 在python脚本里通过UserPassword模块
- 在airflow.cfg文件中配置rbac
我们选用第二种方法,我个人觉得在内网环境下更简单
airflow.cfg的[webserver]模块最后新增几行
[webserver]
security = Flask AppBuilder
secure_mode = True
rbac = True
注意:如果在[webserver]里面有 authenticate 和 auth_backend 的配置,就必须先将其注释掉了
添加配置之后,需要重建数据库表:
airflow db reset
这种情况下,创建用户必须使用命令行 airflow create_user
airflow create_user --lastname user --firstname admin --username admin --email admin_user@mail.com --role Admin --password admin
airflow create_user --lastname user --firstname view --username view --email view_user@mail.com --role Viewer --password view
然后就可以愉快的登录airflow了