1. airflow完整安装流程

1.1 airflow 基础安装

1)默认自带python2环境,自行安装pip
yum -y install epel-release
yum install python-pip
2)进行pip的更新,否则很多安装会报错
pip install --upgrade pip
pip install --upgrade setuptools
3)安装开发库
yum install python-devel
yum install libevent-devel
yum install mysql-devel
4)安装centos7下的mysql
yum -y install mariadb mariadb-server
启动并设置开机启动
systemctl start mariadb
systemctl enable mariadb
5)初始化配置mysql

注:可以设定允许root远程登录,并且删除test和None用户,这样才能使得mysql允许远程登录

mysql_secure_installation
6)安装airflow

在此之前需要设定临时环境变量

export SLUGIFY_USES_TEXT_UNIDECODE=yes
pip install apache-airflow
7)初始化airflow并启动
airflow initdb
airflow webserver -p 8080
8)防止密码明文存储
pip install cryptography

1.2 airflow mysql安装

1)安装airflow-mysql
pip install apache-airflow[mysql]
2)创建airflow用户,创建airflow数据库并给出所有权限给次用户
create database airflow;
create user 'testairflow'@'%' identified by '123123';
GRANT all privileges on airflow.* TO 'testairflow'@'%'  IDENTIFIED BY '123123';
FLUSH PRIVILEGES;
3)修改airflow配置文件,指向数据库mysql
~/airflow/airflow.cfg 文件修改:sql_alchemy_conn = mysql://ct:152108@localhost/airflow
4)进行mariadb更新,从5.5.60升级为10.2.19,然后修改配置文件添加参数,之后初始化数据库
vim /etc/my.cnf
explicit_defaults_for_timestamp=1   // 添加此行
systemctl restart mariadb
airflow initdb

1.3 airflow 安装配置celery+rabbitmq(官方推荐使用rabblitmq)

1.3.1 安装celery和rabbitmq组件

pip install airflow[celery] 
pip install airflow[rabbitmq]

1.3.2 系统安装rabbit

1)安装 erlang
yum install erlang
2)安装 rabbitmq
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15-1.el6.noarch.rpm
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
yum install rabbitmq-server-3.6.15-1.el6.noarch.rpm
3)配置rabbitmq(设置用户名root,密码123123,创建虚拟主机airflow-rabbitmq)
rabbitmqctl add_user root rabbitmq
rabbitmqctl add_vhost airflow-rabbitmq
rabbitmqctl set_user_tags root airflow-rabbitmq
rabbitmqctl set_permissions -p airflow-rabbitmq root ".*" ".*" ".*"
rabbitmq-plugins enable rabbitmq_management

1.3.3 修改airflow配置文件

executor = CeleryExecutor
broker_url = amqp://root:123123@localhost:5672/airflow-rabbitmq
result_backend = amqp://root:123123@localhost:5672/airflow-rabbitmq

1.4 airflow 安装配置celery+redis

1.3.1 安装redis

1)系统安装redis
yum -y install redis
2)修改配置文件
vim /etc/redis.conf
#bind 127.0.0.1     // 注释掉,使redis允许远程访问
requirepass 密码  // 修改这行,redis登录密码
3)开启redis服务
systemctl start redis
4)python下安装redis库
pip install redis

1.3.2 安装celery

pip install celery

1.3.3 配置airflow.cfg

修改内容:

executor = CeleryExecutor
broker_url = redis://127.0.0.1:6379/0
result_backend = redis://127.0.0.1:6379/0

1.3.4 airflow常用命令

airflow webserver -p 8080   // 打开web服务
airflow scheduler       //打开调度器,必须启动,不然DAG在使用celeryExecutor和LocalExcutor没法run起来
airflow list_dags           //查看已有的dag列表
airflow list_tasks tutorial         //查看某个dag下的任务
airflow list_tasks tutorial --tree  //树形结构查看
airflow test dag_name task_name test_time
airflow run dagid [time] run task instance
airflow backfill [dagid] -s[startTime] -e [endTime] run a backfill over 2 days

3. airflow 架构

3.1核心概念:

DAG有向无环图

一个DAG由多个task组成

3.2 包含组件:

1)一个元数据库(mysql)
2)一组airflow工作节点
3)一个调节器(redis或RabbitMQ)
4)一个airflow web服务器

3.3 工作流依赖种类:

1)时间依赖:定时触发任务

完整支持crontab表达式,还支持python的datatime

2)任务间依赖:任务A需要在任务B完成的基础上触发
3)权限依赖:用户权限管理
4)机器依赖:任务的执行只能在某些指定机器上执行

在celeryExcuter可以使用不同的用户启动worker,不同的worker监听不同的queue,解决用户权限依赖问题;worker也可以启动在不同的机器上,解决机器依赖问题

5)外部系统依赖:依赖各种外部数据库数据等,并且需要调用接口访问外部数据

有一个hook机制,作用时建立一个与外部数据系统的连接,比如mysql、hdfs、本地文件系统,通过拓展的hook

6)资源依赖:某些任务消耗机器资源非常多,进行任务执行时需要对任务进行限制

可以为任意的task指定一个抽象的pool,每个pool指定一个slot数,每启动一个task任务就占用一个slot数,当slot数占满之后就进入等待状态

3.4 基本使用过程

1)根据实际需要,使用不同的Operator
2)传入具体的参数,定义一系列的tasks // operator是task的抽象类
3)定义tasks之间的关系,形成一个DAG
4)调度DAG运行,每个task会形成一个instance
5)使用命令或者web ui进行查看管理