Apache Airflow搭建及使用指南

本文详细介绍了在CentOS7环境下安装与配置Apache Airflow 1.10.9的过程,包括安装MySQL、Python3.6.6、Airflow及其依赖组件,设置环境变量,初始化元数据库,数据库权限配置,以及解决安装过程中的常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的源换一下: 点击——》

pip/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安装 - 简书

然后开始执行

#初始化元数据库信息(其实也就是新建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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值