1. airflow完整安装流程
1.1 airflow 基础安装
1)默认自带python2环境,自行安装pip
1 | yum -y install epel-release |
2)进行pip的更新,否则很多安装会报错
1 | pip install --upgrade pip |
3)安装开发库
1 | yum install python-devel |
4)安装centos7下的mysql
1 | yum -y install mariadb mariadb-server |
5)初始化配置mysql
注:可以设定允许root远程登录,并且删除test和None用户,这样才能使得mysql允许远程登录
1 mysql_secure_installation
6)安装airflow
在此之前需要设定临时环境变量
1
2 export SLUGIFY_USES_TEXT_UNIDECODE=yes
pip install apache-airflow
7)初始化airflow并启动
1 | airflow initdb |
8)防止密码明文存储
1 | pip install cryptography |
1.2 airflow mysql安装
1)安装airflow-mysql
1 | pip install apache-airflow[mysql] |
2)创建airflow用户,创建airflow数据库并给出所有权限给次用户
1 | create database airflow; |
3)修改airflow配置文件,指向数据库mysql
1 | ~/airflow/airflow.cfg 文件修改:sql_alchemy_conn = mysql://ct:152108@localhost/airflow |
4)进行mariadb更新,从5.5.60升级为10.2.19,然后修改配置文件添加参数,之后初始化数据库
1 | vim /etc/my.cnf |
1.3 airflow 安装配置celery+rabbitmq(官方推荐使用rabblitmq)
1.3.1 安装celery和rabbitmq组件
1 | pip install airflow[celery] |
1.3.2 系统安装rabbit
1)安装 erlang
1 | yum install erlang |
2)安装 rabbitmq
1 | wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15-1.el6.noarch.rpm |
3)配置rabbitmq(设置用户名root,密码123123,创建虚拟主机airflow-rabbitmq)
1 | rabbitmqctl add_user root rabbitmq |
1.3.3 修改airflow配置文件
1 | executor = CeleryExecutor |
1.4 airflow 安装配置celery+redis
1.3.1 安装redis
1)系统安装redis
1 | yum -y install redis |
2)修改配置文件
1 | vim /etc/redis.conf |
3)开启redis服务
1 | systemctl start redis |
4)python下安装redis库
1 | pip install redis |
1.3.2 安装celery
1 | pip install celery |
1.3.3 配置airflow.cfg
修改内容:1
2
3executor = CeleryExecutor
broker_url = redis://127.0.0.1:6379/0
result_backend = redis://127.0.0.1:6379/0
1.3.4 airflow常用命令
1 | airflow webserver -p 8080 // 打开web服务 |
1 | airflow list_dags //查看已有的dag列表 |
1 | airflow test dag_name task_name test_time |
1 | airflow run dagid [time] run task instance |
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数占满之后就进入等待状态