1.安装mysql5.7
参考我的另一篇文章:CentOS 7安装mysql 5.7
2.安装python3.6.6
参考我的另一篇文章:Python 3.6.6安装方法(保留环境中python2不受影响)-优快云博客
3.开始进入airflow安装环节:
安装必要的依赖
yum -y install epel-release
yum install python-pip ##如果没有安装pip的话
#环境变量设置如下代码配置环境变量,此环境变量仅需要设置成临时变量即可并不需要配置成永久变量
export SLUGIFY_USES_TEXT_UNIDECODE=yes
#设置环境变量, 后面安装db和修改配置文件用,非常重要
vim ~/.bash_profile
#增加以下
export AIRFLOW_HOME=/home/airflow
export SITE_AIRFLOW_HOME=/usr/local/python3/lib/python3.6/site-packages/airflow
export PATH=$PATH:$SITE_AIRFLOW_HOME/bin
#然后使环境变量生效
source ~/.bash_profile
#用find / -name python3的安装目录,先将pip3 放入环境变量当中
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
升级pip3之前要先把pip3的源换一下: 点击——》
因为CentOS7自带了python2.x,但不会带pip,如果没有pip,也可以考虑安装一个。
然后升级pip 和 setuptools:注意这里用指令pip3,而不是pip
pip3 install --upgrade pip
pip3 install --upgrade setuptools
设置一下临时环境变量:
export AIRFLOW_GPL_UNIDECODE=yes
export SLUGIFY_USES_TEXT_UNIDECODE=yes
然后安装一些依赖库:
yum install python-devel
yum install libevent-devel
yum install mysql-devel
然后安装airflow脚手架
pip3 install apache-airflow===1.10.9 //指定版本号,默认就升级到最新。经测试,1.10.0有很多依赖组件有版本冲突,不好解决,因此使用1.10.9
airflow会被安装到下面这个目录
${PYTHON_HOME}/lib/python3.6/site-packages/airflow
接着安装mysql组件
pip3 install 'apache-airflow[mysql]'
如果报下面的错误
ERROR: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-dq81ujxt/mysqlclient/
#解决方案,查看是否有mysql_config文件
[root@test01 ~]$ find / -name mysql_config
#如果没有
[root@test01 ~]$ yum -y install mysql-devel
#安装完成后再次验证是否有mysql_config
find / -name mysql_config
之后执行airflow,会自动在AIRFLOW_HOME下生成airflow.cfg文件
如果顺利的话,开始修改cfg文件,具体如何修改可参考下面这个文章
然后开始执行
#初始化元数据库信息(其实也就是新建airflow依赖的表)
pip install celery
pip install apache-airflow['kubernetes']
airflow initdb
如果没有报错,说明初始化成功
接下来就开始进行一些数据库权限配置
#准备操作
#关闭linux防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
#同时需要关闭windows防火墙
#数据库设置
mysql -uroot -proot
mysql> set password for 'root'@'localhost' =password('');
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on airflow.* to 'airflow'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on airflow.* to 'root'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit;
#启动组件:
airflow webserver -D
airflow scheduler -D
airflow worker -D
airflow flower -D
下面开始总结一些安装过程中遇到的问题如何解决及需要注意的点:
1.如果报缺少某些Module 可以尝试用pip命令进行安装
2. 若出现某些组件版本号不被允许,可以尝试先卸载,再重新安装airflow需要的版本
比如:pip3 uninstall 组件名===要卸载的版本号
pip3 install 组件名===要升级到的版本号
3.启动组件时启动命令要加-D,避免因为ctrl+c导致服务终止:
airflow webserver -D
airflow scheduler -D
或者:
airflow启动命令:
nohup airflow webserver -p 8090 >/dev/null 2>&1 &
nohup airflow scheduler >/dev/null 2>&1 &
4.关于时区的修改可以参考这个文章:airflow修改成中国时区(匹配1.10版本)
1).修改源码改为本地时间
在airflow家目录下修改airflow.cfg,设置
default_timezone = Asia/Shanghai
2).进入airflow包的安装位置,也就是site-packages的位置,修改airflow/utils/timezone.py
在 utc = pendulum.timezone(‘UTC’) 这行(第27行)代码下添加:
try:
tz = configuration.conf.get("core", "default_timezone")
if tz == "system":
utc = pendulum.local_timezone()
else:
utc = pendulum.timezone(tz)
except Exception:
pass
这里注意了:很多文档这里写的是从configuration module里获取这个值,不知道为啥那样会报错,也许是版本问题,根据报错信息,改成了从cfg文件的core部分读default_timezone值就是对的,用configuration.conf.get表示从cfg文件读
3).修改utcnow()函数 (在第69行)
原代码 d = dt.datetime.utcnow()
修改为 d = dt.datetime.now()
4).修改airflow/utils/sqlalchemy.py
在utc = pendulum.timezone(‘UTC’) 这行(第37行)代码下添加同上述第二条那段代码
5).修改airflow/www/templates/admin/master.html(第31行)
把代码 var UTCseconds = (x.getTime() + x.getTimezoneOffset()*60*1000);
改为 var UTCseconds = x.getTime();
把代码 "timeFormat":"H:i:s %UTC%",
改为 "timeFormat":"H:i:s",
在airflow/models/dag.py中get_last_dagrun定义之前添加:
#lhf add ----start---------
def utc2local(self,utc):
import time
epoch = time.mktime(utc.timetuple())
offset = datetime.fromtimestamp(epoch) - datetime.utcfromtimestamp(epoch)
return utc + offset
#lhf add -----end---------
最后重启airflow-webserver即可
还可以参考这两位同学的笔记,很详细:Airflow 1.10安装 - 知乎 Airflow安装 - 简书
5.关于airflow 的管理台用户管理及权限配置
(2)关于用户权限配置
1.用户登录认证采取用户名密码方式,因此需要装password组件
pip3 install apache-airflow[password]
2.修改 airflow.cfg
[webserver]
authenticate = True
auth_backend = airflow.contrib.auth.backends.password_auth
3. 在python环境中执行如下代码以添加账户:
import airflow
from airflow import models, settings
from airflow.contrib.auth.backends.password_auth import PasswordUser
user = PasswordUser(models.User())
user.username = '用户名' # 用户名
user.email = '用户邮箱' # 用户邮箱
user.password = '用户密码' # 用户密码
#user.superuser = 1; 这句可能不对,待验证,超级管理员只能有一个
session = settings.Session()
session.add(user)
session.commit()
session.close()
exit()
6.如果出现
执行:pip3 install paramiko