airflow初探(一)-- 安装和部署

airflow搭建分布式流程控制

Airflow是一个可编程,调度和监控的工作流平台,基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行。airflow提供了丰富的命令行工具用于系统管控,而其web管理界面同样也可以方便的管控调度任务,并且对任务运行状态进行实时监控,方便了系统的运维和管理。

Airflow的工作流程

airflow 的守护进程彼此之间是独立的,他们并不相互依赖,也不相互感知。每个守护进程在运行时只处理分配到自己身上的任务,他们在一起运行时,提供了 airflow 的全部功能。

  • 调度器 scheduler 会间隔性的去轮询元数据库(Metastore)已注册的 DAG(有向无环图,可理解为作业流)是否需要被执行。如果一个具体的 DAG 根据其调度计划需要被执行,scheduler 守护进程就会先在元数据库创建一个 DagRun 的实例,并触发 DAG 内部的具体 task(任务,可以这样理解:DAG 包含一个或多个task),触发其实并不是真正的去执行任务,而是推送 task 消息至消息队列(即 broker)中,每一个 task 消息都包含此 task 的 DAG ID,task ID,及具体需要被执行的函数。如果 task 是要执行 bash 脚本,那么 task 消息还会包含 bash 脚本的代码。

  • 用户可能在 webserver 上来控制 DAG,比如手动触发一个 DAG 去执行。当用户这样做的时候,一个DagRun 的实例将在元数据库被创建,scheduler 使同 #1 一样的方法去触发 DAG 中具体的 task

  • worker 守护进程将会监听消息队列,如果有消息就从消息队列中取出消息,当取出任务消息时,它会更新元数据中的 DagRun 实例的状态为正在运行,并尝试执行 DAG 中的 task,如果 DAG 执行成功,则更新任 DagRun 实例的状态为成功,否则更新状态为失败。

airflow 单节点部署

以所有上守护进程运行在同一台机器上即可完成 airflow 的单结点部署,架构如下图所示:
单节点部署

##Airflow多节点(集群)部署
在稳定性要求较高的场景,一般采用集群、高可用的方式来部署。Apache Airflow 同样支持集群、高可用的部署,airflow 的守护进程可分布在多台机器上运行,架构如下图所示:
集群部署
以上内容引自于:https://www.jianshu.com/p/2ecef979c606

Airflow安装与部署

安装环境

  • centos 7.2
  • Airflow 1.9
  • Python 2.7.5
  • Celery 4.3.0
  • Redis 4.1.0
  • Mysql 5.7

Airflow1.9要求Celery4.X,而且兼容性需要Redis4.X

安装过程

1. 安装准备
新建用户
groupadd airflow
useradd airflow -g airflow

默认自带python2环境,自行安装pip;  安装pip,并进行升级,不然会报错
yum -y install epel-release
yum install python-pip

pip install --upgrade pip
pip install --upgrade setuptools
1.安装开发库
yum install python-devel
yum install libevent-devel
yum install mysql-devel

yum install gcc

安装的过程可能会出现markupsafe的问题,需要对其进行写在重装
sudo pip uninstall markupsafe
sudo pip install markupsafe
2.Airflow安装
1)在此之前需要设定临时环境变量
export SLUGIFY_USES_TEXT_UNIDECODE=yes
pip install apache-airflow==1.9


2)安装airflow-mysql
pip install apache-airflow[mysql]==1.9

3)修改配置文件
airflow安装完成之后,默认在用户根目录下,产生airflow目录
vim ~/airflow/airflow.cfg 
sql_alchemy_conn = sqlite:root/airflow/airflow.db 
替换为
sql_alchemy_conn = mysql://root:Admin@ads1111@127.0.0.1:3306/airflow

4)执行数据库初始化
airflow initdb

配置CeleryExecutor
1)安装redis==4.0.6
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
tar -zxvf redis-4.0.6.tar.gz
cd redis-4.0.6
make MALLOC=libc
cd src && make install
 
或者
yum -y install redis==4.0.6

2)修改配置文件
vim /etc/redis.conf
#bind 127.0.0.1     // 注释掉,使redis允许远程访问
requirepass 密码  // 修改这行,redis登录密码

3)开启redis服务
编译安装的话:./redis-server /usr/local/redis-4.0.6/redis.conf
yum安装的话:systemctl start redis

4)python下安装redis库
pip install redis
pip install apache-airflow[redis]==1.9
pip install -U Celery==4.3.0
pip install apache-airflow[celery]==1.9

5)修改airflow.cfg配置文件
更改exector
# SequentialExecutor, LocalExecutor, CeleryExecutor, DaskExecutor
executor = CeleryExecutor  

更改broker_url 和celery_result_backend
#broker_url = sqla+mysql://airflow:airflow@localhost:3306/airflow
broker_url = redis://127.0.0.1:6379/0
# Another key Celery setting
celery_result_backend = db+mysql://root:Admin@ads1111@127.0.0.1:3306/airflow
Airflow开启执行
airflow webserver -p 8080    开启webserver

airflow scheduler   开启调度

airflow worker  开启消费者进程   注意:这需要使用非root账号执行,如果需要root执行,需要进行配置,配置见下方

webserver启动成功
在这里插入图片描述
scheduler启动成功
在这里插入图片描述

worker启动成功
在这里插入图片描述

安装过程中出现的问题
  • airflow initdb 时报错
    出现异常:Exception: Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql
    解决方式:修改mysql的配置文件 my.cnf,添加
    在这里插入图片描述
  • airflow worker (非root用户执行)
TypeError: Invalid argument(s) 'visibility_timeout' sent to create engine(), using configuration MySQLDialect_mysqldb/QueuePool/Engine. Please check that the keyword arguments are appropriate for this combination of components.

由于使用的非root用户,执行的时候会在home读取该用户根目录下的airflow的配置,并非root之前的配置好的airflow.cfg,相当于读取的是默认的配置,所以需要在非用户的根目录下,配置和root用户一行的配置才行。而且要保证非root用户和root用户的dag路径一致,否则将导致,非root用户执行的时候,找不到dag文件

  • 无法使用root用户启动worker
    1)修改源码,(该方法不推荐线上使用)
/usr/lib/python2.7/site-packages/airflow/executors,修改celery_executor.py源码文件

头部导入
from celery import Celery, platforms

在app = Celery(…)后新增
platforms.C_FORCE_ROOT = True

2)添加环境变量

C_FORCE_ROOT = True

vim /etc/profile
最后添加
export C_FORCE_ROOT=True

执行:source /etc/profile

未完,待续…

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值