airflow2.1.2离线安装部署--anaconda3+postgresql

离线安装与部署Airflow 2.1.2:Anaconda3 + PostgreSQL详细指南
本文档详细介绍了如何在CentOS 7.7上使用Anaconda3和PostgreSQL12.3离线安装Airflow 2.1.2。主要步骤包括:备份和替换site-packages,使用国内源在外网安装Airflow,处理依赖冲突,将安装好的环境打包替换内网环境,配置PostgreSQL数据库,启动Airflow服务,并创建用户和密码。过程中特别提到使用清华源解决下载问题,以及手动解决Apache Beam和PyYAML的版本冲突问题。

基本思路

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里有两种新增用户名和密码的方法

  1. 在python脚本里通过UserPassword模块
  2. 在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了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值